/chatbot

Русскоязычный чатбот

Primary LanguagePython

Вопросно-ответная диалоговая система (чатбот)

Краткое описание

Чатбот позволяет вести беседы примерно такого вида:

диалог с чатботом в телеграмме

Запуск чатбота в Telegram

Для запуска бота в Телеграме нужно зарегистрировать его у @botfather и получить токен.

Затем запускаем сервис в докере такой командой:

docker run -it chatbot bash -c "/chatbot/scripts/tg_bot.sh"

После старта появится приглашение ввода токена и выбора профиля бота.

Кастомизация чатбота, константы профиля

Используемая база знаний (в текущей реализации - plain text файл с фактами) указывается в профиле, который загружается при старте экземпляра бота. В скрипте console_bot.sh можно увидеть указание на тестовый профиль profile_1.json, позволяющий боту отвечать на несколько простых вопросов. В этом профиле в качестве базы знаний указан файл profile_facts_1.dat. Формат этого файла описан в шапке файла.

Среди разных фактов там можно увидеть запись:

меня зовут $name_nomn

Конструкция $name_nomn означает, что в строку при загрузке чатбота будет подставлена константа с именем name_nomn, определенная в файле profile_1.json в разделе constants:

	"constants": {
		"gender": "ЖЕН",
		"name_nomn": "Вика"
	}

Так как бота может встречаться в нескольких местах, то удобнее задать имя в одном файле профиля.

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

Вторая константа с именем "gender" определяет грамматический род для бота, в данном случае женский. В том же файле фактов можно найти такую запись:

Я $chooseAdjByGender(нужен, нужна), чтобы отвечать на вопросы посетителей чата

Конструкция $chooseAdjByGender(нужен, нужна) позволяет выбрать одно из перечисленных слов, фильтруя их по константе грамматического рода. Таким образом, реплики бота становятся более релевантными "биологической" природе бота.

Архитектура бота

В состав пайплайна входят модели:

  1. интерпретатор на базе ruGPT для восстановления полного текста реплки в контексте диалога, подробнее об этом тут.

  2. retriever на базе ruBert с доп. слоями для подбора релевантных фактов в базе знаний.

  3. генеративная модель на базе ruGPT для формирования текста ответа по найденному в базе знаний факту и заданному вопросу.

  4. детектор перефразировок на базе ruBert для определения синонимичности двух предложений.

  5. генеративный читчат для генерации ответов в случае, если в базе знаний нет нужного факта.