?

Log in

No account? Create an account

Компьютерная лингвистика

Новостная лента www.solarix.ru

Аугментация и генерация NLP датасетов с помощью ruword2tags.RuFlexer
kelijah
В библиотеку ruword2tags добавлен новый класс RuFlexer, содержащий инструменты для генеративных текстовых моделей. Сейчас этот класс предоставляет единственный метод find_forms_by_tags для подбора форм слова с заданными тегами. Например, чтобы найти форму слова "кошка" для творительного падежа множественного числа, надо написать примерно такой код:
Как сделать аугментацию и генерацию датасета для NLP...Collapse )
PS: Юрий Бабуров подкинул еще хорошую статью по теме аугментации в NLP: https://towardsdatascience.com/these-are-the-easiest-data-augmentation-techniques-in-natural-language-processing-you-can-think-of-88e393fd610
Касательно упоминаемой в этой статье подстановки синонимов для русскоязычных датасетов я, возможно, выложу и свой примерчик.

Добавлена обработка OOV слов в лемматизаторе rulemma
kelijah
В питоновской библиотеке rulemma добавлена обработка несловарных (out-of-vocabulary) слов. Большинство OOV-слов образуются по относительно небольшому количеству словоизменительных правил русского языка, так что модель неплохо справляется с ними. При этом используются результаты частеречной разметки, чтобы снимать неоднозначности типа крокодил - проходил.

В качестве примера можно посмотреть на разбор фразы "Мяукая, голодные кошки ловят жирненьких хрюнделей":
Read more...Collapse )

Обновления в грамматическом словаре (GrammarEngine и ruword2tags)
kelijah
В проектах GrammarEngine, ruword2tags и rulemma в ходе разработки и отладки чатбота сделаны следующие изменения:
1) Пара сотен новых словарных статей, преимущественно из домена химии, металлургии, технологии.
2) Добавлена информация о малоупотребимости некоторых кратких форм прилагательных. На этом остановлюсь поподробнее - см. под катом.
Read more...Collapse )

Странная разница в скорости pickle.load в Python 2 и 3
kelijah
В ходе экспериментов с оптимизацией загрузки словаря в проекте ruword2tags столкнулся с неожиданным эффектом.
Контекст такой:
Read more...Collapse )
5) Неожиданный эффект заключается в том, что во 2й версии питона pickle.load работает примерно 60 секунд, в 3й - 6 секунд.
Tags:

Релиз чатбота 0.0.0.5
kelijah
Докер-образ чатбота 0.0.0.5 выложен в репозитории. Там же выложены все актуальные языковые модели и исходники бота.

Основное изменение - некоторая оптимизация процесса запуска чатбота. Я внес небольшие изменения в проект грамматического словаря (ruword2tags), чтобы можно было загружать не полную русскую словарную базу из 2.5 миллионов словоформ, а только небольшое подмножество, которое фактически встречалось в обучающих датасетах. Сопутствующие правки сделаны также в проекте частеречной разметки rupostagger.

Также я поправил некоторые баги в моделях интерпретации.

Ну и разумеется общее улучшение языковых моделей, переобученных по расширенным датасетам. В частности, сейчас в checklist'е проверки бота есть целый набор для проверки FAQ-режима бота:
Read more...Collapse )

Новый небольшой тестовый диалог в чатботе (релиз 0.0.0.4)
kelijah
После расширения обучающих датасетов, переобучения языковых моделей и небольших правок в коде самого чатбота начал отрабатывать тестовый диалог:


H:> Что-то я себя неважно чувствую
B:> Что у тебя болит?
H:> зуб
B:> Записать тебя к стоматологу?
H:> да
B:> Выполняю команду "запиши меня к стоматологу"


Релиз чатбота 0.0.0.4 выложен в репозиторий.

