?

Log in

No account? Create an account

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

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

Previous Entry Share Next Entry
Релиз чатбота 0.0.1 (альфа) - вербальные формы, сценарии и прочее
kelijah
В проекте русскоязычного чатбота сделан релиз с большими изменениями в коде бота. В основном работа велась над возможность задавать поведение бота через вручную задаваемые правила - сценарии и вербальные формы.

1) Базовая (proof-of-concept) поддержка вербальных форм. Пример описания вербальной формы смотрите в разделе "forms" в файле rules.yaml.

Вербальная форма активируется по имени каким-нибудь правилом, содержащим актор "form" - см. подстроку keyword: 'заказать|заказ' в rules.yaml.

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


B:> Привет
H:> закажи что-нибудь поесть
B:> Что заказать?
H:> пиццу с анчоусами
B:> Сколько порций?
H:> три
B:> Заказываю: что="пиццу с анчоусами", сколько="три"


Если какая-то информация для заполнения слотов содержится в инициирующей реплике, то она будет использована вербальной формой без лишних вопросов:


B:> Здравствуй
H:> закажи пиццу с колбасой
B:> Сколько порций?
H:> одну
B:> Заказываю: что="пиццу с колбасой", сколько="одну"



2) Базовая (proof-of-concept) поддержка сценариев - наборов правил для взаимодействия с пользователем в рамках какой-то "темы". См. раздел "scenarios" в файле rules.yaml, где сейчас описан тестовый сценарий "знакомство", активирующийся на реплике, похожей на "давай познакомимся". Выглядит это так:


B:> меня зовут Вика
B:> Где ты живешь?
H:> в москве
B:> Тебе нравится в Москве?
H:> да
B:> Чем ты занимаешься?
H:> работаю программистом
B:> Программисты это круто
B:> Какое у тебя хобби?
H:> рыбалка
B:> Рыба - это хорошо
B:> О чем ты хотел бы меня спросить?



3) Добавлена возможность задавать правила, срабатывающие на ключевые слова (и их грамматические формы) - см. правила с подстрокой keyword в файле rules.yaml. Тестовое правило срабатывает при вводе реплики, похожей на "давай познакомимся" и запускает сценарий "знакомство".

4) Добавлена возможность задавать правила, срабатывающие по регулярному выражению - см. правила с подстрокой regex. Тестовое правило срабатывает при вводе реплики "летим на LV-426":


H:> летим на LV-426
B:> Увлекаешься ужастиками?


5) Новый алгоритм интерпретации ответов собеседника. Теперь нейросетевая модель LSTM+CRF предсказывает цепочку команд для генеративной грамматики, которая восстанавливает полный текст ответа собеседника из текстов вопроса и краткого ответа. В обучающем датасете сейчас примерно 8000 троек вопрос+краткий ответ+развернутый ответ.

6) Отказ от лемматизации через pymystem, переход полностью на свой лемматизатор из пакета rulemma.

7) Расширенные обучающие датасеты: модель перефразировок учится на отобранных вручную ~156 тысячах пар предложений, модель релевантности вопроса и предпосылки на ~45 тысячах пар и так далее.

И последние изменения связаны с большой возней, которую пришлось затеять после попытки воткнуть вторую gtx-980 в систему с 18-й убунтой и gtx-1080ti на борту. В силу непонятных обстоятельств, убунта категорически отказалась работать в такой конфигурации, что выражалось в любимом "login loop" при старте. Это когда после ввода пароля в стартовой экране гуя он мигает и выводится снова. При этом консольная часть работала без проблем - можно было запустить обучение на двух гпушках и т.д. Все попытки отредактировать конфиг xorg и так далее ничего не давали.

После этого я достал старый ssd и накатил туда новую 19-й убунту. После установки новой CUDA нормально завелись. Послежний штрих - самая свежая версия tensorflow.

Через некоторое время я заметил, что в питоновских прогах логирование стало каким-то странным. Формат сообщений был другим, в консоли сообщения дублировались. Выяснилось, что это появляется только при импорте TF. Обнаружился и соответствующий issue. Пришлось вставлять в код костыль с удалением обработчика от ABSL, чтобы прекратить кашу на экране. Ну и попутно - я добавил расцветку сообщений лога с помощью проекта coloredlogs, подсмотрев это в RASA.

И последнее, связанное с разгоном системы. Небольшой эксперимент с включением в биосе MSI опций разгона цпу и памяти дал совершенно неожиданный эффект. С одной стороны, код на цпу стал явно быстрее. Но при обучении на гпу я начал замечать странности. Во-первых, катастрофически упала сходимость моделей, они просто перестали достигать на валидации обычной точности. Через некоторое время обозначилась и причина - изредка, раз в сутки, появлялись фатальные ошибки с floating point. То есть повышенная частота системы приводила к сбоям в блоках плавающей точки цпу. На этом эксперименты с разгоном я прекратил.