Часто возникает вопрос, на сколько релевантный контент продвигаемому запросу, как можно померить в цифрах релевантность «запрос vs документ»?
Существует разнообразные способы, которые дают понимание лучшей релевантности:
- TF/IDF
- BM25
- BM25F
- BM11
- BM15
Разбор TF/IDF
Возьмем краткое описание с Википедии, чтобы понять в чем заключается данный алгоритм, более подробнее тут.
TF—IDF (от англ. TF — term frequency, IDF — inverse document frequency) — статистическая мера, используемая для оценки важности слова в контексте документа, являющегося частью коллекции документов или корпуса.
Попробуем сейчас на реальных данных посчитать релевантность документов, а именно заголовка title.
Вместо Title вы можете взять любые другие тексты, например все тексты конкурентов из топ 10.
Для этого мне понадобится:
- Запрос — Продвижение сайтов.
- Выбрать регион — Москва.
- Топ 10 сайтов по запросу (либо руками собираем либо через сервисы типа Арсенкин или Пиксель Тулз, можно еще Key Collector использовать).
- Сравниваем с конкурентами согласно своему интенту (морды с мордами, внутряки с внутряками).
- Отсеиваем сайты с дополнительным бустом, например сервисы Яндекса.
- Пробегаемся по урлам с помощью Screaming Frog SEO Spider
- Копируем title и проверяем со своими значениями.
Проверка онлайн с помощью Python TF/IDF
Я отобрал 5 сайтов c title на которых я буду тестировать алгоритм + добавлю свой сайт, чтобы можно было сравнивать цифры и экспериментировать.
- https://www.rookee.ru/vitrina-uslug/seo/ => Поисковое продвижение сайта в ТОП поисковых систем Яндекс и Google, цена услуги — заказать SEO-продвижение и раскрутку запросов в интернете
- https://www.metko.ru/seo-prodvizhenie-sayta.html => SEO Продвижение сайта в Москве на выгодных условиях | Интернет агентство Metko
- https://www.a-move.ru/prodvizhenie/ => Продвижение сайтов в ТОП ► SEO услуги по раскрутке сайта в Москве
- https://www.demis.ru/services/seo-prodvizhenie-saitov/ => Продвижение сайтов в ТОП-10 ☝ Заказать SEO раскрутку в Москве
- https://www.inetmarketing.ru/services/seo => Поисковое продвижение сайтов в ТОП-10 Яндекс, заказать seo продвижение, раскрутка веб сайта в Москве
- МОЙ Сайт = >
Поисковое продвижение сайта в ТОП Поисковое продвижение сайта Поисковое продвижение сайта поисковых систем Яндекс и Google, заказать в Москве и по всей России
Нам понадобится пару библиотек для работы с данными:
import numpy as np import pandas as pd import pymorphy2 morph = pymorphy2.MorphAnalyzer() from stop_words import get_stop_words stop_words = get_stop_words('russian')
Также воспользуемся написанными функциями для облегчения работы с данными.
Работа с лемматизацией
def lemma (text): morph_analyze = morph.parse( text.lower() ) return ( morph_analyze[0].normal_form )
Получение TF/IDF
def tfidf(word, sentence, docs): # Получаем число слов вхождений слов / на длину документов, а именно TF tf = sentence.count(word) / len(sentence) # Получаем IDF idf = np.log10(len(docs) / sum([1 for doc in docs if word in docs[doc] if word not in stop_words])) return round(tf*idf, 4)
Обработка данных с помощью Python
Теперь нам нужно взять каждый из текстов на сайте и посчитать необходимы данные. Будем считать с учетом стоп слов.
title = {} title['page'] = { 'https://www.rookee.ru/vitrina-uslug/seo/':'Поисковое продвижение сайта в ТОП поисковых систем Яндекс и Google, цена услуги - заказать SEO-продвижение и раскрутку запросов в интернете', 'https://www.metko.ru/seo-prodvizhenie-sayta.html':'SEO Продвижение сайта в Москве на выгодных условиях | Интернет агентство Metko', 'https://www.a-move.ru/prodvizhenie/':'Продвижение сайтов в ТОП ► SEO услуги по раскрутке сайта в Москве', 'https://www.demis.ru/services/seo-prodvizhenie-saitov/':'Продвижение сайтов в ТОП-10 ☝ Заказать SEO раскрутку в Москве', 'https://www.inetmarketing.ru/services/seo':'Поисковое продвижение сайтов в ТОП-10 Яндекс, заказать seo продвижение, раскрутка веб сайта в Москве', 'МОЙ сайт':'Поисковое продвижение сайта в ТОП, заказать сайт в Москве и по всей России' }
Нас интересует насколько хорошо ранжируются тексты по запросу «продвижение сайта».
Для этого мы будем применять оценку к каждому из слов запроса, обычно это называют термы или униграммы.
key = ['продвижение сайта'][0].split() new_result = {} for i in title['page']: url = title['page'] title_page = title['page'][i].lower().split() new_result[i] = {} for k in key: k = k.lower() res = tfidf(k, title_page, url) new_result[i].update({k:res})
Результат
Rang Top | url | продвижение | сайта | Сумма |
---|---|---|---|---|
0 | https://www.rookee.ru/vitrina-uslug/seo/ | 0.0151 | 0.0040 | 0.0382 |
1 | https://www.metko.ru/seo-prodvizhenie-sayta.html | 0.0251 | 0.0066 | 0.0634 |
2 | https://www.a-move.ru/prodvizhenie/ | 0.0251 | 0.0066 | 0.0634 |
3 | https://www.demis.ru/services/seo-prodvizhenie… | 0.0301 | 0.0000 | 0.0602 |
4 | https://www.inetmarketing.ru/services/seo | 0.0215 | 0.0057 | 0.0544 |
5 | МОЙ сайт | 0.0393 | 0.0103 | 0.0992 |
Тест кейс
Теперь представим вы находитесь в топ 10 по вкусному запросу, но к вам подходит руководитель или менеджер и говорит нужно добавить текст на страницу, всего + 10 слов или +40% от исходного, совсем немного, что же будет в данном случае, давайте попробуем это симулировать.
title = {} title['page'] = { 'https://www.rookee.ru/vitrina-uslug/seo/':'Поисковое продвижение сайта в ТОП поисковых систем Яндекс и Google, цена услуги - заказать SEO-продвижение и раскрутку запросов в интернете', 'https://www.metko.ru/seo-prodvizhenie-sayta.html':'SEO Продвижение сайта в Москве на выгодных условиях | Интернет агентство Metko', 'https://www.a-move.ru/prodvizhenie/':'Продвижение сайтов в ТОП ► SEO услуги по раскрутке сайта в Москве', 'https://www.demis.ru/services/seo-prodvizhenie-saitov/':'Продвижение сайтов в ТОП-10 ☝ Заказать SEO раскрутку в Москве', 'https://www.inetmarketing.ru/services/seo':'Поисковое продвижение сайтов в ТОП-10 Яндекс, заказать seo продвижение, раскрутка веб сайта в Москве', 'МОЙ сайт':'Поисковое продвижение сайта в ТОП, заказать сайт в Москве и по всей России. Интернет магазин Рога и копыта предлагает воспользоваться услугой адресной доставки' }
Rang Top | url | продвижение | сайта | Сумма |
---|---|---|---|---|
0 | https://www.rookee.ru/vitrina-uslug/seo/ | 0.0151 | 0.0040 | 0.0191 |
1 | https://www.metko.ru/seo-prodvizhenie-sayta.html | 0.0251 | 0.0066 | 0.0317 |
2 | https://www.a-move.ru/prodvizhenie/ | 0.0251 | 0.0066 | 0.0317 |
3 | https://www.demis.ru/services/seo-prodvizhenie… | 0.0301 | 0.0000 | 0.0301 |
4 | https://www.inetmarketing.ru/services/seo | 0.0215 | 0.0057 | 0.0272 |
5 | МОЙ сайт | 0.0131 | 0.0034 | 0.0165 |
Как видим релевантность документа снизилась на 0.0827, была 0.0992 стала 0.0165.
Проверка проходит на точное вхождения терма, можно и нужно проверять с учетом стемминга или лемматизации, так наши цифры будет более точными.
Лемматизация документа и запроса
Теперь посмотрим, как релевантность документов изменится при лемматизации термов.
Используем нашу прошлую функцию, но добавляем параметр: lemm = True.
title = {} title['page'] = { 'https://www.rookee.ru/vitrina-uslug/seo/':'Поисковое продвижение сайта в ТОП поисковых систем Яндекс и Google, цена услуги - заказать SEO-продвижение и раскрутку запросов в интернете', 'https://www.metko.ru/seo-prodvizhenie-sayta.html':'SEO Продвижение сайта в Москве на выгодных условиях | Интернет агентство Metko', 'https://www.a-move.ru/prodvizhenie/':'Продвижение сайтов в ТОП ► SEO услуги по раскрутке сайта в Москве', 'https://www.demis.ru/services/seo-prodvizhenie-saitov/':'Продвижение сайтов в ТОП-10 ☝ Заказать SEO раскрутку в Москве', 'https://www.inetmarketing.ru/services/seo':'Поисковое продвижение сайтов в ТОП-10 Яндекс, заказать seo продвижение, раскрутка веб сайта в Москве', 'МОЙ сайт':'Поисковое продвижение сайта в ТОП, заказать сайт в Москве и по всей России' }
Как видим из таблицы сумма значений \изменилась, на сайте demis.ru не использовался запрос «сайт» в title, но когда мы применили лемматизацию, поиск стал учитывать данный фактор.
Rang Top | url | продвижение (лемма) | сайт (лемма) | Сумма |
---|---|---|---|---|
0 | https://www.rookee.ru/vitrina-uslug/seo/ | 0.0795 | 0.1297 | 0.2092 |
1 | https://www.metko.ru/seo-prodvizhenie-sayta.html | 0.1297 | 0.1297 | 0.2594 |
2 | https://www.a-move.ru/prodvizhenie/ | 0.1297 | 0.1590 | 0.2887 |
3 | https://www.demis.ru/services/seo-prodvizhenie… | 0.1297 | 0.1297 | 0.2594 |
4 | https://www.inetmarketing.ru/services/seo | 0.0795 | 0.1590 | 0.2385 |
5 | МОЙ сайт | 0.1297 | 0.1590 | 0.2887 |
Я ориентируюсь обычно, чтобы цифры текстовой оптимизации были в диапазоне 0.50-0.75 персентиле, а именно больше медианы и меньше 75% от значений топа.
Только за счет текстовой оптимизации и внутренней перелинковки, мне удавалось попасть в ТОП 30 по ВЧ ВК запросам, а уже дальше нужны ссылки, ПФ и многое другое.
Есть желание затестить код, велком