NLTK4RUSSIAN

Участники проекта

Паничева Полина Вадимовна, СПбГУ, ppolin86@gmail.com
Протопопова Екатерина Владимировна, СПбГУ, protoev@gmail.com
Мирзагитова Алия Ришатовна, СПбГУ, amirzagitova@gmail.com
Москвина Анна Денисовна, СПбГУ, moskvina.anya@gmail.com
Митрофанова Ольга Александровна, СПбГУ, oa-mitrofanova@yandex.ru

Цель проекта

Наш проект направлен на создание лингвистического комплекса для исследования русскоязычных корпусов текстов, который основывается на различных методах и алгоритмах в составе наиболее востребованных инструментов современной компьютерной лингвистики (NLTK, Pattern, GenSim и т.д.).

Первая задача, выполняемая в проекте, это разработка гибридного морфологического анализатора для русского языка на основе NLTK и PyMorphy.

Вторая задача, решаемая участниками проекта – создание синтаксического анализатора для русского языка на основе категориальной грамматики и парсера, встроенного в NLTK.

NLTK

NLTK – специализированная среда для автоматической обработки текстов, созданная для работы с Python. В состав NLTK входит коллекция корпусов и словарные базы данных.
Инструменты NLTK позволяют осуществлять полный цикл автоматической обработки текста:
• графематический анализ,
• токенизация,
• стемминг,
• лемматизация,
• морфологический анализ,
• фрагментационный анализ,
• синтаксический анализ,
• логическая семантика.

В NLTK предусмотрены алгоритмы классификации и кластеризации, машинное обучение. NLTK включает в себя средства для автоматического извлечения фактов и оценки тональности текстов, а также ряд других операций.

До сих пор отсутствует адаптация NLTK для работы с русским языком. Наше исследование направлено на восполнение этого пробела.

Гибридный морфологический анализатор для русского языка на основе NLTK и PyMorphy2

1. Архитектура гибридного морфологического анализатора

Нами был разработан лингвистический комплекс, интегрирующий теггеры NLTK и морфологический анализатор PyMorphy2 с двумя режимами работы.

В NLTK имеются различные морфологические теггеры, опирающиеся на словари и/или контекстные данные: это теггер на регулярных выражениях, n-граммные теггеры, аффиксный теггер, теггер на скрытых марковских моделях, теггер Брилла. Эти теггеры можно использовать по отдельности или же в комбинации “основной теггер – бэк-офф теггер(ы)”.

PyMorphy2 (http://pymorphy2.readthedocs.org/en/latest/) – морфологический анализатор русских текстов, который работает с морфологическим словарем OpenCorpora (http://opencorpora.org/), создаваемым на основе базы данных “Грамматического словаря русского языка” А.А. Зализняка. Анализатор производит морфологический анализ с определением грамматических характеристик целевого слова и лемматизацией. При разборе несловарных словоформ используется предсказатель, объединяющий два алгоритма: предсказание по префиксу и по концу слова. PyMorphy2 может предлагать несколько вариантов разбора. При необходимости выбора одного разбора из множества выбирается наиболее вероятный разбор. В PyMorphy2 при морфологическом анализе контекстная информация в явном виде не используется.

2. Режимы работы гибридного морфологического анализатора

Гибридный морфологический анализатор работает в двух режимах.
Режим 1. Первый этап обработки тестового корпуса производится с помощью PyMorphy2. Если PyMorphy2 дает несколько вариантов разбора, то происходит вызов биграммного теггера NLTK, который выбирает наилучший вариант разбора на основе тегов предшествующей словоформы: выбирается тот тег, который наиболее часто встречается последовательно в биграмме с предыдущим тегом в обучающей выборке.

Режим 2. Первый этап обработки производится с помощью теггеров NLTK: униграммного, биграммного и триграммного. Далее проводится доразметка тестового корпуса с учетом предсказаний PyMorphy2 в тех случаях, когда отсутствует разбор в первой модели.

3. Тестирование гибридного морфологического анализатора

В тестировании гибридного морфоанализатора использовался следующий корпусный материал:
• подкорпус OpenCorpora со снятой омонимией (~ 6 тыс. предложений, 30 тыс. с/у);
• выборки из Национального корпуса русского языка (http://ruscorpora.ru/corpora-usage.html) со снятой омонимией из подкорпуса художественных текстов (RNC-fiction) и публицистики (RNC-media).

Была произведена оценка точности работы гибридного морфоанализатора по двум основаниям:
1) на всех морфологических категориях: P = 79,7…86,0%;
2) на частеречной разметке: P = 90,0…95,8%.

