Лемма и лемматизация: как поисковик сводит слова к словарной форме

(нет оценок)
0

Лемма - словарная форма слова: именительный падеж у существительного, инфинитив у глагола. Лемматизация приводит к ней любую форму, от «рукой» до «руки», и поэтому поисковик находит страницы по запросам в любом падеже. Разберём, как это работает, чем лемматизация отличается от стемминга и где она ошибается.

Контент проверил

Рамазан Миндубаев

Руководитель SEO-отдела TRINET

Дата проверки:

Дата обновления:

Что такое лемма и чем она отличается от словоформы?

Одно и то же слово в тексте стоит в десятках форм, а в словаре записано одной. Эта словарная запись и есть лемма. У существительного она совпадает с именительным падежом в форме «один предмет», у глагола с инфинитивом, у прилагательного с мужским родом. «Сайтов», «сайтам» и «сайтах» - разные словоформы, а лемма у них общая: «сайт».

Лемматизацией называют автоматическое приведение любой словоформы к лемме. Фраза «Менеджеры отправили клиентам два счёта» после неё выглядит как «менеджер отправить клиент два счёт»: падеж, число и время исчезли, набор слов остался. Для человека такая запись звучит коряво, зато программа получает одну строку вместо нескольких форм и легко сравнивает и считает слова.

Слово в текстеЧасть речиЛемма
сайтамисуществительноесайт
красиваяприлагательноекрасивый
покупалглаголпокупать
пятичислительноепять
тебеместоимениеты
Как слова из текста приводятся к словарной форме

Граница между словом в тексте и записью в словаре хорошо видна на шутке, которую приводит журнал Топвизора. Пациент кричит врачу «Доктор, я лечу!», а тот отвечает, что такого не лечит. Для человека это игра на двух смыслах, а компьютер, который ищет по буквам, найдёт обе формы и сочтёт их одним словом, хотя в первом случае «лечу» идёт от «лететь», а во втором от «лечить». Такие слова называют омонимами, и на них лемматизаторы спотыкаются.

Я такого не лечу

Г. Лукомников, автор шутки, в пересказе журнала Топвизора

Масштаб задачи хорошо видно по цифрам из препринта о библиотеке golemma. Авторы разобрали морфологический словарь OpenCorpora, где почти 392 тысячи лемм, и увидели, что все они укладываются в 2488 уникальных парадигм. Парадигма здесь - короткий шаблон: сколько букв приставки и окончания отличают словоформу от начальной формы. Благодаря такой сводке словарь для поиска лемм удалось упаковать в компактный файл, заточенный под быструю лемматизацию в полнотекстовом поиске.

Как поисковик использует леммы?

Поисковый индекс устроен по словам: страницы сгруппированы вокруг лемм. Когда человек вводит запрос, поисковик тоже приводит его слова к леммам и сопоставляет их с индексом, поэтому «заказать пиццу» и «заказал пиццы» поднимают одни и те же записи. Журнал Топвизора показывает это на подсчёте: формы «рукой», «руке», «руками», «руки» и «руку» встречаются на странице вразнобой, а индекс суммирует их в одну частоту для леммы «рука». Как страницы вообще попадают в индекс, мы разбирали в материале про индексацию сайта.

Статья журнала Топвизора о лемме и лемматизации с таблицей форм слова
Словарь форм слова «рука» в статье журнала Топвизора. Источник: journal.topvisor.com

Без лемматизации поиск промахивается даже на простых формах. IntraFind разбирает пример из двух документов: «In my house lives a mouse» и «Mice are living in my houses». Запрос «mouse» вернёт только первый, хотя второй тоже подходит, ведь «mice» - множественное число того же слова. Поисковому движку нужна нормализация, иначе часть хороших страниц остаётся невидимой.

Яндекс объясняет это в собственной справке по языку запросов. По умолчанию поиск берёт все формы слова из запроса: падеж, род, число, склонение. Однокоренные слова другой части речи он не трогает: по запросу [рассказал] найдутся «рассказать», «расскажу» и «рассказывать», а «рассказ» и «рассказчик» нет. Граница проходит по лемме: формы одного слова поисковик объединяет, а родственные слова остаются отдельными.

Для русского языка это существенно. По оценке cropas.by, у одного глагола около 250 форм, если считать все времена, лица, числа, виды и наклонения. Индекс, где каждая форма жила бы отдельно, раздувался бы и промахивался мимо запросов. Поэтому морфологический анализ в отечественных поисковиках появился рано: в описании SEMTools сказано, что первую версию Mystem сделали при участии одного из основателей Яндекса Ильи Сегаловича, и алгоритм лемматизации в поисковом движке стал одним из ключевых факторов коммерческого успеха компании.

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

