Отчет по проекту “Частеречная разметка (POS-tagging) русской региональной ассоциативной базы данных”
В области обработки естественного языка существуют задачи, связанные с разделением слов на категории, которые определяются морфологическими, синтаксическими и семантическими признаками конкретного слова, например, на части речи [1]. Например, находиться, усесться, начинать - это глаголы; ацтек, клуб, смерть - существительные, и т.д.
Целью данного проекта является выполнение автоматической разметки данных по частям речи (POS-tagging, part-of-speech tagging) при помощи различных библиотек для обработки русскоязычных текстов. После этого необходимо сравнить методы и выбрать наилучшее решение.
Для работы была взята русская региональная ассоциативная база данных (СИБАС) [2]. Специфичность данных заключается в том, что данные представлены в виде пар слов: респондентам показывали слова-стимулы (которые были составлены психо-лингвистами) (всего 1000 различных слов), и они должны были ответить словом-реакцией, которое ассоциируется у них со словом-стимулом. То есть у слов нет контекста в стандартном понимании (оно не стоит в предложении, есть лишь пара: стимул-реакция).
Ниже приведен пример данных:
Стимул | Реакция |
---|---|
абсолютный | агент |
бабушка | носки |
слышать | наушники |
Все скрипты доступны на гитхабе: https://github.com/TohaRhymes/pos-tagging-practise
Для реализации проекта были использованы различные библиотеки для обработки текстов на русском языке с возможностью разметки слов по частям речи. Есть два вида методов:
- Работающие на основе словарей (реализованы, например, в библиотеках pymorphy2, nltk, natasha и др.).
- Работающие на нейронных сетях (реализованы, например, в библиотеках rnnmorph, deeppavlov и др.). Хотя в каких-то сложных задачах они показывают невероятный перфоманс, может оказаться, что простые и надежные модели работают лучше BERT’ов и трансформеров. Поэтому сразу брать и использовать нейронные сети не имеет смысла.
Везде, где не указано иначе - уже результаты получены.
- Предобработка. Была сделана предобработка данных, убраны фразы (реакции, состоящие из более чем одного слова - содержащие пробел), а также слова, содержащие спец символы. В результате из 167889 пар осталось 140269 пар слов.
- Использование библиотек для определения частей речи.
- Библиотека pymorphy2 [3]. Самый простой из возможных способов решения проблемы, работающий на словарях: принимает слово, возвращает его возможные части речи (например, у слова “мой” часть речи может быть как глагол, так и местоимение). Мы сохраняем все варианты.
- Библиотека natasha [4]. Использует pymorphy2 (то есть словари), а так же дополнительные правила взаимодействия слов, частей речи – морфологические и синтаксические разборы текста. В результате уже возвращает одно значение, в отличие от pymorphy2.
- Так как уже раньше говорилось, что у нас нет контекста в обычном смысле этого слова, поэтому нет гарантии, что такие, казалось бы, простые методы будут работать хуже нейросетей. Однако, для полноты картины, кроме стандартных методов был рассмотрен ряд библиотек, работающих на нейронных сетях:
- Библиотека deeppavlov [5]. В данный момент проходит работа с этой библиотекой.
- Сначала там возникало много проблем с установкой (даже на виртуальное окружение Python).
- Для русского языка библиотека предлагает два варианта моделей: основанная на BERT (англ. Bidirectional Encoder Representations from Transformers – подробнее можно почитать в гугле) и двунаправленная LSTM на основе символов. По данным документации, эффективность BERT 97,8% против 96,2% у LSTM.
- Библиотека rnnmorph [6]. Решение на рекуррентных нейросетях (RNN). Еще не запускал.
- Лучшее решение с Диалога GramEval2020 [7]. Решение на двунаправленной LSTM (англ. Long-Short Term Memory – подробнее можно почитать в гугле). Еще не запускал.
- Библиотека deeppavlov [5]. В данный момент проходит работа с этой библиотекой.
- После получения тегов каждой из библиотек, был произведен маппинг, используя данные по граммемам (универсальным обозначениям частей речи) [8].
- установить оставшиеся 2 библиотеки, проверить
- запустить оставшиеся NLP DL фреймворки.
- взять тестовые данные, прогнать все на полученном пайплайне, и сравнить результаты
Практический смысл данной работы заключается в попытке определить наилучший метод (из существующих) для быстрой автоматической разметки похожих ассоциативных баз. Размеченные данные могут использоваться лингвистами уже для дальнейшего анализа языка.
[1] В. М. Алпатов. О разных подходах к выделению частей речи // Вопросы языкознания. — 1986. — Вып. 4. — С. 37–46.
[2] Сибирский ассоциативный словарь русского языка (СИБАС). http://adictru.nsu.ru/
[3] Korobov M.: Morphological Analyzer and Generator for Russian and Ukrainian Languages // Analysis of Images, Social Networks and Texts, pp 320-332 (2015).
[4] Natasha project. https://github.com/natasha/natasha
[5] Burtsev M. et al. DeepPavlov: Open-Source Library for Dialogue Systems //Proceedings of ACL 2018, System Demonstrations. – 2018. – С. 122-127.
[6] Ilya Gusev. Morphological analyzer for russian and english languages based on neural networks and dictionary-lookup systems. https://github.com/IlyaGusev/rnnmorph
[7] Anastasyev D. G. et al. Part-of-speech Tagging with Rich Language Description //Computational Linguistics and Intellectual Technologies: Proceedings of the International Conference “Dialogue 2017” - Moscow, May 31—June 3, 2017