# Вопросно-ответная диалоговая система (чатбот)
## Краткое описание
Чатбот позволяет вести беседы примерно такого вида:
![диалог с чатботом в телеграмме](chatbot.png)
### Запуск чатбота в Telegram
Для запуска бота в Телеграме нужно зарегистрировать его у [@botfather](https://t.me/BotFather) и получить токен.
Затем загружаем докер-образ и запускаем сервис такой командой:
```
docker run -it inkoziev/chatbot_v4 bash -c "/chatbot/scripts/tg_bot.sh"
```
После старта появится приглашение ввода токена и выбора профиля бота.
## Архитектура бота
В состав [нейросимвольного пайплайна](https://github.com/Koziev/chatbot/blob/core_v4/ruchatbot/bot/conversation_engine.py) входят следующие модели и программные компоненты:
1) **интерпретатор** на базе ruT5 для восстановления полного текста реплики в контексте диалога, исправления ошибок, нормализации - см. [карточку модели на huggingface](https://huggingface.co/inkoziev/t5_interpreter).
2) **textual knowledge retriever** - модель с архитектурой sentence transformer для подбора релевантных фактов в базе знаний и переписывания истории диалога, см. [карточку модели на huggingface](https://huggingface.co/inkoziev/sbert_pq).
3) **chitchat & reasoner** на базе ruGPT для формирования текста ответа по найденному в базе знаний факту и заданному вопросу - см. [карточку модели на huggingface](https://huggingface.co/inkoziev/rugpt_chitchat).
4) **детектор перефразировок** на базе rubert-tiny для определения синонимичности двух предложений - см [карточку модели на huggingface](https://huggingface.co/inkoziev/sbert_synonymy).
5) **scripting engine** - правила и сценарии для изменения и дополнения работы вышеперечисленных моделей.
## Кастомизация чатбота, константы профиля
Используемая база знаний (в текущей реализации - plain text файл с фактами) указывается
в _профиле_, который загружается при старте экземпляра бота. В скрипте [tg_bot.sh](https://github.com/Koziev/chatbot/blob/core_v4/scripts/tg_bot.sh)
можно увидеть указание на тестовый профиль [profile_1.json](https://github.com/Koziev/chatbot/blob/master/data/profile_1.json),
позволяющий боту отвечать на простые вопросы. В нем в качестве базы знаний
указан файл [profile_facts_1.dat](https://github.com/Koziev/chatbot/blob/master/data/profile_facts_1.dat).
Формат этого файла описан в шапке файла.
Среди разных фактов там можно увидеть запись:
```
меня зовут $name_nomn
```
Конструкция ```$name_nomn означает```, что в строку при загрузке чатбота будет подставлена
*константа* с именем name_nomn, определенная в файле profile_1.json в разделе constants:
```
"constants": {
"gender": "ЖЕН",
"name_nomn": "Вика"
}
```
Так как имя бота может встречаться в нескольких местах, то удобнее задать имя в одном файле профиля.
Когда чатбот обрабатывает вопрос ```"Как тебя зовут?"```, он [определяет](https://huggingface.co/inkoziev/sbert_pq), что факт ```меня зовут Вика```
релевантен для ответа на заданный вопрос, и далее запускает процедуру построения
ответа с помощью [генеративной модели читчата](https://huggingface.co/inkoziev/rugpt_chitchat). Само имя "Вика" нигде не "зашито" в языковых моделях. Поэтому для его смены не нужно переобучать
нейросетки, а достаточно отредактировать данную запись.
Вторая константа с именем "gender" определяет грамматический род для бота, в данном случае женский. В том же файле
фактов можно найти такую запись:
```
Я $chooseAdjByGender(нужен, нужна), чтобы отвечать на вопросы посетителей чата
```
Конструкция ```$chooseAdjByGender(нужен, нужна)``` позволяет выбрать одно из перечисленных слов, фильтруя
их по константе грамматического рода. Таким образом, реплики бота становятся более релевантными
"биологической" природе бота.
## Правила для управления диалогом
С помощью правил можно изменять или дополнять реплики, генерируемые нейропайплайном.
На данный момент движок поддерживает 2 типа правил.
**greedy** - эти правила срабатывают до генеративных моделей и в случае успешного применения полностью их заменяют.
**smalltalk** - эти правила запускаются параллельно генеративным моделям, порождаемые ими варианты реплики взвешиваются на уместность в текущем контексте вместе с репликами, сгенерированными читчатом.
Примеры этих правил можно увидеть в файле [profile_rules_1.yaml](https://github.com/Koziev/chatbot/blob/core_v4/data/profile_rules_1.yaml).
Самое простое правило выглядит примерно так:
```
- rule:
name: "тестовое stateful правило с реакцией на фразу ку-ку"
if:
h: "* (куку/ку-ку) *"
then:
say:
phrases:
- "[(ну/да,/ага,)] ку-ку!"
```
Строка после тега ```h:``` описывает требование к реплике человека-собеседника.
Описание представляет из себя выражение регулярной грамматики, похожей
на обычные регулярные выражения, но работающей со словами. В данном примере
символ ```*``` означает произвольно длинную цепочку любых слов. Выражение ```(куку/ку-ку)```
описывает альтернативы, каждый допустимый вариант отделяется от других символом ```/```.
Вариантов может быть сколько угод
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
具有简介和事实的俄语生成聊天机器人_Python_Shell_下载.zip (102个子文件)
shared_facts.dat 94KB
profile_facts_1.dat 39KB
shared_facts_wiki.dat 19KB
aphoristic_facts.dat 10KB
dockerfile 2KB
.gitattributes 195B
profile_1.json 291B
README.md 10KB
Восстановление полных реплик в диалоге.pdf 264KB
архитектура чатбота Вика.pdf 243KB
chatbot.png 198KB
conversation_engine.py 78KB
scenario.py 17KB
jaicp_pattern.py 12KB
actors.py 12KB
jaicp_tokenizer.py 9KB
generative_template.py 8KB
rugpt_chitchat.py 7KB
profile_facts_reader.py 7KB
telegram_bot.py 7KB
bot_scripting.py 6KB
chunk_tools.py 6KB
text_utils.py 6KB
base_utterance_interpreter2.py 6KB
dialog_rule.py 6KB
jaicp_ornode.py 6KB
jaicp_permutationsnode.py 6KB
simple_facts_storage.py 6KB
flask_service_bot.py 5KB
rubert_synonymy_detector.py 5KB
closure_detector_2.py 5KB
load_named_patterns.py 5KB
jaicp_entities.py 5KB
console_chatbot.py 5KB
ruwordnet_relevancy_scorer.py 5KB
jaicp_morphnode.py 5KB
jaicp_wordnode.py 4KB
nn_enough_premises_model.py 4KB
udpipe_parser.py 4KB
load_global_rules.py 4KB
bot_profile.py 4KB
interlocutor_gender_detector.py 3KB
nn_syntax_validator.py 3KB
jaicp_named_pattern_with_label.py 3KB
jaicp_optionalnode.py 3KB
simple_modality_detector.py 3KB
jaicp_constituent.py 3KB
facts_database.py 3KB
scripting_module.py 2KB
segmenter.py 2KB
rut5_interpreter.py 2KB
jaicp_repeat.py 2KB
jaicp_starnode.py 2KB
rugpt_base.py 2KB
base_answering_machine.py 2KB
jaicp_basenode.py 2KB
sbert_relevancy_detector.py 2KB
base_facts_storage.py 2KB
phrase_splitter.py 2KB
running_scenario.py 2KB
jaicp_bot.py 2KB
synonymy_detector.py 2KB
console_utils.py 2KB
jaicp_entitynode.py 2KB
model_applicator.py 2KB
jaicp_regexnode.py 1KB
rugpt_interpreter.py 1KB
logging_helpers.py 1KB
sbert_paraphrase_detector.py 1KB
jaicp_negationnode.py 1KB
parsing_result.py 1KB
constant_replacer.py 1KB
jaicp_weightnode.py 1KB
rugpt_confabulator.py 1KB
dsl_tools.py 990B
abbrev.py 935B
console_helpers.py 768B
matching.py 707B
relevancy_detector.py 706B
language_resources.py 702B
matching_cache.py 659B
base_utterance_interpreter.py 653B
modality_detector.py 637B
lemmatizer.py 634B
running_dialog_status.py 517B
padding_utils.py 475B
textnormalizer.py 400B
tokenizer.py 350B
chunk.py 293B
search_utils.py 278B
global_rule.py 131B
tokenizer.py 24B
__init__.py 0B
person_classifier_model.py 0B
person_change_model.py 0B
__init__.py 0B
__init__.py 0B
__init__.py 0B
tg_bot.sh 220B
profile_scenarios_1.yaml 9KB
共 102 条
- 1
- 2
资源评论
快撑死的鱼
- 粉丝: 1w+
- 资源: 9150
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 2023-04-06-项目笔记 - 第三百零八阶段 - 4.4.2.306全局变量的作用域-306 -2025.11.05
- Carla 0.9.15编译的zlib-1.2.13.zip
- Carla 0.9.15编译的xerces-c-3.23-src
- 【完整源码+数据库】基于Spring SchedulingConfigurer 实现动态定时任务
- Java Web应用集成支付宝支付功能【附完整源码及数据库设计】
- mysql驱动文件mysql
- python网络编程入门基础
- 基于SpringBoot 整合 AOP完整源码示例
- python基础,python进程和线程
- Java Web 实验项目 初步实现maven和idea的整合
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功