Releases: Koziev/chatbot
Обновление моделей и кода чатбота
Несколько небольших изменений:
- Модель читчата и reasoner'а уменьшена до 355 млн. параметров, чтобы ускорить генерацию ответов при инференсе на CPU.
- Обновлена модель retriever'а, которая сопоставляет запрос и факты в базе знаний. Ее обучающий датасет расширен примерами для фактов про поэтов, и досыпано много негативных сэмплов, полученних при hard negative mining'е.
- База знаний расширена фактами о поэтах, поправлены опечатки.
Докер-образ как обычно доступен тут.
Изменения в прототипе диалоговой системы
- Восстановлена часть скриптовых инструментов из старой ветки чатбота. На данный момент сделана поддержка двух видов правил:
- "greedy", которые отрабатывают ДО генеративного пайплайна. См. тестовое правило для обработки реплики "куку" и для реакции на фразу "ненавижу xxx".
- "smalltalk", которые дополняют выдачу генеративного читчата и reasoner'а вариантами ответа. См. тестовое правило для "алё". Выдача этих правил оценивается на уместность в контексте диалога вместе с репликами, сгенерированными GPT.
Поддержка сценариев пока минимальная, над ней еще предстоит поработать. Сейчас сделаны сценарии для генерации стартового приветствия, привязанного к времени суток.
-
В качестве распознающей грамматики в правилах теперь используется полностью совместимый с JAICP матчер, его код лежит [тут] https://github.com/Koziev/chatbot/tree/core_v4/ruchatbot/scripting/matcher).
-
Идея интерпретатора расширена после экспериментов: теперь эта модель будет заниматься также исправлением всяких ошибок в репликах человека.
-
Оптимизация пайплайна, улучшение моделей.
Докер-образ с ботом как обычно залит в реестр: https://hub.docker.com/repository/docker/inkoziev/chatbot_v4
Оптимизация и рефакторинг диалоговой системы
Changelog:
-
Для решения задачи раскрытия неполных реплик и нормализации сообщений теперь используется модель на базе rut5-tiny. По метрикам она немного уступает ранее использовавшеся модели на базе rugpt large (https://huggingface.co/inkoziev/rugpt_interpreter): примерно 0.983 против 0.992 по символьной близости восстановленной реплики. Но по скорости работы на CPU и компактности новая модель вне конкуренции. Поэтому для MVP решено использовать пока ее.
-
Сделан рефакторинг кода фронтенда, поэтому консольный вариант запуска, rest api и телеграм-бот находятся в разных файлах. Движок бота остался в conversation_engine.py.
Докер-образ этой версии доступен тут.
Chatbot 0.0.6.1 changelog
Изменения в движке диалоговой системы:
-
Для определения синонимичности двух коротких текстов (преимущественно одиночных предложений с фактами) теперь используется модель с архитектурой sentence transformer. Обертка модели тут. Модель выложена на huggingface.
-
Несколько небольших багфиксов в пайплайне.
Докер-образ с кодом и моделями для запуска тестового телеграм-бота доступен тут.
Chatbot changelog 19.10.2022
-
Персистентность хранилища фактов (базы знаний): оно теперь умеет работать с SQLite, сохранять собранные в ходе диалога с собеседником данные и загружать их при следующем запуске. Код хранилища доступен тут:. Чтобы использовалась sqlite БД, надо при запуске бота указать опцией --db путь к файлу БД, см. тут.
-
Генерация реплик в GPT переделана на пакетную. На gpu это дает кратное увеличение скорости. Пайплайн бота вообще любит готовить множество вариантов ответной реплики по разным алгортмам, и потом выбирает одну максимально уместную в текущем контексте. Код пакетной генерации в GPT находится тут.
-
Retriever: модель переделана на sentence transformer. По метрикам и визуально по диалогам это дает значительное улучшение качества подбора фактов для обогащения контекста читчата. Код обертки доступен тут. Модель можно использовать автономно, загружая с huggingface.
Докер-образ со всеми актуальными моделями доступен в хабе.
Релиз чатбота 0.5.0
Изменения в архитектуре диалоговой системы
- Модель раскрытия реплик до полных (Incomplete Utterance Restoration)
-
Датасет расширен и почищен, начато добавление новых паттернов для нормализации и нейтрализации реплик с нецензурной лексикой, арифметических задач и т.д.
-
Проведено новое исследование для подбора оптимальных гиперпараметров обучения (число эпох, learning rate).
-
Актуальная версия модели выложена для использования в любых сторонних проектах тут https://huggingface.co/inkoziev/rugpt_interpreter
-
Код обертки, используемый в чат-боте, доступен по ссылке.
- Модель генерации ответной реплики в диалоге (Chit-chat, Deductive and Common-sense Reasoning)
-
Тренировочный датасет расширен примерами задач по математике, на логику и здравый смысл
-
Формат взаимодействия с моделью переработан в пользу максимально естественного "диалогового" вида подачи входного контекста
-
Сэмплы для вывода ответа из фактов аугментируются избыточными данными так, чтобы модель училась выбирать из контекста только релевантную информацию с помощью штатного механизма внимания в генеративке.
-
Общий пайплайн диалоговой системы переработан в пользу отложенной генерации реплик моделью читчата
-
Актуальная версия модели выложена для использования в любых сторонних проектах тут https://huggingface.co/inkoziev/rugpt_chitchat
-
Код обертки, используемый в чат-боте, доступен по ссылке.
- Модели подбора фактов из базы данных для обогащения контекста (Retriever)
-
Сделана отдельная модель для определения, что входная реплика содержит всю информацию, необходимую для вывода ответа. Выполнена как доп. слов поверх cointegrated/rubert-tiny. Код обертки доступен по ссылке.
-
Работу этой модели можно увидеть при вводе вопроса типа "чему равно 2 плюс 5?". Так как для ответа на него не нужна никакая дополнительная
информация, включая контекст диалога и данные из базы фактов, рассматриваемая модель выдает соответствующий сигнал и вывод ответа идет только исходя из текста вопроса. -
Значительно расширен датасет модели для подбора в БД фактов, релевантных заданному вопросу. Обертка для этой модели доступна тут.
-
Добавлена модель подбора записей из БД для силлогического вывода.
- Общий пайплайн диалоговой системы.
-
Переработан в пользу более прозрачного разделения на разные сценарии инференса ответной реплики.
-
Сделано разделение моделей читчата, раскрытия коротких реплик и выдумывания фактов на отдельные модели, для удобства переобучения в ходе создания MVP. Минус такого подхода - инференс на GPU требует не менее 8 Гб памяти.
-
Набор записей в "базе знаний" расширен, чтобы бот из коробки мог отвечать на более широкий круг вопросов.
Докер образ со всеми моделями и кодом для телеграмм-бота доступен здесь: https://hub.docker.com/repository/docker/inkoziev/chatbot_v4
Пайплайн чатбота только на генеративных моделях
-
Движок чатбота полностью переработан и теперь не содержит правил и сценариев. Часть прежней функциональности правил реализуется через управление генерацией в GPT, например - ответы в случае, если в базе знаний бота нет информации для генерации ответа.
-
Модель интерпретатора сообщений, раскрывающая реплики собеседника до полных клауз на основе текущего контекста, теперь также реализована на GPT, а не отдельной seq2seq модели.
-
Механизм работы с декларативными знаниями в профиле бота остался почти без изменений: в текстовом файле можно задавать ключевые факты о самом боте и о мире. Эта база знаний обновляется по ходу диалога.
Докер-образ с кодом инференса и моделями доступна тут: https://hub.docker.com/repository/docker/inkoziev/chatbot_v4
Disclaimer: на CPU данная версия работает чрезвычайно медленно. Образ собран так, чтобы его можно было запустить локально на GPU, примерно такой командой:
docker run --gpus all -ti -e PYTHONIOENCODING=utf-8 chatbot
Релиз чатбота 0.2.21
Изменения в диалоговой системе
-
В менеджер сессий добавлена чистка старых сессий (таймаут пока захардкожен как 3600 секунд).
-
Реализованы сценарии с условными графами переходов.
-
Множество небольших изменений в пайплайне обработки реплик, чтобы улучшить естественность диалогов.
-
Добавлена модель "конфабулятора" для генерации предпосылок для заданного вопроса для случаев, когда бот не может ответить с помощью текущего содержимого БЗ.
-
Обновление всех старых моделей после большого расширения обучающих датасетов.
-
Собран и выложен в общий доступ полный докер-образ бота со всеми моделями.
Пошаговая инструкция по запуску телеграм-бота с диалоговой системой
- Скачать докер-образ (~4 Гб)
https://drive.google.com/file/d/1NLTumG5Ufe4k2BktF3_ZDhnr1J8RrwTs/view?usp=sharing
- Загрузить его примерно так:
sudo docker image load -i chatbot.tar.gz
-
Зарегистрировать своего бота в Телеграме и получить токен
-
Запустить сервис бота на своем хосте:
docker run -it chatbot bash -c "/chatbot/scripts/tg_bot.sh"
После запуска в консоли будет запрошен токен, полученный при регистрации бота, и номер профиля бота (можно выбрать 1 или 2):
Enter Telegram token:> тут_токен_телеграм_бота
Choose profile [1, 2, 3]:> 2
Примерно 30 секунд бот будет загружать модели, затем начнет обрабатывать входящие сообщения.
- Теперь в Телеграме начинаем чат с ботом, зайдя по ссылке типа http://t.me/vika_chatbot. Выполняем команду "/start" для запуска сессии, и ведем диалог.
0.0.2.20-alpha
-
Доработки концепции профилей - правила и факты разделены на общие для всех профилей и частные, код скорректирован.
-
Добавлен минимальный rest api: методы push_phrase, pop_phrase. Сделано минимальное нагрузочное тестирование с запросами к rest api с двух хостов (+добавлена синхронизация над SQLite в пакет ruword2tags).
-
Добавлен детектор гендерной самоидентификации собеседника и соответствующая коррекция выдаваемых из бота фраз.
-
Доработка в базе знаний: новые факты хранятся в привязке к идентификатору собеседника, чтобы работал режим параллельного диалога с несколькими собеседниками.
-
Небольшие доработки в стилизаторе выводимых реплик бота, чтобы сделать их более естественными.
-
Добавлена новая языковая модель для валидации результатов работы генеративных моделей и фильтрации некоторых видов нонсенса.
-
Переработано формировании истории реплик в сессии для случая, когда реплика собеседника после интерпретации дает несколько клауз.
-
Много доработок в базовых сценариях знакомства.
-
Доработка микросервиса читчата: он возвращает несколько вариантов реплики, которые затем ранжируются в контексте диалога.
-
Улучшена обработка вопросов к боту в форме 2л мн.ч (на "Вы").