Вход на сайт

Проблемы морфологического анализа
Компьютерная лингвистика

Проблемы морфологического анализа

Морфологический анализ — определение леммы и грамматических признаков каждой словоформы текста. Это один из первых этапов обработки языка: от его качества зависят синтаксический разбор, поиск и машинный перевод.

Анализ

По словоформе найти лемму и граммемы: столов → стол, сущ., мн. ч., род. п.

Синтез

По лемме и граммемам породить форму: идти + прош., м. р. → шёл

Снятие омонимии

Из нескольких возможных разборов выбрать единственный верный по контексту.

Основные проблемы

01

Морфологическая омонимия

Одна словоформа допускает несколько разборов: стекло — существительное или глагол, мой — местоимение или повелительная форма «мыть». Сюда же относится синкретизм форм внутри одной парадигмы (кости).

02

Несловарные слова (OOV)

Язык — открытая система: неологизмы, имена, термины и опечатки отсутствуют в словаре. Анализатор вынужден строить гипотезы по окончаниям — как в «глокой куздре» Щербы.

03

Токенизация

Точка — конец предложения или сокращение? Дефис — часть слова (кто-то) или разделитель? В китайском пробелов между словами нет вовсе.

04

Типология языков

Флективные языки дают омонимию окончаний и чередования, агглютинативные — тысячи форм от одной основы (ev-ler-imiz-de), изолирующие почти не имеют словоизменения.

05

Морфонология

Чередования (бегу — бежишь), беглые гласные (сон — сна), супплетивизм (человек — люди), гармония гласных, немецкие композиты.

06

Разные стандарты разметки

Тегсеты OpenCorpora, Mystem, Universal Dependencies и MULTEXT-East по-разному делят части речи (причастие — глагол или отдельный класс?), что мешает сравнивать системы.

07

Малоресурсные языки

Для многих языков, включая тюркские, мало размеченных корпусов и словарей; ситуацию усложняет сосуществование кириллицы и латиницы.

08

«Шумные» тексты

Соцсети: опечатки, сленг, пропуск «ё», смешение языков (code-switching). Ошибки морфологии распространяются на все следующие этапы анализа.

Пример: омонимия словоформы «стали»

ЛеммаЧасть речиГраммемыКонтекст
статьглаголпрош. вр., мн. ч.Они стали друзьями
стальсуществительноерод. п., ед. ч.нож из стали
стальсуществительноедат. / предл. п., ед. ч.о закалённой стали
стальсуществительноеим. / вин. п., мн. ч.легированные стали

Методы решения

ПодходИдеяСильные стороныСлабые стороны
Стемминг (Портер, Snowball)Отсечение аффиксов по правиламБыстро, без словаряOverstemming и understemming, нет леммы и граммем
Словарный (Зализняк, OpenCorpora)Основы и парадигмы хранятся в словаре (trie, DAWG)Высокая точность на известных словахНе покрывает новые слова, не снимает омонимию
Конечные преобразователи (двухуровневая морфология Коскенниеми)Автомат связывает лексический и поверхностный уровниОбратимость (анализ и синтез), удобно для агглютинативных языковТрудоёмкое ручное описание грамматики
Статистический (HMM, CRF)Вероятностный выбор тега по контексту; алгоритм ВитербиСнимает омонимиюНужен размеченный корпус, разреженность данных
Нейросетевой (BiLSTM, BERT)Модель учится на символах и широком контекстеЛучшее качество, разбор незнакомых словМного данных и вычислений, слабая интерпретируемость

Инструменты и ресурсы

pymorphy2 / pymorphy3

Анализатор для русского на Python, словарь OpenCorpora. Метод parse() возвращает все разборы слова с оценками.

Mystem

Анализатор Яндекса: гипотезы для несловарных слов и контекстное снятие омонимии.

UDPipe, Stanza

Обучаемые конвейеры (токенизация, теги, леммы, синтаксис) в стандарте Universal Dependencies, формат CoNLL-U.

HFST, Foma, Apertium

Инструменты конечных преобразователей; в Apertium есть открытые анализаторы тюркских языков.

Корпуса

НКРЯ, OpenCorpora, трибанки UD — «золотой стандарт» для обучения и оценки (accuracy по токенам).

Natasha, NLTK

Библиотеки Python: Natasha — для русского (морфология, синтаксис, NER), NLTK — универсальный учебный набор.

Тесты: 10 вариантов по 15 вопросов

У каждого из 10 студентов свой вариант — вопросы не повторяются. В каждом вопросе один правильный ответ.

Результаты

Сохраняются в этом браузере. Оценка: 13–15 — «5», 10–12 — «4», 7–9 — «3», меньше — «2».