写点什么

开箱即用的对话机器人解决方案,涵盖问答型对话、任务型对话和聊天型对话等多种场景,为您提供全方位的对话交互体验

  • 2023-08-13
    浙江
  • 本文字数:3439 字

    阅读完需:约 11 分钟

开箱即用的对话机器人解决方案,涵盖问答型对话、任务型对话和聊天型对话等多种场景,为您提供全方位的对话交互体验

dialogbot:开箱即用的对话机器人解决方案,涵盖问答型对话、任务型对话和聊天型对话等多种场景,为您提供全方位的对话交互体验。


人机对话系统一直是 AI 的重要方向,图灵测试以对话检测机器是否拥有高度的智能。如何构建人机对话系统或者对话机器人呢?


  • 对话系统经过三代的演变:

  • 规则对话系统:垂直领域可以利用模板匹配方法的匹配问句和相应的答案。优点是内部逻辑透明,易于分析调试,缺点是高度依赖专家干预,缺少灵活性和可可拓展性。

  • 统计对话系统:基于部分可见马尔科夫决策过程的统计对话系统,先对问句进行贝叶斯推断,维护每轮对话状态,再跟进对话状态进行对话策略的选择,从而生成自然语言回复。基本形成现代的对话系统框架,它避免了对专家的高度依赖,缺点是模型难以维护,可拓展性比较受限。

  • 深度对话系统:基本延续了统计对话系统的框架,但各个模型采用深度网络模型。利用了深度模型强大的表征能力,语言分类和生成能力大幅提高,缺点是需要大量标注数据才能有效训练模型。

  • 对话系统分为三类:

  • 问答型对话:多是一问一答,用户提问,系统通过对问题解析和查找知识库返回正确答案,如搜索。

  • 任务型对话:指由任务驱动的多轮对话,机器需要通过理解、主动询问、澄清等方式确定用户目标,然后查找知识库返回结果,完成用户需求。如:机器人售电影票。

  • 聊天型对话:目标是产生有趣且富有信息量的自然答复使人机对话持续下去,如小度音响。

1.问答型对话(Search Dialogue Bot)

1.1 本地检索问答

计算用户问句与问答库中问句的相似度,选择最相似的问句,给出其对应的答复。


句子相似度计算包括以下方法:


  • TFIDF

  • BM25

  • OneHot

  • Query Vector

1.2 网络检索问答

对百度、Bing 的搜索结果摘要进行答案的检索


  • 百度搜索,包括百度知识图谱、百度诗词、百度万年历、百度计算器、百度知道

  • 微软 Bing 搜索,包括 bing 知识图谱、bing 网典

1.3 任务型对话(Task Oriented Dialogue Bot)

  • End to End Memory Networks(memn2n)

  • BABi dataset

1.4 聊天型对话(Generative Dialogue Bot)

  • GPT2 Model

  • Sequence To Sequence Model(seq2seq)

  • Taobao dataset

2.Demo 展示

Official Demo: https://www.mulanai.com/product/dialogbot/



The project is based on transformers 4.4.2+, torch 1.6.0+ and Python 3.6+.Then, simply do:


pip3 install torch # conda install pytorchpip3 install -U dialogbot
复制代码


or


pip3 install torch # conda install pytorchgit clone https://github.com/shibing624/dialogbot.gitcd dialogbotpython3 setup.py install
复制代码

3.应用场景展示

3.1 问答型对话(Search Bot)

example: examples/bot_demo.py


from dialogbot import Bot
bot = Bot()response = bot.answer('姚明多高呀?')print(response)
复制代码


output:


query: "姚明多高呀?"answer: "226cm"
复制代码

3.2 任务型对话(Task Bot)

example: examples/taskbot_demo.py

3.3 聊天型对话(Generative Bot)

3.3.1 GPT2 模型使用

基于 GPT2 生成模型训练的聊天型对话模型。


模型已经 release 到 huggingface models:shibing624/gpt2-dialogbot-base-chinese


example: examples/genbot_demo.py


from dialogbot import GPTBotbot = GPTBot()r = bot.answer('亲 你吃了吗?', use_history=False)print('gpt2', r)
复制代码


output:


query: "亲 吃了吗?"answer: "吃了"
复制代码

3.3.2 GPT2 模型 fine-tune

  • 数据预处理在项目根目录下创建 data 文件夹,将原始训练语料命名为 train.txt,存放在该目录下。train.txt 的格式如下,每段闲聊之间间隔一行,格式如下:


真想找你一起去看电影突然很想你我也很想你
想看你的美照亲我一口就给你看我亲两口讨厌人家拿小拳拳捶你胸口
今天好点了吗?一天比一天严重吃药不管用,去打一针。别拖着
复制代码


运行 preprocess.py,对 data/train.txt 对话语料进行 tokenize,然后进行序列化保存到 data/train.pkl。train.pkl 中序列化的对象的类型为 List[List],记录对话列表中,每个对话包含的 token。


cd dialogbot/gpt/python preprocess.py --train_path data/train.txt --save_path data/train.pkl
复制代码


  • 训练模型运行 train.py,使用预处理后的数据,对模型进行自回归训练,模型保存在根目录下的 model 文件夹中。