В планах - введение в боте технических средств для активного "выспрашивания" у собеседника недостающих сведений для получения "экспертного заключения". Это позволило бы пользователю общаться с ботом как с гибкой FAQ-системой или с действительно проактивным персональным ассистентом.

Тестовый диалог с чатботом для новой версии
kelijah
Для предстоящей новой версии чатбота прогнал тестовый диалог. Мои реплики помечены меткой H, реплики чатбота - B:

B:> День добрый
H:> Привет, как тебя зовут?
B:> кеша
H:> Кеша, а ты кто?
B:> чатбот кеша
H:> А меня зовут Миша, я человек
B:> Привет, Миша!
H:> Ты умеешь складывать числа?
B:> да
H:> Кеша, а можешь помочь мне с арифметикой?
B:> да
H:> Сколько будет 3 плюс 2?
B:> 5
H:> Спасибо, Кеша!
B:> Пожалуйста
H:> А еще по русскому языку можешь помочь?
B:> да
H:> Что такое имя существительное?
B:> Существительное — самостоятельная часть речи, обозначающая предмет, лицо или явление и отвечающая на вопросы «кто?» или «что?».


Беседы с недоразумом, так сказать :) До Алисы, конечно, далеко. Ответы бота не всегда красиво вписываются в канву беседы, не хватает креативности... Но нужно учесть, что никаких жестких правил в коде бота практически нет, все определяется игрой языковых моделек и содержимым базы знаний.

Docker-образ чатбота v.0.0.0.1-alpha
kelijah
Как оказалось, github позволяет очень просто делать релизы больших бинарных файлов до 2Гб размером. Поэтому я попробовал собрать docker-образ чатбота и оформил его как релиз 0.0.0.1.

Для запуска тестовой версии чатбота под линуксом теперь достаточно скачать этот релиз, затем выполнить две команды:

docker image load -i chatbot.tar.gz
docker run -ti -e PYTHONIOENCODING=utf-8 chatbot


Через некоторое (довольно большое - код и архитектура не оптимизированы категорически) время бот загрузит все модели и напечатает приглашение. Далее можно пробовать небольшой набор тестовых вопросов из длинного чеклиста:
Read more...Collapse )

Новая версия датасета с русскоязычными диалогами (130 Мб)
kelijah
Выложил в репозиторий архивчик с текстовым файлом - 130 Мб русскоязычных диалогов, извлеченных из большого корпуса (художественная литература всех жанров, документалистика и еще всякое):

- Андрюха! Да чего же теперь будет?
- Что надо, Арбузик, то и будет!

- Мне бы Шиповника...
- Какого еще Шиповника?


Каждый диалог содержит от 2 реплик, отделяется пустой строкой. Чистка выполнялась автоматически, некоторое количество мусора в диалогах осталось.

Датасет для раскрытия анафоры в русскоязычном тексте
kelijah
В репозитории https://github.com/Koziev/NLP_Datasets/tree/master/Anacoref выложен питоновский код, который обрабатывает датасет из соревнования http://www.dialog-21.ru/evaluation/2014/anaphora/.

Результат работы этого скрипта имеет такой вид:

1 159 Кругом кругом R 
1 166 она она P-3fsnn одинокую дачу
1 170 была быть Vmis-sfa-e 
1 175 обнесена обнесена Vmps-sfpsp 
1 184 высоким высокий Afpmsif 
1 192 забором забор Ncmsin 



Местоимение "она" раскрывается в словосочетание "одинокая дача", которое есть где-то в предшествующем тексте. Я не стал пока делать пересогласование раскрытых ссылок, оставил это на второй этап.

Вместе с датасетом из соревнования AGRR-2019 (детектирование и раскрытие гэппинга) эти данные могут быть очень полезны для тренировки чатбота, для модуля интерпретации (понимания) реплик собеседника в свободном стиле общения. Код моего решения для AGGR-2019 лежит в отдельном репе, там чисто нейросетевые модели с использованием рекуррентных языковых моделей и CRF.