Лемматизация или стемминг: в чём разница?

Стемминг работает грубее. В определении Стэнфордского учебника это эвристика, которая отрезает концы слов в надежде, что в большинстве случаев получится верно, тогда как лемматизация опирается на словарь и морфологический анализ. На слове saw стеммер может вернуть одну букву s, а лемматизатор попробует понять по роли слова в предложении, глагол это или существительное, и выберет see или saw. Цена грубости видна в поиске: стеммер Портера превращает в «oper» слова operate, operating, operational и operative, поэтому запросы вроде «operating and system» теряют точность. Стемминг повышает полноту и вредит точности, а лемматизатор проблему целиком не решил бы, ведь конкретные формы слова живут в конкретных сочетаниях.

Ошибки стемминга наглядно описаны в блоге поискового вендора IntraFind. Стеммер Портера сводит «organization» и «organs» к одному корню «organ», хотя слова разные по смыслу: это называют переусердием. Родственные «absorption» и «absorbing» он превращает в «absorpt» и «absorb», то есть разводит по разным корням. В русском та же беда: «рыбак» и «рыба» стеммер способен усечь до одинакового «рыб».

Страница учебника по информационному поиску со сравнением стемминга и лемматизации
Страница учебника Стэнфорда о стемминге и лемматизации. Источник: nlp.stanford.edu

Разница заметна и в цифрах. Эстонские исследователи сравнили стемминг и лемматизацию в поиске по машинно переведённой на эстонский базе DBpedia-Entity с алгоритмом BM25. Среди первых ста результатов полнота при лемматизации выросла примерно на 7%, а доля запросов, где нашёлся хотя бы один нужный документ, на 11%. Авторы оговариваются, что данные шумные из-за машинного перевода, но эстонский с его богатой морфологией близок к русскому по задаче.

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

Страница препринта об анализе лемматизации на русской Википедии
Страница препринта об анализе лемматизации в тематических моделях. Источник: arxiv.org

Ошибки лемматизатора: омонимы, новые слова, выбор леммы

Омонимия ломает лемматизатор первой. В примере cropas.by «стекло» бывает предметом и прошедшим временем глагола «стечь», и без контекста выбрать нельзя. Новые слова вроде «гуглить» или «лайкнуть» могут отсутствовать в словарях, а имена, аббревиатуры и опечатки требуют отдельной обработки. На обычных текстах точность лемматизаторов по тем же данным составляет 95-99%, но в медицине, юриспруденции и программировании она ниже из-за специальной лексики.

Слабое звено часто в выборе нужной леммы из нескольких. Это показал разбор эстонского анализатора Vabamorf: по данным статьи про GliLem он выбирает лемму верно примерно в 89% случаев, а если засчитывать ответ, когда правильный вариант есть среди кандидатов, точность выше 99%. Разрыв сократили моделью, которая смотрит на контекст, и точность выбора поднялась с 89% до 97,7%.

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

Инструменты для лемматизации текста и семантики

Разработчику хватит готовых библиотек. Библиотека spaCy для русского лемматизирует через pymorphy3: в исходном коде русского лемматизатора есть режим pymorphy3, и для работы ему нужна установленная одноимённая библиотека. Вторая привычная связка для русского: pymorphy2 со словарём OpenCorpora и Mystem из Яндекса.

Страница документации spaCy о компоненте Lemmatizer
Документация spaCy о компоненте Lemmatizer. Источник: spacy.io

Цена классической морфологии заметна в продакшене. Сообщество MAWO, которое занимается русским NLP, рассказывает на Хабре, что pymorphy2 тратит 500 МБ оперативной памяти только на словари и 30-60 секунд на их загрузку из XML при старте. Для облачной функции такой холодный старт слишком долог, поэтому команда перевела словари на структуру DAWG. Загрузка ускорилась в 30 раз, а памяти стало уходить на 90% меньше: вместо минуты анализатор стартует за 1-2 секунды и разбирает 15-25 тысяч слов в секунду, раньше было около 12 тысяч. Это замеры самих авторов, поэтому на своих данных их стоит перепроверить.

Тем, кто не пишет код, подходят SEO-сервисы с лемматизацией семантического ядра, например Key Collector и Just-Magic. Есть вариант и для Excel: автор надстройки !SEMTools пишет, что она обрабатывает десятки тысяч строк в секунду, но к леммам приводит слова только в нижнем регистре, а пунктуацию считает частью слов.

