Что такое стемминг?
Стемминг — это метод предобработки текста, который отбрасывает окончания и суффиксы слова по формальным правилам, сводя разные словоформы к общей укороченной основе. Алгоритм не обращается к словарю и не учитывает грамматику, поэтому работает быстро, но результат не всегда совпадает с реальным словом языка.
Например, слова «бежал», «бежит» и «побежали» стеммер может свести к разным, но похожим обрубленным основам — единого правильного результата формальный алгоритм не гарантирует. Зато скорость и простота делают стемминг удобным для задач, где точность не критична: например, для быстрой группировки похожих слов при поиске.
Классические алгоритмы стемминга для русского языка — вариации алгоритма Портера, адаптированные под кириллицу, и библиотека Snowball. Они применяют последовательность правил отсечения типовых окончаний и суффиксов, подобранных вручную для конкретного языка, поэтому качество результата напрямую зависит от того, насколько хорошо правила покрывают морфологию русского языка.
Главный риск стемминга — переусечение и недоусечение слова: если правило отрезает слишком много, разные по смыслу слова случайно схлопываются в одну основу, а если слишком мало — родственные словоформы остаются несвязанными. Разработчики стемминговых алгоритмов балансируют между этими двумя видами ошибок, но полностью избежать их в языке со сложной морфологией вроде русского не получается.
Что такое лемматизация?
Лемматизация приводит слово к его словарной начальной форме — лемме — с опорой на грамматику и словарь языка: для глагола это инфинитив, для существительного именительный падеж единственного числа. В отличие от стемминга, результат лемматизации — всегда существующее слово, а не произвольно усечённая основа.
Продолжая пример с «бежал», «бежит» и «побежали» — лемматизатор корректно сведёт все три формы к одной лемме «бежать», потому что учитывает часть речи и грамматические правила конкретного языка, а не просто отрезает конец слова. Это требует более сложных языковых моделей и словарей, чем стемминг, но даёт заметно более надёжный результат.
Для русского языка популярные лемматизаторы вроде pymorphy2 или Mystem опираются на словари словоформ и морфологические правила, а в неоднозначных случаях — например, когда одна и та же форма слова может относиться к разным частям речи — дополнительно учитывают контекст соседних слов, чтобы выбрать правильную лемму.
Пример такой неоднозначности — слово «стекло»: в зависимости от контекста это либо существительное («разбитое стекло»), либо форма глагола «стечь» («молоко стекло со стола»). Формальный стеммер не различит эти случаи вовсе, а качественный лемматизатор с учётом контекста определит нужную часть речи и вернёт корректную лемму именно для этого употребления слова.
Чем стемминг отличается от лемматизации?
Стемминг — быстрое и грубое усечение слова без обращения к словарю, результат которого может не быть настоящим словом. Лемматизация — точное приведение слова к словарной форме с учётом грамматики, результат которого всегда существующее слово. На неправильных и нестандартных формах разница между двумя методами особенно заметна.
| Словоформы | Стемминг (примерная основа) | Лемматизация (словарная форма) |
|---|---|---|
| бежал, бежит, побежали | разные, не всегда совпадающие основы | бежать |
| хорошая, лучше, лучший | разные основы, связь не очевидна | хороший |
| стола, столом, столе | стол | стол |
| собаки, собаку, собаками | собак | собака |
На регулярных словоформах вроде склонения существительных оба метода часто дают одинаковый или очень похожий результат: и стемминг, и лемматизация сведут «стола», «столом» и «столе» к общему корню «стол». Разница проявляется на неправильных формах и сравнительных степенях прилагательных, где стемминг не способен связать, например, «лучше» с исходным словом «хороший», а лемматизация делает это корректно за счёт словаря и знания грамматики.
Когда использовать стемминг, а когда лемматизацию?
Стемминг подходит там, где важна скорость и допустима приблизительность: полнотекстовый поиск, быстрая кластеризация большого объёма текста, черновая фильтрация данных. Лемматизацию выбирают, когда важна лингвистическая точность: анализ тональности, извлечение сущностей, любые задачи, где неверно нормализованное слово меняет смысл результата.
На практике выбор часто определяется и языком: для английского с его сравнительно простой морфологией разница между методами не так критична, а для русского с богатым набором словоформ грубый стемминг чаще приводит к ошибкам — слова с разным смыслом могут случайно получить одинаковую усечённую основу. Ещё один фактор выбора — объём данных: на миллионах документов разница в скорости между стеммингом и лемматизацией становится заметной, и это может перевесить потерю точности при неответственных задачах.
Какую роль стемминг и лемматизация играют в предобработке текста?
Оба метода — часть классического пайплайна предобработки текста перед обучением модели: они сокращают словарь уникальных форм, объединяя вариации одного слова, и так снижают размерность данных и разреженность признаков. Это упрощает работу классических алгоритмов машинного обучения, которые иначе видели бы «бежал» и «бежит» как два независимых, не связанных друг с другом слова.
Помимо экономии вычислительных ресурсов, нормализация словоформ повышает полноту поиска и классификации: запрос «купить дом» находит документы со словами «дома», «домом» или «домов», хотя пользователь ввёл только одну форму. Без этого шага система пропускала бы часть релевантных результатов просто из-за различия окончаний.
В классическом пайплайне предобработки нормализация словоформ обычно идёт после токенизации и удаления стоп-слов, но до построения числовых признаков — например, частотных векторов TF-IDF или мешка слов (bag of words). Порядок этих шагов важен: если сначала не привести слова к общей форме, признаковое пространство модели окажется избыточно большим и разреженным, а статистика по каждому отдельному слову — менее надёжной.
Нужны ли стемминг и лемматизация при использовании трансформеров?
Современные трансформерные модели используют подсловную токенизацию, которая сама разбивает редкие словоформы на устойчивые фрагменты и обучается на контексте без отдельного этапа стемминга или лемматизации. Модель фактически учится собственной внутренней нормализации слов в процессе обучения на большом корпусе текста.
Тем не менее оба метода остаются востребованы вне обучения самих нейросетей: в индексации поисковых систем, в классических алгоритмах вроде TF-IDF, в быстрой предобработке данных перед разметкой и в задачах с ограниченными вычислительными ресурсами, где развернуть полноценную языковую модель нецелесообразно. Так что списывать стемминг и лемматизацию рано — они остаются рабочим инструментом там, где не нужна вся мощь современной языковой модели.
Ещё одна область, где нормализация словоформ по-прежнему полезна, — подготовка и контроль качества обучающих датасетов перед разметкой: приведение текста к базовым формам помогает быстрее находить дубликаты и похожие примеры в большом корпусе, прежде чем передавать выборку на разметку командой лингвистов или асессоров.