Сравнение полученных данных с “золотым стандартом” соревнования морфологических парсеров для русского языка (http://www.dialog-21.ru/evaluation/2010/morphology/), доказывает, что результаты работы гибридного анализатора являются состоятельными.

Синтаксический анализатор для русского языка на основе NLTK

1. Архитектура синтаксического анализатора

В рамках проекта производится разработка синтаксического анализатора для русского языка. Модуль синтаксического анализа в NLTK позволяет исследователям самостоятельно создавать формальные грамматики различных типов для разных естественных языков и применять их в конкретных целях автоматической обработки текстов. Встроенный в NLTK парсер обрабатывает поступающие на вход предложения на основании правил грамматики и строит структуру составляющих (или несколько структур). В нашем анализаторе мы используем вид категориальной грамматики, основанный на признаках категорий (feature-based grammar). Особенностью рассматриваемого формализма является возможность работать с так называемыми структурами признаков, то есть, в нашем случае, оперировать информацией о некоторых изменяемых параметрах этих категорий. С грамматиками такого вида в NLTK используется алгоритм Эрли (Earley-chart parser), который находит и сохраняет фрагменты разбора предложения, а потом соединяет их в группы.
Основная задача в создании нашего парсера – написание правил выделения синтаксических групп (grammar productions), основывающихся на линейном порядке словоформ и ограничениям по их морфологическим характеристикам. Правила опираются на морфологическую информацию, полученную при помощи морфоанализатора PyMorphy2. Чтобы использовать его разметку для синтаксического анализа используется функция, представляющая морфологические параметры словоформ PyMorphy2 в виде терминальных элементов в категориальной грамматике NLTK.
На данный момент разработано ядро синтаксического анализатора: правила для выделения отдельных именных, глагольных, предложных групп, групп с числительными и наречиями, некоторых групп, основанных на сочинении. Правила более высокого уровня описывают, как эти группы соединяются между собой.
Так выглядят некоторые из правил, использующихся при разборе простого предложения:
XP[-inv] -> NP[CASE=nomn, NUMBER=?n, PERS=?p, GENDER=?g] VP[NUMBER=?n, PERS=?p, GENDER=0]
NP[CASE=?c, GENDER=?g, NUMBER=?n] -> NOUN[CASE=?c, GENDER=?g, NUMBER=?n]
VP[+objt, NUMBER=?n, PERS=?p, GENDER=?g] -> VP[-objt, NUMBER=?n, PERS=?p, GENDER=?g] NP[CASE=accs]
VP[TENSE=?t, GENDER=?g, NUMBER=?n, PERS=?p] -> VERB[TENSE=?t, GENDER=?g, NUMBER=?n, PERS=?p]
NP[CASE=?c, GENDER=?g, NUMBER=?n, +gent] -> NP[CASE=?c, GENDER=?g, NUMBER=?n] NP[CASE=gent]\n")

2. Программная реализация синтаксического анализатора

Программа, реализующая наш парсер, подготовлена на языке Python (версия 3.4.3), использует инструменты пакета NLTK и морфологический анализатор PyMorphy2, и, соответственно, предполагает предустановку этих трех компонентов.
При запуске программы, прежде всего, в файл записывается сама грамматика, то есть разработанные нами правила. Правила грамматики записываются в отдельный файл формата .fcfg, с которым работает NLTK. Первая часть грамматики обозначается как «grammar productions». После того, как пользователь вводит предложение для разбора, оно разбивается на токены. Далее для полученного списка вызывается функция, переводящая морфологическую информацию о словоформах в вид правил категориальной грамматики и записывающая их в файл с грамматикой. Такие правила попадают во вторую часть грамматики, в раздел «lexical productions». Тем самым, создается категориальная грамматика с грамматическими и лексическими продукциями, на основе которой может проводиться синтаксический анализ. На данном этапе вызывается встроенный в NLTK парсер, который производит разбор предложения на основе нашей грамматики.

Программное обеспечение

https://github.com/named-entity/nltk4russian

Публикации

Москвина А.Д., Орлова Д., Паничева П.В., Митрофанова О.А. Разработка ядра синтаксического анализатора для русского языка на основе библиотек NLTK // Компьютерная лингвистика и вычислительные онтологии. Труды XIX Международной объединенной научной конференции «Интернет и современное общество», Санкт-Петербург, 22–24 июня 2016 г., 2016. С. 44-54. pdf
Паничева П.В., Митрофанова О.А. Интеграция морфоанализаторов для аннотации русскоязычных корпусов текстов // Сборник материалов по итогам XLIII Международной филологической конференции. Секция прикладной и математической лингвистики. СПб., 2014. С. 56-60. pdf
Паничева П.В., Протопопова Е.В., Митрофанова О.А., Мирзагитова А.Р. Разработка лингвистического комплекса для морфологического анализа русскоязычных корпусов текстов на основе Pymorphy и NLTK // Труды международной конференции “Корпусная лингвистика – 2015”. СПб., 2015. С. 361-373. pdf