Любой автоматический результат стоит проверить перед работой с ядром. Минимальный порядок такой:

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

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

Лемма в SEO: семантика, Вордстат, уникальность

Первая выгода - чистая семантика. Вордстат считает запрос «с учётом всех возможных форм»: так сказано в справке Яндекса, поэтому фразу достаточно набрать в начальной форме. В собственном ядре формы приходится сводить самому. По описанию SEMTools, без лемматизации ядра есть риск не учесть фразы в менее популярных словоформах. Та же процедура убирает неявные дубли: четыре фразы в примере автора отличаются лишь формами слов, порядком и предлогом. Лемматизируют и вне SEO: социологи считают тональность и частоту терминов в транскриптах речей политиков, например послания президента к Федеральному собранию.

Как это выглядит в работе, показывает пример блога click.ru на Хабре. Авторы собрали ключи двумя подборщиками, по контенту сайта и по словам конкурентов, и получили 3492 фразы. Бесплатный нормализатор убирает дубли с учётом морфологии и перестановки слов: если в списке есть «купить samsung galaxy s10» и «samsung galaxy s10 купить», вторую фразу он удалит. После чистки списка от дублей и мусора осталось 2828 запросов, то есть дубликаты занимали 19% ядра.

Иногда словоформа как раз важна. В Вордстате для этого служит восклицательный знак: оператор фиксирует конкретную словоформу и отсекает остальные склонения и спряжения. Запрос «!сайта» покажет частоту только этой формы, и так видно, в каком падеже люди спрашивают чаще. В связке с другими операторами выборка становится точнее: запрос «( продвижение | оптимизация ) в google !сайта -топ» вернёт фразы с одним из двух слов, с «в google», только с формой «сайта» и без слова «топ». О том, как читать частотность, мы писали в материале про популярные поисковые запросы.

Вторая сфера - проверка уникальности. Сервисы сравнивают тексты по шинглам: так называют цепочки из 2-5 подряд идущих слов, приведённых к леммам. Из фразы «продвижение сайтов в поисковых системах» получается цепочка лемм «продвижение сайт поисковый система», и если такая же есть в чужом тексте, совпадение засчитают, даже когда формы слов совсем разные. Смена падежей не делает текст уникальным.

Третья область - написание текстов. По словам Ingate, поисковик воспринимает «продвижении» и «продвижение» как один сигнал, поэтому точную форму подбирать не нужно, достаточно присутствия нужной леммы. Плотность в 2-3% там называют ориентиром, а не целью: превышение сигнализирует поисковику об искусственной оптимизации. Общую схему работы со страницей мы описали в основах SEO-продвижения.

Частые вопросы

Что такое лемма простыми словами?

Лемма - это форма слова, под которой оно стоит в словаре. Для существительных это именительный падеж, для глаголов инфинитив, для прилагательных мужской род. Все остальные формы слова, от «сайтов» до «сайтам», относятся к одной лемме «сайт» и считаются одним словом, когда поисковик сопоставляет запрос со страницей.

Чем лемматизация отличается от стемминга?

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

Нужно ли вписывать ключевые слова в точной форме?

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

Как лемматизировать семантическое ядро без программирования?

Подойдут SEO-сервисы со встроенной лемматизацией, такие как Key Collector и Just-Magic, или надстройка !SEMTools для Excel. Перед запуском приведите фразы к нижнему регистру и уберите пунктуацию, затем проверьте результат вручную: редкие слова и омонимы лемматизатор мог определить неверно.

Всегда ли лемматизатор прав?

Нет. Лемматизаторы ошибаются на омонимах вроде «стекло», на новых словах, именах и опечатках. Современные инструменты дают высокую точность на обычных текстах, но в медицине, юриспруденции и программировании она падает. Поэтому важные списки лемм полезно просматривать вручную и не принимать на веру.


Дата публикации:


Задать вопрос

Оценка материала (необязательно)

Активные ссылки запрещены. Вопрос появится после модерации. Оценку можно поставить отдельно звёздами в шапке.

Вопросы и ответы

Пока нет опубликованных вопросов. Задайте первый — после модерации он появится здесь.


Вам также может понравиться

Все статьи

Попробовать AI-Трекер

Оставьте email — откроем доступ и напишем, как проверить видимость бренда.

Загружаем описание источника…

Открыть источник