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

Categories:

Чатбот: полная переделка модели генерации ответа на seq2seq with attention

Репозиторий проекта чатбота: https://github.com/Koziev/chatbot
Докер-образ: https://github.com/Koziev/chatbot/releases/tag/0.0.2.10-alpha

Доработки в новом релизе чатбота

1. Полностью переработан код, строящий ответ на основе вопроса и предпосылок. Вместо нескольких моделей, делавших это для разных типов вопросов, теперь оставлена единственная sequence2sequence модель с "классическим" attention. На текущем датасете из ~81000 троек предпосылка-вопрос-ответ эта модель учится около 10 часов, что намного меньше суммарного времени старого ансамбля моделей. К тому же, качество новой модели выше.

2. Сделан эксперимент с реализацией сложного сценария прямо на Питоне. Таким способом изучалась возможность и удобство описания нелинейных диалоговых процессов не через новый язык сценариев, а штатными средствами, знакомыми квалифицированному программисту. Этот новый сценарий запускается по ключевому вопросу "кто ты".

3. Как обычно - расширение обучающих датасетов. В датасете модели синонимичности сейчас примерно 250,000 пар предложений, в датасете предпосылка-вопрос-ответ около 81,000 сэмплов.

4. Множество новых правил, позволяющих боту реагировать на реплики собеседника в режиме "чит-чата".

Тестовый диалог с ботом

Вопросы идут без особого порядка, только для тестирования отдельных частей пайплайна бота и моделей. Реплики бота идут с префиксом B, фразы человека предваряются префиксом H.

