Что такое хороший домен .com? 🤔

TL; DR; Я обучил LinearSVC предсказывать хорошие домены .com с точностью 0,74.
Убедитесь сами, как работает модель на https://DailyDomainIdeas.com или @DomainIdeaDaily. В Твиттере 🐦

Хороший домен .com: 1) короткий 2) простой и 3) имеет значение

Как алгоритм может узнать, что такое хороший .com?

Я обучаю модель, позволяющую автоматизировать поиск ежедневных идей домена для моего побочного проекта DailyDomainIdeas.com.

Я не собираюсь лгать; Я люблю просматривать списки доменов с истекшим сроком действия на https://expireddomains.net/, где я собираю все свои домены с истекшим сроком действия.

Мне нравится задача найти домен-убийцу в стоге сена таких доменов, как hello-1-2-3.com, и опубликовать его на веб-сайте. Мне нравится этот еженедельный распорядок.

Что я автоматизировал до сих пор

Я уже автоматизировал большую часть процесса с помощью нескольких заданий cron.

1. Задание cron, которое просыпается каждую ночь, выбирает доступный домен, создает сообщение в Twitter и Instagram, а затем публикует его на веб-сайте.

2. Еще одно задание cron, которое просыпается раз в час и проверяет, занят ли какой-либо из доменов. Если это так, он помечает его как сделанный на веб-сайте и снова переходит в режим сна.

3. И последнее задание cron, которое просыпается каждую ночь и публикует твит с идеей ежедневного домена.

На данный момент уже занята куча моих любимых доменов, и некоторые из них, к которым я должен был сказать "доброго пути", - это CatTrim.com, DoggyOwner.com, PoolTemps.com. и FreshMocha.com. Наблюдение за захватом доменов на самом деле является для меня хорошим способом смягчить мой синдром «блестящего нового объекта».

Последняя автоматизация, чтобы править всеми

В любом случае осталась одна ручная задача, которую я вынужден выполнять каждый день; Поиск хороших доменов для моих заданий cron для публикации.

В любом случае, что такое хороший домен .com?

Чтобы иметь возможность обучать модель, которая просматривает просроченные домены, мне нужно было подумать о том, что такое хороший домен на самом деле. Я свел это к трем основным характеристикам:

1. Простота

  • распространенные слова
  • общий порядок слов 🤖

2. Длина

  • Короче 10 символов
  • 1 слово или максимум 2 слова

3. Значение

  • Каждое слово имеет значение
  • Слова принадлежат друг другу

Начиная с этих трех критериев, все категории просты и понятны. Например, если домен содержит ‹10 символов или 1 максимум или 2 слова. Но один из них требует более глубокого понимания: является ли домен обычным порядком слов?

Разница между голубым небом и небом? ➡️ Обычная последовательность слов

Как узнать, состоит ли домен из обычного порядка слов? Довольно легко отличить обычную последовательность слов, например, «голубое небо», от менее распространенного для человека «небесного неба». Но как научить этому алгоритм?

Я решил, что здесь может помочь языковая модель.

В качестве примера возьмем этот доступный домен: DogJars.com.

Конечно, он короткий и состоит из двух общих слов, каждое слово что-то означает, но насколько легко будет запомнить этот домен? Насколько распространен порядок слов?

Моя стратегия выяснить, знаком ли порядок слов, а затем использовать его как функцию для обучения, заключается в использовании языковой модели BERT.

BERT, чтобы найти общий порядок слов в DogJars.com vs. DogFood.com

Цель использования языковой модели BERT - выяснить, являются ли слова в домене общими и насколько типична последовательность слов.

Начав со словаря языковой модели BERT, найдите индекс второго слова «jars» в «DogJars.com».

from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
jars_index = tokenizer.convert_tokens_to_ids('jars')

Если слово существует в словаре, результатом будет индекс, отличный от 100. В этом случае «jars» получит индекс 25067.

Теперь, когда у нас есть индекс для «jars», следующим шагом будет прогнозирование вероятности появления всех следующих слов после «dog».

