Часто возникает вопрос, на сколько релевантный контент продвигаемому запросу, как можно померить в цифрах релевантность «запрос 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 по ВЧ ВК запросам, а уже дальше нужны ссылки, ПФ и многое другое.
Есть желание затестить код, велком