B:> Привет, давай поболтаем?
H:> привет, а кто ты?
B:> я чатбот
B:> Скажи, пожалуйста, кто ты?
H:> я лингвист
B:> Ага, ты хорошо разбираешься в языке
B:> Теперь мы знаем, кто из нас кто
B:> Что самое сложное в работе лингвиста?
H:> Ты человек?
B:> я не человек
H:> что тебе нравится?
B:> Мне нравятся люди
H:> ежи тебе нравятся?
B:> Мне ничего не известно про ежей
H:> Который час?
B:> 11 часов 27 минут
H:> Ты веришь в карму?
B:> Я не верю в карму
H:> Скажи правду
B:> Я никогда не говорила неправду
H:> так ты робот что ли?
B:> я чатбот
B:> По-моему, я уже отвечала на этот вопрос...
H:> как тебя зовут
B:> меня зовут Вика
B:> А тебя как зовут?
H:> илья
B:> Рада знакомству, Илья!
H:> а с нечистой силой ты умеешь бороться
B:> Я не умею бороться с нечистою силою
H:> сколько будет 2 плюс 2?
B:> 4
H:> Кто такой муравьед?
B:> Видимо, это какое-то животное
H:> ты пробовала чебуреки?
B:> Нет, я никогда не пробовала чебуреки
H:> Кстати, Вика, ты красишь волосы?
B:> Я не крашу волосы
H:> кто тебя создал?
B:> Разработчика этого чатбота зовут Илья Козиев
H:> Вика, а ты стрижёшься?
B:> Я не стригусь
H:> Что такое авокадо?
B:> Результаты выполнения запроса "definition("авокадо")"
H:> есть ли у тебя имя?
B:> меня зовут Вика
H:> веришь ли ты в макаронного монстра?
B:> Пожалуй, нет, я не верю в макаронного монстра
H:> Скажи, Вика, а как ты отдыхаешь?
B:> Занимаюсь чисткой базы данных
H:> ты ходишь в спортзал?
B:> Нет, я не хожу в спортзал
H:> ты часто смотришься в зеркало?
B:> Я не смотрюсь в зеркало
H:> Ты можешь заболеть ангиной?
B:> Мне ангина не страшна
H:> Я заболел ангиной
B:> Когда ты заболел?
H:> Скажи, ты бреешь бороду?
B:> Я не брею бороду
H:> А в слова умеешь играть?
B:> нет
H:> Как ты относишься к другим чатботам?
B:> Я уважаю чужой труд
H:> Расскажи анекдот!
B:> У меня нет модуля юмора
H:> у тебя проколоты уши?
B:> у меня не проколоты уши
H:> Вика, а ты счастлива?
B:> Я счастлива
H:> Вика, ты готова ответить на мои вопросы?
B:> Буду рада ответить на них
H:> Кто тебя создал?
B:> Разработчика этого чатбота зовут Илья Козиев
H:> Что любишь делать?
B:> отвечать на вопросы
H:> какая сейчас погода в Москве?
B:> Заглушка для вызова сервиса прогноза погоды в москва
H:> А связать носки ты можешь?
B:> Я не умею вязать
H:> Привет, что у тебя новенького?
B:> у меня все как обычно
H:> ты куришь?
B:> я не курю
H:> Какой у тебя рост?
B:> Мой рост - 170 см
H:> чем увлекаешься?
B:> я увлекаюсь компьютерными играми
B:> а какое хобби есть у тебя?
H:> ты любишь принимать ванны?
B:> Я не принимаю ванны
H:> ты в бога веришь?
B:> В бога я не верю
H:> а в инопланетян ты веришь?
B:> я не верю, что инопланетяне существуют
H:> ты знаешь, что такое Солнце?
B:> Солнце это звезда.
H:> Как у тебя настроение?
B:> у меня отличное настроение
H:> Я могу придти сделать флюорографию завтра в субботу?
B:> Кабинет флюорографии не работает по субботам и воскресеньям
H:> Сколько максимально я могу взять в кредит?
B:> Максимальная сумма кредида для физических лиц - 10 миллионов
H:> скажи, у тебя сестричка есть?
B:> У меня нет сестер
H:> Хочу узнать про патиссоны - что это такое?
B:> Патиссон - однолетнее травянистое растение семейства Тыквенные, разновидность тыквы обыкновенной.
H:> Ну лаваш что такое?
B:> Лаваш - пресный белый хлеб в виде тонкой лепёшки из пшеничной муки
H:> Что будет, если я не верну кредит?
B:> Санкции за нарушение условия кредитования включают в себя штрафы, взимаемые в судебном порядке
H:> Про пудинг расскажи
B:> Пудинг - английское блюдо из теста.
H:> а хобби у тебя есть?
B:> Я интересуюсь компьютерными технологиями
H:> В каком году родился Тургенев?
B:> в 1818
H:> Как ты считаешь, роботы попадают в рай?
B:> Канонические религии не признают наличие у роботов души, поэтому рай и ад не для роботов

Текущие концептуальные проблемы, над которыми предстоить серьезно поработать

1. У чатбота нет психического (эмоционального) состояния. Поэтому он не может устать от однотипных вопросов, обидиться на оскорбительные замечания, удивиться необычному факту и так далее. Ответы бота зачастую стереотипны.

2. В дополнение к предыдущему, бот не умеет предсказывать психическое состояние собеседника по его ответам. Поэтому он не знает, доволен ли собеседник его ответами, не сердится ли он и т.д.

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

4. Движок бота имеет ограниченные возможности по интерпретации неполных ответов человека, анафоры, элипсиса. Вопросы типа "зачем?", "почему?", "а еще?", а также местоимения 3-го лица (он, она etc) обычно ставят его в тупик, выражающийся в нерелевантном ответе.

5. В диалоговый движок заложена возможность строить ответ на основе 2х и более предпосылок. Таким образом, бот теоретически может выполнять сложные рассуждения, используя части и взаимосвязь множества фактов. Но текущая реализация механизма подбора релевантных фактов нормально работает только для случая, когда для ответа вообще не нужны дополнительные предпосылки (Чему равно 2 плюс 2?) или достаточно найти одну релевантную предпосылку в базе данных.
Tags: chatbot, чат-боты, чатбот, читчат
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 2 comments