forked from Koziev/chatbot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCHANGELOG.txt
211 lines (123 loc) · 15 KB
/
CHANGELOG.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
Релиз 0.0.2.20
==============================================
1) Доработки концепции профилей - правила и факты расделены на общие для всех профилей и частные, код скорректирован.
2) Добавлен минимальный rest api: методы push_phrase, pop_phrase. Сделано минимальное нагрузочное тестирование с запросами к restapi с двух хостов (+добавлена синхронизация над SQLite в пакет ruword2tags).
3) Добавлен детектор гендерной самоидентификации собеседника и соответствующая коррекция выдаваемых из бота фраз.
4) Доработка в базе знаний: новые факты хранятся в привязке к идентификатору собеседника, чтобы работал режим параллельного диалога с несколькими собеседниками.
5) Небольшие доработки в стилизаторе выводимых реплик бота, чтобы сделать их более естественными.
6) Добавлена новая языковая модель для валидации результатов работы генеративных моделей и фильтрации некоторых видов нонсенса.
7) Переработано формировании истории реплик в сессии для случая, когда реплика собеседника после интерпретации дает несколько клауз.
8) Много доработок в базовых сценариях знакомства.
9) Доработка микросервиса читчата: он возвращает несколько вариантов реплики, которые затем ранжируются в контексте диалога.
10) Улучшена обработка вопросов к боту в форме 2л мн.ч (на "Вы").
Релиз 0.0.2.19
==============================================
1) Реализован детектор абракадабры и нонсенса для фильтрации некачественных реплик из генеративных моделей
2) Добавлена возможность использования веб-сервиса чит-чата на базе авторегрессионной модели, обученной на датасете диалогов (в расширенном докер-образе)
3) Императивы теперь прогоняются через общий pqa-пайплайн для обработки ситуаций, когда запрос грамматически выражен побудительной конструкцией.
4) Доработки в коде dialog manager'а, в частности - более корректная обработка фазы прощания
5) Новая seq2seq модель для интерпретатора и генератора ответов, нормально работающая с новой версией tensorflow.
6) Из пайплайна по умолчанию исключены модели извлечения даты, времени и т.д. (entity extractors)
7) Модель определения достаточности набора предпосылок переделана на использование BPE токенизации и обучаемых эмбеддингов, вместо wc2v
8) В дефолтный профиль бота добавлено большое количество фактов
9) Обучающие датасеты для генератора ответов, интерпретатора и для читчата значительно расширены, соответствующие модели переобучены.
Релиз 0.0.2.18
==============================================
1) В датасет обучения интерпретатора добавлены сэмплы с сегментацией
расширенного ответа на 2 и 3 клаузы.
2) Движок бота теперь умеет обрабатывать ситуации, когда сообщаемый факт
ему уже известен:
H: кошки мяукают
B: мне уже известно, что кошки мяукают
3) Если собеседник сообщает о себе факт, который справедлив и для бота, то
бот сообщает об этом:
H: я не курю
B: и я не курю тоже
Релиз 0.0.2.17
==============================================
1) В докер-образ добавлена интеграция чатбота с Telegram. Для запуска
бота в tg необходимо
a) зарегистрировать своего бота у @botfather
b) запустить бота командой
docker run -p 9001:9001 -it chatbot bash -c "/chatbot/scripts/tg_bot.sh"
и указать по запросу tg-токен из пункта a.
Релиз 0.0.2.16
==============================================
1) Код тестирования бота вынесен из console_chatbot.py в отдельный модуль. Этот модуль
умеет поддерживать диалог, задавая боту релевантные вопросы из задаваемого списка с учетом контекста.
Таким образом, реализовано полуавтоматическое тестирование: после работы тестера достаточно просмотреть листинг
диалогов двух ботов на предмет нерелевантных ответов и т.д.
2) Большая чистка дистрибутива от ненужных файлов. Оптимизация движка чатбота, отключение редко используемых моделей для ускорения загрузки.
3) Восстановлена работа telegram-версии бота (код https://github.com/Koziev/chatbot/blob/master/ruchatbot/frontend/telegram_bot.py)
4) Расширение механизма дискурса: в базе фактов чатбота теперь запоминаются реплики собеседника,
так что бот помнит, о чем его спрашивали только что и что ему только что говорили.
5) Правила продолжения (continuation rules) для "замершего" чит-чата: см. раздел continuation в файле rules.yaml
Релиз 0.0.2.15
===============================================
1) Точность модели вывода текста ответа по заданным предпосылкам и вопросу увеличена до ~0.92
2) Все ответы чатбота длиной до 3 слов перефразируются перед выдачей. Это позволяет активно заменять, например, "да" эквивалентными ответами.
3) Точность модели интерпретатора (раскрытие кратких ответов до полных, раскрытие анафоры, гэппинга, элипсиса) увеличена до ~0.65
4) Переделки в блоке генерации smalltalk-реплик (уместные фразы для поддержания разговора).
Релиз 0.0.2.14
=============================
1) Восстановлена [веб-морда для чатбота](https://github.com/Koziev/chatbot/blob/master/ruchatbot/frontend/flask_service_bot.py).
Чтобы общаться с ботом в браузере, надо запустить контейнер командой:
```
docker run -p 9001:9001 -it chatbot bash -c "/chatbot/scripts/flask_bot.sh"
```
Примерно через 5 минут сервис загрузит все данные и выдаст в консоль сообщение с текстом:
```
werkzeug - * Running on http://0.0.0.0:9001/ (Press CTRL+C to quit)
```
Теперь можно открывать в браузере адрес http://127.0.0.1:9001/ и общаться с ботом, вводя запросы
в простой веб-форме.
2) В консольной версии бота в докере убраны мешающие отладочные сообщения.
Релиз 0.0.2.13
=======================================
1) Существенно увеличена точность seq2seq модели генерации текста ответа, ценой увеличения времени тренировки до ~40 часов.
На данный момент метрика качества (Jaccard similarity) на валидации дает ~0.89, то есть почти в 90% тестовых случаях
модель генерирует точный ответ. Увеличение точности этой модели позволяет отработать некоторым сложным тестам с формальным выводом:
H:> все философы смертны
H:> сократ - философ
H:> смертен ли сократ?
B:> да
Сейчас модель вывода с двумя предпосылками срабатывает только для последних 3 реплик собеседника, но в будущем
планируется, что она будет подхватывать также предпосылки с кванторами из базы данных.
2) Добавлена экспериментальная точная модель генерации ответа для самых частотных случаев (шаблонная kNN-1).
3) Модель интерпретатора немного улучшена за счет расширения обучающего датасета до 28,000 образцов анафоры, гэппинга, элипсиса etc.
4) В динамические факты добавлена текущая дата (Сегодня 29 июня) и текущий год (Сейчас 2020 год), чтобы бот мог отвечать на вопросы типа "компьютер, скажи, какое сегодня число?"
5) Генеративный перефразировщик реплик бота вносит вариативность в ответы бота. Он обучается на датасете перефразировок и для
некоторых типов фраз умеет строить некоторое количество синонимичных вариантов. Например, для реплики "меня зовут Вика" перефразировщик
выдаст варианты:
мое имя - вика
вика - так меня зовут
меня вика зовут
меня зовут вика
Релиз 0.0.2.12
==============================
В этом релизе чатбота реализованы такие главные изменения:
1) [Модель интерпретатора](https://github.com/Koziev/chatbot/blob/master/ruchatbot/bot/nn_interpreter_new2.py), которая занимается раскрытим анафоры, гэппинга и элипсиса, доработана. Теперь в ряде случаев срабатывает более точная kNN шаблонная модель, которая обучается на тех же данных, что и seq2seq сетка.
2) Датасет интерпретатора расширен до 26,000 сэмплов. Это еще немного повысило качество [seq2seq модели интерпретации](https://github.com/Koziev/chatbot/blob/master/ruchatbot/trainers/nn_seq2seq_interpreter.py).
3) Сделана декомпозиция [классификатора интентов](https://github.com/Koziev/chatbot/blob/master/ruchatbot/bot/intent_detector.py). В отдельные классификаторы, помимо интентов, выделено определение тональности (sentiment), оскорбительности (abusiveness), направленности (direction) реплики. Это позволяет оценивать каждую реплику пользователя по нескольким критериям одновременно. То есть реплика пользователя может быть одновременно про политику, быть оскорбительной и являться вопросом к боту.
Релиз 0.0.2.11
======================
В боте полностью переработан Интерпретатор.
Интерпретатор занимается раскрытием анафоры, заполнением эллипсиса и гэппинга в диалоге, опираясь на контекст.
Благодаря ему от собеседника не требуется постоянно задавать полные вопросы.
Новая нейросетевая модель умеет учитывать контекс из последней фразы или из последних двух фраз (ограничение обучающего датасета, а не
самого алгоритма).
Обучение происходит на данный момент на ~20 тысячах фрагментах диалога. По прикидкам, нужно
увеличить этот объем примерно до 50 тысяч, чтобы снизить количество ошибок до приемлемого уровня (сейчас многовато, да).
Пример работы интерпретатора, восстанавливающего краткие вопросы по контексту:
B:> Привет
H:> какой сегодня день недели?
B:> вторник
H:> а вчера какой был? (проинтерпретировано как "какой день недели был вчера ?")
B:> понедельник
H:> ну а завтра какой будет? (проинтерпретировано как "какой день недели будет завтра завтра ?")
B:> среда
H:> как тебя зовут
B:> меня зовут Вика
B:> А тебя как зовут?
H:> меня илья (проинтерпретировано как "меня зовут илья")
B:> Моего создателя тоже зовут Илья