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