Что такое стемминг и лемматизация? В чём между ними разница?
Стемминг и лемматизация — это методы нормализации слов, которые используются в обработке естественного языка (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" без контекста.
-
Простые стеммеры часто не понимают границ морфем и "калечат" слова.
-
Обработка многословных выражений требует лемматизации по частям речи и зависимости между словами.
И стемминг, и лемматизация — важнейшие инструменты для приведения текста к канонической форме, но выбор метода зависит от целей анализа, языка, требований к точности и скорости обработки.