11 августа в Калининграде завершилась пятая юбилейная Baltic Digital Days  — крупнейшая в регионе конференция по SEO и интернет-маркетингу.   В рамках секции «SEO в русскоязычном интернете» Павел Никулин (Demis Group) представил доклад на тему «Machine Learning для текстового анализа».

Выступление спикера было посвящено метрикам и алгоритмам, предназначенным для  поиска значимого текста в документе, определению его коммерческости, спамности, водности, неестественности, принципам работы алгоритма «Баден-Баден». В отдельной части доклада затрагивалась тема инструментария, актуального для данной тематики.

Поиск значимого текста

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

Обычно работа строится следующим образом: копирайтерам пишется ТЗ на определенное количество символов на вхождение именно в текст. Если сервис посчитал, что нужно 10 вхождений на страницу, это совсем не значит, что придется писать текст — это может означать 10 вхождений именно в каталог.

Алгоритм поиска значимого текста нужен для того, чтобы понять, где находится такой текст, стоит ли его писать и сколько вхождений он принесет. Такой тип алгоритма способен найти отличия между реальным текстом и описанием позиции в каталоге, даже если описательная часть состоит из 2-2,5 тысяч символов.

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

Для обучения алгоритма использовалась текстовая выборка блоков из документов, размеченных вручную. Это могло быть описание товаров в разделах интернет-магазина, карточки с описанием номеров и услуг в отелях и многое другое — всего около 3000 документов с числом товарных позиций на странице до 20.

Главная задача состояла не только в поиске текста, но и в подтверждении того, что он необходим. Модель, которая использовалась при создании алгоритма, включала 210 различных факторов, алгоритм «Случайный лес» (Random Forest) и позволила добиться точности предсказания на уровне 97%.

Коммерческость

Для анализа коммерческости запроса и документа в алгоритме поиска значимого текста используется заголовок и аннотация сниппета, анализируются характеристики хоста (нахождение в Яндекс.Каталоге, геопривязка и пр.), характеристики страницы (коммерческие и некоммерческие признаки в URL).

В модели применяется «Алгоритм 1» — логистическая регрессия по мешку слов, собранных из корпуса размеченных сниппетов. Все слова проходят проверку на коммерческость.

Далее используется алгоритм Random Forest. Он включает факторы о странице, хосте и «Алгоритм 1».

Схема позволяет определить коммерческость запроса с точностью около 95%. Все вышесказанное справедливо и для конкретного документа.

Спамность

Для создания алгоритма определения спамности был проанализирован корпус спамных и качественных текстов, размеченных вручную.

Модель включала 24 фактора: количество текста, предложений, частых и редких биграмм, униграмм (последовательностей и сочетаний символов, слогов, слов и т. д.) и пр.

После анализа подобранных данных с помощью Random Forest модель показала точность определения спамности на уровне 96%.

Водность

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

Если определенная комбинация типа «Наша компания предлагает вашему вниманию…» очень часто встречается в текстах с большой СЕО-составляющей и почти не встречается в качественном контенте, то с большой долей вероятности можно утверждать о ее «коммерческости».

Главное в данной метрике — взвешенное среднее водности всех биграмм и униграмм в рассматриваемом тексте.

Неестественность

Понятие сродни водности, за одним исключением. У каждого слова в тексте есть его граммема — недопустимая часть речи, падеж, согласование времен, числительных и пр. Для анализа все слова в текстах были заменены на граммемы. Корпус частых биграмм граммем был выделен из большого корпуса граммем типа «кирпич москва», «вылет горящий тур» и других. Для определения неестественности также были использованы коммерческие и некоммерческие тексты.

Алгоритм «Баден-Баден»

«Баден-Баден», представленный Яндексом 23 марта 2017 года, позволяет находить переоптимизированные тексты. На момент его появления существовала единственная метрика анализа текста — спамность.

Для оценки эффективности алгоритма была проанализирована спамность текстов из ТОП-10 и ТОП-20 поисковой выдачи до и после его введения. Существенных изменений не произошло — метрика «спамность» в выдачах выросла всего на 0,021%.

На самом деле спамность выросла гораздо больше. Она сильно коррелирует с размером текстов. С начала 2017 года в рунете наблюдается существенное уменьшение доли массивных документов в ТОП-10 выдачи — количество символов в среднем документе за последний год сократилось в 2-3 раза. Если раньше на текст из 3000 символов вхождение ключей было на уровне 5, то сейчас то же количество ключей наблюдается в текстах на 1000 символов.

Если говорить об анализе текстов, потерявших позиции после введения алгоритма «Баден-Баден», то их число зависит от того, что анализировалось — тексты по конкретным запросам или весь хост. Хостовый «Баден-Баден» накладывается на весь хост и не всегда понятно, какие именно тексты признаны «упавшими» и их нужно переписывать. Минус в том, что под фильтр может попасть даже область сайта, не предназначенная для продвижения.

Как оценить вероятность наложения «Баден-Баден»

Во избежание подобных ситуаций была создана метрика вероятности наложения фильтра «Баден-Баден». Она представляет собой комбинацию 14 факторов: спамности, неестественности, водности, величины текста, коммерческости, уровня вложенности, комбинации факторов и пр.

Модель, алгоритм которой основан на градиентном бустинге посредством XGBoost и оптимизированной метрике logloss, показала точность наложения фильтра на уровне 96,2%.

Главные факторы модели:

  • Водность.
  • Размер текста.
  • Сумма водности, спамности, неестественности. Если текст несущественно водный, заспамленный и неестественный, но в сумме совокупная величина достигает определенного значения, то он попадет под «Баден-Баден».
  • Спамность.
  • Размер текста, умноженный на неестественность. Большие неестественные тексты — это плохо.
  • Коммерческость. Последний по значимости.

Инструментарий

  • Python 3.5 (Anaconda 3).
  • Все семейство алгоритмов в scikit-learn.
  • Все семейство алгоритмов из gensim.
  • XGBoost.
  • LightGBM
  • MXNet
  • TensorFlow
  • GloVe (аналог Word2Vec).
  • ОС Linux/Windows.

 

Журналист, новостной редактор, работает на сайте с 2009 года. Специализация: интернет-маркетинг, SEO, поисковые системы, обзоры профильных мероприятий, отраслевые новости рунета.
Языки: румынский, испанский.
Кредо: Арфы нет, возьмите бубен.