from transformers import BertTokenizer, BertLMHeadModel, BertConfig
import torch
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
config = BertConfig.from_pretrained("bert-base-uncased")
config.is_decoder = True
model = BertLMHeadModel.from_pretrained('bert-base-uncased', config=config)
inputs = tokenizer("dog", return_tensors="pt")
outputs = model(**inputs)
pred_logits = outputs.logits

Результатом модели является массив с вероятностями следующего слова после слова «собака». Форма pred_logits будет выглядеть примерно так: torch.Size ([1, 3, 28996] ) Где 28996 - длина массива слов.

# Get the softmax probability for the word index
softmax_tensor_value = torch.nn.functional.softmax(pred_logits, dim=2)[0][0][25067] # The index of 'jars'
# Detach the tensor
softmax_array = softmax_tensor_value.detach().cpu().numpy()
# Get the probability value
word_order_probability = np.atleast_1d(softmax_array)[0]

Используя SoftMax, мы получим вероятность появления «банок» из массива слов.

Наконец, для слова «jars» вероятность наступления после слова «dog» составляет 3,0801607e-06 или 0,0003080161%.

Для сравнения, давайте попробуем использовать слово, которое кажется более интуитивным, после слова «собака»; еда.

"Еда" получает индекс 2833, а вероятность наступления после слова "собака" составляет 0,001891327%.

Таким образом, слово "еда" примерно в 6 раз чаще следует за словом "собака". Следовательно, в DogFood · com более распространен порядок слов, чем в DogJars · com .

(DogFood · com, к сожалению, уже используется, но вы можете свободно работать с DogJars · com, он все еще доступен, спасибо позже).

Самое интересное: обучение моделей

Все функции извлекаются автоматически, и единственное, что я делаю вручную, - это выбор между «хорошим» и «плохим» доменом. У меня уже есть список из ~ 300 (выбранных людьми) хороших доменов. Поэтому я в основном тратил время на маркировку "плохих" доменов.

Я попытался довольно жестко обозначить "плохие" домены. Как и GulliversBooking · com, я имею в виду, как человек, я понимаю связь между Gulliver и путешествиями. Но я хочу обучить модель, которая будет отбирать ДЕЙСТВИТЕЛЬНО хорошие области. Итак, GulliversBooking · com (кстати, тоже все еще доступный, не стесняйтесь воровать) получает 0, a.k.a помечен как «плохой» домен.

Точность против отзыва

Перед тренировкой давайте кратко поразмышляем о точности и запоминании. В лучшем случае алгоритм имел бы высокую точность и высокую отзывчивость. Но так бывает не всегда.

Случай 1 высокая точность, низкий уровень отзыва

Высокая точность и низкая запоминаемость означают, что модель выбирает хорошие домены, и все они хороши и готовы к публикации. В этом случае недостатком низкого отзыва является то, что он упускает несколько хороших доменов и ошибочно классифицирует их как плохие.

Случай 2: высокая степень отзыва, низкая точность

Противоположное действие с высокой полнотой и меньшей точностью будет означать, что модель найдет все хорошие области, но также приведет к неправильной классификации плохих и включит их в хорошие.

Случай 1 означает, что я упущу для публикации хорошие домены (ошибочно интерпретируемые как плохие), тогда как случай 2 означал бы больше работы, вынуждая меня просеивать плохие домены, зашифрованные с хорошими.

Для этого приложения я предпочту случай 1. Да, я могу пропустить хорошие домены для своего сайта, но моя цель - автоматизировать себя и не тратить больше времени на поиск плохих доменов - хорошо, вернемся к обучению.

Точность AdaBoost: 0,71

Начиная с AdaBoost, точность которого была ~ 0,71, ниже, чем я ожидал. Аналогичный отзыв о производительности, но немного меньшая точность для плохих доменов.

Но перейдем к другому классификатору бустеров.

Точность градиентного усилителя: 0,69

