Козиев Илья (kelijah) wrote,
Козиев Илья
kelijah

Category:

NLP pipeline в чатботе - текущее состояние и задачи

NLP pipeline включает несколько отдельных питоновских пакетов. Эти пакеты реализуют часть типовой функциональности для NLP - токенизация, лемматизация, частеречная разметка и т.д. Эта группа может использоваться (и используется) независимо от чатбота.

Кроме того, несколько алгоритмов "растворено" в кодовой базе чатбота. Например, машобучаемый NER, модели синонимичности и релевантности и т.д.

Далее - текущее состояние для пакетов из первой группы.

rusyllab - разбивка слова на слоги. Реализован простой жадный алгоритм разбивки на слоги. Предполагалось, что разбивка на слоги даст дополнительные фичи для некоторых ML моделей, в частности за счет выделения корня вместо стема. В настоящее время очень удачно применен в задаче генерации датасета для обучения спеллчекера, так как типовая ошибка расщепления слова тяготеет к границам слогов :"не большой" вместо "небольшой" и т.д.

rutokenizer - сегментация текста на предложения, токенизация предложений на слова с учетом некоторых составных слов из русской словарной базы. Под капотом - регулярки и табличные проверки исключений. Используется в различных прототипах и экспериментах, в том числе в проекте нового парсера.

ruword2tags - грамматический словарь, содержащий теги для русского лексикона. Сделан как замена прежнего грамматического словаря, конвертируется из его 5-миллионной словарной базы. Используется автономно в экспериментах как поставщик грамматических фич, например в ML моделях для спеллчекера. Также этот словарь используется в rupostagger и rusyntax. В этом же пакете есть "flexer" - инструмент для склонения и спряжения слов, он активно юзается в генеративной грамматике чатбота. Из проблем: к сожалению, в какой-то момент выяснилось, что на некоторых машинах git clone или pip install git+ из этого репозитория приводит к некорректно скачанному файлу базы данных. Что с этим делать, я пока не придумал.

rupostagger - part-of-tagger на ванильном машобуче. Обучается на достаточно большом датасете, около 800,000 токенов с частичной ручной валидацией. Используется во многих проектах, в том числе в чатботе. Лемматизатор rulemma работает поверх разметки, которую выдает этот модуль, для учета контекста в случае неоднозначной лемматизации. Основная проблема с этим модулем - достаточно медленно обучение, длящееся сутками.

Для этой задачи у меня есть еще две альтернативные реализации, которые не выложены на гитхаб.

rupostagger2 - нейросетевой вариант теггера, на основе рекуррентных сеток. Обучается на таком же датасете, что и rupostagger, плюс использует эмбеддинги слов. Обучается примерно за 2 часа на одной GTX 1080 Ti, дает немного лучшее качество, чем rupostagger.

rupostagger3 - нейросететка плюс эмбеддинг предложения через BERT. Экспериментальная модель. Обучается тяжело, пока качество хуже, чем у rupostagger2.

rulemma - лемматизация с учетом грамматического контекста для случаев неоднозначности. Например, слово "рой" может быть императивной формой глагола или именем существительным. Это дает разные нормальные формы: "рыть" и "рой". Учет результатов частеречной разметки из rupostagger позволяет разрешать часть подобных неоднозначностей.

ruchunker - экстрактор именных группы (NP chunks). Облегчает в чатботе выделение фрагментов реплик пользователя. Реализован на  ванильном машобуче. Обучается на датасете из ~400,000 предложениях с размеченным NP.

Не выложеные на гитхаб пакеты:

rusyntax2 - парсер зависимостей. Нейросетевая рекуррентная модель, реализующая sequence labeling. Обучается на большом treebank'е с ручной разметкой. Позволяет, например, определить, какие зависимые прилагательные надо пересогласовывать при изменении формы существительного.

rusyntax3 - аналогично rusyntax2, но реализован восходящий  shift-reduce парсер с бинарными правилами, в котором вместо ручных правил работает классификатор (shift or reduce). Обучается на treebank, который сначала приводится к цепочке действий для каждого предложения на базе известного синтаксического графа.
Tags: github, nlp
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 0 comments