Что такое стемминг и лемматизация? В чём между ними разница?

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

1. Что такое стемминг

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

Примеры:

Исходное слово Стем
"running" "run"
--- ---
"runner" "run"
--- ---
"better" "better" (не обрабатывается корректно)
--- ---
"relational" "relat"
--- ---
"flies" "fli" (в английском: не совпадает с "fly")
--- ---

Характеристики стемминга:

  • Основан на жёстких правилах или **регулярных выражениях
    **
  • Быстрый и простой в реализации

  • Не требует знания морфологии или грамматики языка

  • Может возвращать **некорректные слова
    **

  • Не различает части речи (часто режет слова механически)

Примеры популярных стеммеров:

  • Porter Stemmer — классический алгоритм для английского

  • Snowball Stemmer — расширенная версия, поддерживает много языков

  • Lancaster Stemmer — более агрессивный, даёт более короткие стемы

  • Russian Snowball Stemmer — используется для русского языка

2. Что такое лемматизация

Лемматизация (lemmatization) — это процесс приведения слова к лемме — его нормальной (словарной) форме. В отличие от стемминга, лемматизация учитывает грамматические особенности слова, включая его часть речи, склонение, спряжение и контекст употребления.

Примеры:

Исходное слово Лемма Часть речи
"running" "run" глагол
--- --- ---
"ran" "run" глагол
--- --- ---
"better" "good" прилагательное
--- --- ---
"mice" "mouse" существительное
--- --- ---
"идущий" "идти" глагол
--- --- ---
"машины" "машина" существительное
--- --- ---

Характеристики лемматизации:

  • Требует лексикона и **анализатора морфологии
    **
  • Более точна, чем стемминг

  • Возвращает реальное слово (лемму), существующее в языке

  • Медленнее, но даёт более семантически корректный результат

  • Часто требует информации о части речи для правильного выбора леммы

Примеры инструментов для лемматизации:

  • spaCy — для английского и других языков (основан на статистике и правилах)

  • NLTK WordNet Lemmatizer — для английского, требует POS-тега

  • pymorphy2 — морфологический анализатор и лемматизатор для русского

  • Stanza — нейросетевой инструмент от Stanford NLP, поддерживает десятки языков

3. Сравнение стемминга и лемматизации

Характеристика Стемминг Лемматизация
Метод Обрезка суффиксов по правилам Морфологический и словарный анализ
--- --- ---
Точность Низкая / средняя Высокая
--- --- ---
Возвращает слово Не всегда Всегда
--- --- ---
Является словарным словом Нет Да
--- --- ---
Обрабатывает часть речи Нет Да
--- --- ---
Скорость Быстрая Медленная
--- --- ---
Зависимость от языка Частично Да
--- --- ---
Используемые ресурсы Простейшие правила Словари, синтаксический анализ
--- --- ---

4. Примеры различий в результатах

Английский язык:

Слово Стем (Porter) Лемма (WordNet)
studies studi study
--- --- ---
studying studi study
--- --- ---
better better good
--- --- ---
went went go
--- --- ---
flying fli fly
--- --- ---

Русский язык:

Слово Стем (Snowball) Лемма (pymorphy2)
говоришь говор говорить
--- --- ---
машины машин машина
--- --- ---
читающий чита читать
--- --- ---
добрее добр добрый
--- --- ---
поехавшие поех поехать
--- --- ---

5. Где используется

Стемминг:

  • Поисковые системы (например, Lucene, Elasticsearch)

  • Быстрая индексация больших текстов

  • Упрощённый препроцессинг

  • Неформальный текст (соцсети, форумы)

Лемматизация:

  • Сложные NLP-задачи: машинный перевод, анализ синтаксиса, NER

  • Обработка формально-грамматических текстов

  • Глубокая лингвистическая нормализация

  • Русский язык и другие флективные языки, где грамматика критична

6. Практический пример (на Python)

Стемминг (nltk):

from nltk.stem import PorterStemmer
stemmer = PorterStemmer()
print(stemmer.stem("studying")) # "studi"
print(stemmer.stem("studies")) # "studi"
print(stemmer.stem("studied")) # "studi"

Лемматизация (nltk + WordNet):

from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
print(lemmatizer.lemmatize("studies", pos="v")) # "study"
print(lemmatizer.lemmatize("better", pos="a")) # "good"

Лемматизация (русский, pymorphy2):

import pymorphy2
morph = pymorphy2.MorphAnalyzer()
word = "машины"
lemma = morph.parse(word)\[0\].normal_form
print(lemma) # "машина"

7. Особенности для разных языков

Английский:

  • Относительно регулярная морфология

  • Часто стемминг даёт приемлемые результаты

  • Лемматизация требует POS-тегов

Русский:

  • Сложная морфология (падежи, числа, времена, роды)

  • Стемминг теряет много информации

  • Лемматизация почти обязательна для качественного анализа

Китайский/Японский:

  • Нет пробелов → сначала требуется сегментация

  • Лемматизация малоприменима, зато важна токенизация и контекст

8. Ограничения и подводные камни

  • Гомонимия: "белки" → "белка" (животное) или "белок" (вещество) — лемматизатор может ошибаться без контекста.

  • Неправильные формы: "ran" → не всегда распознаётся как "run" без контекста.

  • Простые стеммеры часто не понимают границ морфем и "калечат" слова.

  • Обработка многословных выражений требует лемматизации по частям речи и зависимости между словами.

И стемминг, и лемматизация — важнейшие инструменты для приведения текста к канонической форме, но выбор метода зависит от целей анализа, языка, требований к точности и скорости обработки.