在训练时,可以通过指定 patience 参数进行 early stop。当 patience=n 时,若连续 n 个 epoch,模型在验证集上的 loss 均没有下降,则进行 early stop,停止训练。当 patience=0 时,不进行 early stop。


代码中默认关闭了 early stop,因为在实践中,early stop 得到的模型的生成效果不一定会更好。


python train.py --epochs 40 --batch_size 8 --device 0,1 --train_path data/train.pkl
复制代码


更多的训练参数介绍,可直接看 train.py 中的 set_args()函数中的参数说明

3.3.3 预测模型(人机交互)

运行 interact.py,使用训练好的模型,进行人机交互,输入 q 结束对话之后,聊天记录将保存到 sample.txt 文件中。


python interact.py --no_cuda --model_dir path_to_your_model
复制代码


执行 interact.py 时,可以尝试通过调整 topk、topp、repetition_penalty、max_history_len 等参数,调整生成的效果。更多的参数介绍,可直接看 interact.py 的 set_args()函数中的参数说明如果要使用 GPU 进行生成,则不要调用--no_cuda 参数,并且通过--device gpu_id 来指定使用哪块 GPU。


  • 问答示例


  • sample1


  user :在干嘛chatbot:睡觉  user :这么早就睡觉啦chatbot:嗯啊你也早点睡啊  user :我再玩一会儿手机chatbot:早点休息晚安  user :拜拜啦chatbot:晚安晚安  user :多喝热水chatbot:哈哈哈  user :多喝热水chatbot:好的咯
复制代码


  • sample2


  user :在吗chatbot:在  user :我不开心chatbot:怎么啦  user :最近好累啊chatbot:是挺累的  user :作业好多啊chatbot:还好还好  user :我觉得我快要挂科了chatbot:我也是啊,但是我觉得我快熬出头了  user :不说了,我还有好多作业没写chatbot:我也是啊好多啊  user :那先这样,下次再聊,再见了chatbot:好哒
复制代码

4.数据集

  • 闲聊语料分享|中文闲聊语料 | 数据集地址 |语料描述||---------|--------|--------||常见中文闲聊|chinese_chatbot_corpus|包含小黄鸡语料、豆瓣语料、电视剧对白语料、贴吧论坛回帖语料、微博语料、PTT 八卦语料、青云语料等||50w 中文闲聊语料 | 百度网盘【提取码:4g5e】GoogleDrive |包含 50w 个多轮对话的原始语料、预处理数据||100w 中文闲聊语料 | 百度网盘【提取码:s908】GoogleDrive|包含 100w 个多轮对话的原始语料、预处理数据|


中文闲聊语料的内容样例如下:


谢谢你所做的一切你开心就好开心嗯因为你的心里只有学习某某某,还有你这个某某某用的好
你们宿舍都是这么厉害的人吗眼睛特别搞笑这土也不好捏但就是觉得挺可爱特别可爱啊
今天好点了吗?一天比一天严重吃药不管用,去打一针。别拖着
复制代码


  • 模型分享



  • Reference


  • Wen T H, Vandyke D, Mrksic N, et al. A Network-based End-to-End Trainable Task-oriented Dialogue System[J]. 2016.

  • How NOT To Evaluate Your Dialogue System: An Empirical Study of Unsupervised Evaluation Metrics for Dialogue Response Generation

  • A. Bordes, Y. Boureau, J. Weston. Learning End-to-End Goal-Oriented Dialog 2016

  • Zhao T, Eskenazi M. Towards End-to-End Learning for Dialog State Tracking and Management using Deep Reinforcement Learning [J]. arXiv preprint arXiv:1606.02560, 2016.

  • Kulkarni T D, Narasimhan K R, Saeedi A, et al. Hierarchical deep reinforcement learning: Integrating temporal abstraction and intrinsic motivation [J]. arXiv preprint arXiv:1604.06057, 2016.

  • BBQ-Networks: Efficient Exploration in Deep Reinforcement Learning for Task-Oriented Dialogue Systems

  • Deep Reinforcement Learning with Double Q-Learning

  • Deep Attention Recurrent Q-Network

  • SimpleDS: A Simple Deep Reinforcement Learning Dialogue System

  • Deep Reinforcement Learning with a Natural Language Action Space

  • Integrating User and Agent Models: A Deep Task-Oriented Dialogue System

  • The Curious Case of Neural Text Degeneration

  • DialoGPT: Large-Scale Generative Pre-training for Conversational Response Generation

  • vyraun/chatbot-MemN2N-tensorflow

  • huggingface/transformers

  • Morizeyao/GPT2-Chinese

  • yangjianxin1/GPT2-chitchat


参考链接:https://github.com/shibing624/dialogbot


更多优质内容请关注公号:汀丶人工智能;会提供一些相关的资源和优质文章,免费获取阅读。



发布于: 刚刚阅读数: 2
用户头像

本博客将不定期更新关于NLP等领域相关知识 2022-01-06 加入

本博客将不定期更新关于机器学习、强化学习、数据挖掘以及NLP等领域相关知识,以及分享自己学习到的知识技能,感谢大家关注!

评论

发布
暂无评论
开箱即用的对话机器人解决方案,涵盖问答型对话、任务型对话和聊天型对话等多种场景,为您提供全方位的对话交互体验_人工智能_汀丶人工智能_InfoQ写作社区