Найти в Дзене

Статистический подход к семантике в поисковой рекламе: как сделать свой лемматизатор и генератор словоформ в Excel

Оглавление

Который не генерирует десятки бессмысленных словоформ, с помощью Букварикса, Mystem и Excel.

В этой статье я расскажу, как и зачем создавал собственный файл генерации словоформ на базе словаря Зализняка, Opencorpora и других инструментов

Глоссарий

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

Предыстория

В контекстной и поисковой рекламе часты ситуации, когда необходимо избавиться от неявных дублей. Это нужно для того, чтобы всегда быть уверенными, что реклама по одному запросу показывается строго по одной ключевой фразе. Почему это важно?
1. Фразы могут находиться в разных группах и к ним могут быть привязаны разные объявления. При анализе эффективности фраз уже нельзя будет рассматривать их как нечто единое, т.к. они в неравных условиях.
2. При остановке одной фразы по причине неэффективности, трафик быстро переместится на другую фразу, и это нивелирует позитивный эффект от оптимизации.
3. Накопление положительной/отрицательной статистики у дублирующихся фраз происходит медленнее, что замедляет процесс снижения CPC от эффективного CTR фраз.

Также есть интересная специфика работы с AdWords (Google Ads) - ключевые слова и фразы в таргетинге и в исключениях имеют неравный вес: ключевые слова показываются по поисковым запросам, содержащим слова фраз в
любых словоформах, а минус-слова и фразы срабатывают только при точном совпадении словоформ. Это один из явных недостатков рекламы в Google Ads. Он заставляет для каждого исключаемого слова добавлять в группу не только одну его словоформу, но и все хоть сколько нибудь употребляемые словоформы в рамках парадигмы.

В первом кейсе нам необходимо найти способ избавляться от дублей - он решается путем нормализации фраз. Нормализацией для контекстной рекламы будет процесс, включающий в себя 4 шага:
1. Возврат всех слов фразы к их лемме
2. Удаление повторяющихся слов внутри фразы
3. Удаление стоп-слов (служебных частей речи, которые не учитываются при подборе фразы под поисковый запрос пользователя системой контекстной рекламы - Google Ads или Яндекс.Директ)
4. Упорядочивание всех слов фраз по алфавиту

Для реализации всех этих шагов есть множество решений, включая мою надстройку для Excel
SEMTools. Все решения для лемматизации и генерации словоформ так или иначе используют словари лемматизации и эвристические библиотеки предсказания лемм.
В своей надстройке я не использую эвристические методы по двум причинам:
1. это порой приводит к казусам вида авито - > авить, живенши - живеншить
2. Это довольно сложные алгоритмы, также довольно сильно нагружающие процессор.

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

Процесс

Процесс, на самом деле, довольно прост.
1. Выгрузить только фразы с ненулевой частотностью вида "!ненулевая !частотность". К сожалению, их довольно много - в базе Букварикс порядка 1 млрд таких фраз, вместе с дублями. Я решил пойти от самой целевой семантики - выбрал 60 млн фраз со словом "купить", и выгрузил их.
Дальнейшие шаги делаются макросами в моей надстройке:
2. Удалить слова, содержащие цифры или английские буквы - они, как правило, неизменяемые.
3. Нормализовать фразы и удалить неявные дубли. В данном кейсе нормализация не включает в себя лемматизацию, т.к. мы собирали частотность вида "!слово1 !слово2" именно для понимания частотности словоформ, и фразы с разными словоформами действительно для нас являются разными
4. Удаляем все слова, уже имеющиеся у меня в словаре, составленном на базе opencorpora + словарь Зализняка
5. Делаем подсчет частотности словоформ через частотность фраз, в которых они употреблялись
Далее - сторонними утилитами:
6. Ищем леммы фраз утилитой командной строки от Яндекса под названием mystem, для того, чтобы распознать общие словоформы парадигм
7. Если лемма найдена только для одной словоформы в итоговом массиве - нет смысла добавлять ее в словарь, т.к. это либо слишком редкое, либо неизменяемое слово - иначе оно встретилось бы в другой словоформе. Удаляем такие.
8. Пополняем оставшимися парами словарь лемм и словарь словоформ!

Результатом всех этих манипуляций стал инструмент переноса кроссминусовки формата слово -минусслово1 -минусслово2 (формат Яндекс.Директ) в формат AdWords с попутным добавлением всех словоформ в создаваемые группы.
Характерным отличием такого подхода, и этого инструмента, является то, что для слов не генерируются десятки ненужных словоформ с нулевой встречаемостью - это позволяет не засорять аккаунт лишними сущностями, которых к тому же есть лимит в 5 млн на один аккаунт в Google Ads. Также, это позволяет более оперативно с ним работать, т.к. он становится легче

Наука
7 млн интересуются