?

Log in

No account? Create an account

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

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

Previous Entry Share Next Entry
Немного болтовни с чатботом 0.0.0.13
kelijah
В новом релизе чатбота в движке сделаны некоторые правки, чтобы получались (иногда) вот такие диалоги:

B:> Привет!
B:> День добрый
H:> привет
B:> Привет, о чем поговорим?
H:> меня зовут Илья
B:> Моего создателя тоже зовут Илья
H:> это круто
B:> :)
H:> а тебя как зовут
B:> вика
H:> приятно познакомиться
B:> Взаимно
H:> ты кто
B:> чатбот
H:> круто
B:> :)
H:> кто такой чатбот
B:> Чатбот это компьютерная программа, способная отвечать на вопросы пользователя, задаваемые на естественном языке.
B:> я чатбот
H:> а я программист
B:> Я уважаю программистов
H:> я разрабатываю чатботы
B:> Чатботы это круто
H:> что ты любишь
B:> вопросы
B:> животных я люблю
H:> а я люблю компьютеры
B:> Чем ты занимаешься с компьютерами ?


Это уже намного ближе к обычной болтовне незнакомых людей, как, например, в этом датасете Toloka Persona Chat Rus. То есть меньше механичности, больше импровизации и проактивности. Хотя косяков пока многовато - иногда (кхм, частенько) бот выдает малорелевантные реплики, иногда модели генерации текста поставляют мусор.

Чтобы справится с этими косяками, нужна модель для оценки того, насколько реплика вписывается в общий дискурс диалога. Я попробовал сделать черновую модельку на базе ELMO из deeppavlov (ElmoEmbedder) плюс линейный регрессор для предсказания вектора следующей реплики, чтобы через cosine между предсказанным и фактическим вектором оценивать уместность реплики. Результат в целом нулевой, так как по метрике precision@k предсказанный вектор с трудом попадает в top-40% фраз, из которых одна - действительно релевантная. Следующая попытка - нейросетевой регрессор поверх BERT. Я проверил на ruBERT из deeppavlov плюс keras-bert, вроде бы немного более обнадеживающие результаты, будем препарировать тему дальше.


  • 1
Почему не просто бинарная задача -- "эти две фразы возможно взяты из одной беседы" (ну или "эта фраза подойдет ко всему ранее сказанному")?

>Почему не просто бинарная задача

Хотелось бы обойтись без этого безобразия с негативным сэмплингом.

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

Вот прямо сейчас такая сетка перед глазами :)

1) Просто назначаю веса приводящие к 1:1(2) и не парюсь особо превышением негатива над позитивом.
В конце концов негатива и так в разы больше при реальном применении, и тут главное что бы просто уйти из локального оптимума при обучении

2) "Компаратор" на выходе должен быть "максимально тупым", иначе мешает обучаться шареной сети которая собственно и преобразует к некому "хешу" сравниваемое.

Ну да в компараторе выбрать что лучше умножение или вычитание "методом проб и ошибок", так оно и так всё такое :).

3) Для обобщения большего готовый glove (или свой word2vec).

  • 1