Что такое POS tagging и зачем он нужен?
POS tagging (Part-of-Speech tagging, или морфологическая разметка) — это задача в обработке естественного языка (NLP), направленная на автоматическое определение части речи для каждого слова в тексте, с учётом его контекста.
Простыми словами, цель POS tagging — аннотировать каждое слово в предложении его грамматической категорией, например, существительное, глагол, прилагательное, наречие и т.д. Эта аннотация может также включать морфологические признаки: род, число, падеж, время, залог и прочее, в зависимости от языка и используемого тега.
Зачем нужен POS tagging
-
Лингвистическая интерпретация текста — базовый шаг к «пониманию» текста компьютером.
-
Предобработка перед другими задачами:
-
Синтаксический разбор (парсинг)
-
Named Entity Recognition (NER)
-
Лемматизация/стемминг (определение нормальной формы слова)
-
Разбор смысловых зависимостей
-
-
Фильтрация по частям речи — например, выбор только существительных в поисковых системах.
-
Информационный поиск — улучшение качества поиска по ключевым словам.
-
Машинный перевод — понимание структуры предложения важно для корректного перевода.
-
Text-to-Speech — ударения и интонация зависят от грамматической роли слов.
Пример
Фраза:
"The quick brown fox jumps over the lazy dog."
POS-теги (на английском, Penn Treebank):
Слово | POS-тег | Расшифровка |
---|---|---|
The | DT | Determiner (артикль) |
--- | --- | --- |
quick | JJ | Adjective |
--- | --- | --- |
brown | JJ | Adjective |
--- | --- | --- |
fox | NN | Noun, singular |
--- | --- | --- |
jumps | VBZ | Verb, 3rd person sg |
--- | --- | --- |
over | IN | Preposition |
--- | --- | --- |
the | DT | Determiner |
--- | --- | --- |
lazy | JJ | Adjective |
--- | --- | --- |
dog | NN | Noun, singular |
--- | --- | --- |
Наборы тегов
Существуют разные стандарты POS-тегов. Некоторые из них:
Penn Treebank (для английского):
-
NN — существительное
-
VB — глагол (базовая форма)
-
VBD — прошедшее время
-
JJ — прилагательное
-
RB — наречие
-
PRP — местоимение
-
DT — определитель
-
IN — предлог
Universal POS Tags (универсальный набор, используется в UD):
-
NOUN — существительное
-
VERB — глагол
-
ADJ — прилагательное
-
ADV — наречие
-
PRON — местоимение
-
ADP — адпозиция (предлоги и послелоги)
-
DET — детерминатор (артикли и указатели)
-
NUM — числительное
-
CONJ — союз
Подходы к POS tagging
1. Правила + словарь (rule-based)
Ранние POS taggers использовали словари и грамматические правила. Например:
-
Если слово оканчивается на "ly", оно, вероятно, наречие.
-
Если предыдущее слово — артикль, следующее — существительное или прилагательное.
Недостатки: жёсткость, низкая адаптивность, трудоёмкость в настройке.
2. Статистические методы
Hidden Markov Models (HMM)
Модель предполагает, что последовательность тегов — скрытая марковская цепь, а слова — наблюдаемые эмиссии.
-
Используется вероятность перехода между тегами и вероятность слова при данном теге.
-
Алгоритм Витерби применяется для нахождения наиболее вероятной последовательности тегов.
Conditional Random Fields (CRF)
Улучшенная модель по сравнению с HMM — позволяет использовать произвольные признаки и зависимость от контекста.
3. Нейронные сети
BiLSTM
-
Двунаправленная рекуррентная сеть, которая учитывает левый и правый контекст слова.
-
Вход — word embeddings (например, GloVe или FastText).
-
Выход — предсказание тега на каждый токен.
BiLSTM + CRF
-
Сначала строится контекстное представление через BiLSTM.
-
Затем — структурная модель через CRF для согласованных тегов.
4. Трансформеры
Модели вроде BERT и RoBERTa позволяют достичь state-of-the-art результатов:
from transformers import AutoTokenizer, AutoModelForTokenClassification
tokenizer = AutoTokenizer.from_pretrained("dslim/bert-base-NER")
model = AutoModelForTokenClassification.from_pretrained("vblagoje/bert-english-uncased-finetuned-pos")
BERT используется в качестве эмбеддинга-контекстуализатора, а сверху — классификатор на каждый токен. Модель fine-tune'ится на размеченном корпусе (например, Universal Dependencies).
Оценка качества POS tagging
Метрики:
-
Accuracy: доля правильно размеченных токенов
-
Precision/Recall/F1 по каждой категории (при необходимости)
-
Confusion matrix — позволяет увидеть, какие теги путаются
Проблемы и сложности
-
Омонимия: слово может быть существительным или глаголом в зависимости от контекста
“I can fish” → can — глагол, fish — глагол
“I caught a fish” → fish — существительное -
Многословные выражения: например, "New York" → может быть одним именованным существительным
-
Новые слова / out-of-vocabulary (OOV): особенно для правил и статистики
-
Слова с несколькими POS одновременно: “fast” может быть наречием, прилагательным или глаголом
Инструменты и библиотеки
Библиотека | Языки | Поддержка POS | Примечания |
---|---|---|---|
spaCy | многоязычный | ✅ | Быстрый, встроенные модели |
--- | --- | --- | --- |
NLTK | английский | ✅ | Простота, обучаемость, учебный |
--- | --- | --- | --- |
Stanza (Stanford) | многоязычный | ✅ | State-of-the-art на многих языках |
--- | --- | --- | --- |
Flair | многоязычный | ✅ | Основан на LSTM и BERT |
--- | --- | --- | --- |
UDPipe | многоязычный | ✅ | Использует Universal Dependencies |
--- | --- | --- | --- |
Пример на spaCy
import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("Apple is looking at buying a startup in the UK")
for token in doc:
print(f"{token.text}\\t{token.pos_}\\t{token.tag_}")
Вывод:
Apple NOUN NNP
is AUX VBZ
looking VERB VBG
...
UK PROPN NNP
-
pos_ — универсальный тег (NOUN, VERB)
-
tag_ — тонкий тег (NNP, VBZ и т.д.)
POS tagging — один из краеугольных этапов в анализе текста и основа для более сложных лингвистических моделей. Он помогает системам понимать, как слова используются в контексте, что критично для синтаксического анализа, семантики и логики языка.