Результаты очень похожи на ADA, но для плохих доменов точность выполнения события немного хуже. Итак, давайте теперь попробуем логистическую регрессию.

Точность логистической регрессии: 0,72

На данный момент это лучшая модель. Очень похоже на оба предыдущих бустера градиента, но немного лучше по точности и отзыву для плохих доменов.

Наивно-байесовская точность: 0,65

Самая низкая точность на данный момент, высокая точность на хороших доменах, но очень низкий уровень отзыва. Таким образом, модель очень верна и верна в тех областях, которые она выбрала, чтобы быть хорошей, но она упустила много других хороших.

Напротив, когда дело касается плохих доменов; высокий уровень отзыва, поэтому он получил все плохие домены. Но он также ошибочно пометил множество хороших доменов как плохие.

Точность LinearSVC: 0,74

Определенно лучшая модель на данный момент. Одинаково высоки точность и отзывчивость. Любопытно сравнить это с тем, насколько хорошо будет выступать KNeightbors.

KNeighbors Точность: 0,71

На самом деле я удивлен, что KNeighbors так хорошо справились. Я не ожидал, что модель кластеризации будет так хорошо работать с набором данных. Оценка аналогична SMV, но с немного меньшей точностью, когда дело касается плохих доменов.

Последняя модель, которую я обучаю, - это случайный лес.

Точность случайного форреста: 0,73

Также похож на KNN, но немного лучше по точности для плохих доменов.

Лучшая модель на невидимых данных

Давайте попробуем лучшую модель (SVM) на некоторых невидимых данных. Что не лучшее место, как не аукционы GoDaddy, где домены продаются по цене от 50 000 долларов.

Вот три домена с указанием их востребованных цен;
MoonMom.com (50 000 долларов)
BlockFirm.com (50 000 долларов)
MyMall.com (50 000 долларов)

Давай попробуем MoonMom.com.

MoonMom · com - вердикт: хороший домен ✅

Давайте попробуем еще один, который я нашел на ExpiredDomains.net - VotoModo.com

VotoModo · com - вердикт: плохой домен🙅‍♀️ ❌

Резюме

1) Я выбрал 8 характеристик.
- Распространенность слов (среди 10 000 наиболее распространенных английских слов)
- Распространенность порядка (модель BERT для порядка слов вероятность)
- Краткость (‹10 символов)
- Количество слов (1 или максимум 2 слова)
- Значение слова (если слово встречается в словаре)
- Длина слова (символы #)
- появление цифр
- появление дефисов

2) Я обучил 7 отдельных моделей; Linear SVC 🥇 показал наилучшие результаты, за ним следуют Random Forrest 🥈 и Логистическая регрессия 🥉
- LinearSVC 0,74. 🥇
- Случайный Форрест 0,73 🥈
- Логистическая регрессия 0,72 🥉
- ADA 0,71 🏅
- KNeighbors 0,71 🏅
- Повышение градиента 0,69 🏅
- Naive-Bayes 0,65 🏅

Выводы

Я ожидал более высокой точности, чем 74%; честно говоря, это меня удивило. Однако, поскольку в конечном итоге я выбираю те домены, которые будут опубликованы, я буду придерживаться этой немного низкой точности и стремлюсь добавлять данные и настраивать модель с течением времени.

Следующим шагом будет более подробное рассмотрение функций и того, какие из них больше всего влияют на модели.

Разработка функций в реальном мире 🛠

Есть ли у вас какие-либо другие идеи по поводу функций, которые я мог бы использовать и извлечь, чтобы в дальнейшем определить, подходит ли домен или нет?

Хотите увидеть алгоритм в действии? 🤖

Посетите https://DailyDomainIdeas.com, где я (честно говоря, модель) публикую новую идею домена каждый день 💡 или @DomainIdeaDaily в Twitter 🐦

Вам понравился этот проект? Мне нужна ваша поддержка на Product Hunt 🎉

Я запустил Daily Domain Ideas на Product Hunt, и ваша поддержка будет много значить для меня: https://www.producthunt.com/posts/daily-domain-ideas