# Вопросно-ответная диалоговая система (чатбот)
## Краткое описание
Чатбот позволяет вести беседы примерно такого вида:
![диалог с чатботом в телеграмме](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
资源评论
快撑死的鱼
- 粉丝: 2w+
- 资源: 9157
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于springboot的唐山驰风丰田4s店卖各种各样的丰田汽车源码(java毕业设计完整源码).zip
- 机械设计塑胶件贴魔术贴机、魔术贴自动机sw12可编辑全套设计资料100%好用.zip
- 51单片机PID算法控制无刷直流电机proteus仿真 功能描述 1.五个按键,停止 启动,正转,反转,加速,减速 2.显示lcd1602,第一行设置速度set= 3.第二
- 机械设计托盘成型穿梭输送机sw21全套设计资料100%好用.zip
- 基于springboot的商城积分系统源码(java毕业设计完整源码).zip
- 机械设计五轴动力头钻孔机sw18全套设计资料100%好用.zip
- NModbus Tools
- 基于springboot的嗨玩-旅游网站源码(java毕业设计完整源码+LW).zip
- 变压器故障MATLAB simulink仿真 变压器仿真 变压器内部相间故障,匝间短路,外部故障,励磁涌流,差动保护与故障之间的判别区分 可附相关文档分析
- 基于springboot的图书推荐系统的设计与实现源码(java毕业设计完整源码).zip
- Python的基础篇-指令和用法
- 部分oj题及答案PDF
- 模糊PID控制的永磁同步电机矢量控制系统 simulink 仿真 PMSM永磁同步电机 模糊PID控制 矢量控制SVPWM 模糊PID控制的PMSM的矢量控制系统 simulink 仿真 有报告说
- 基于springboot的图书管理系统源码(java毕业设计完整源码).zip
- Snoop5.1.0 WPF界面解析工具
- 基于springboot的在线学习平台源码(java毕业设计完整源码).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功