Что такое POS tagging и зачем он нужен?

POS tagging (Part-of-Speech tagging, или морфологическая разметка) — это задача в обработке естественного языка (NLP), направленная на автоматическое определение части речи для каждого слова в тексте, с учётом его контекста.

Простыми словами, цель POS tagging — аннотировать каждое слово в предложении его грамматической категорией, например, существительное, глагол, прилагательное, наречие и т.д. Эта аннотация может также включать морфологические признаки: род, число, падеж, время, залог и прочее, в зависимости от языка и используемого тега.

Зачем нужен POS tagging

  1. Лингвистическая интерпретация текста — базовый шаг к «пониманию» текста компьютером.

  2. Предобработка перед другими задачами:

    • Синтаксический разбор (парсинг)

    • Named Entity Recognition (NER)

    • Лемматизация/стемминг (определение нормальной формы слова)

    • Разбор смысловых зависимостей

  3. Фильтрация по частям речи — например, выбор только существительных в поисковых системах.

  4. Информационный поиск — улучшение качества поиска по ключевым словам.

  5. Машинный перевод — понимание структуры предложения важно для корректного перевода.

  6. 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 — один из краеугольных этапов в анализе текста и основа для более сложных лингвистических моделей. Он помогает системам понимать, как слова используются в контексте, что критично для синтаксического анализа, семантики и логики языка.