开箱即用的对话机器人解决方案,涵盖问答型对话、任务型对话和聊天型对话等多种场景,为您提供全方位的对话交互体验
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:
or
3.应用场景展示
3.1 问答型对话(Search Bot)
example: examples/bot_demo.py
output:
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
output:
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。
训练模型运行 train.py,使用预处理后的数据,对模型进行自回归训练,模型保存在根目录下的 model 文件夹中。
在训练时,可以通过指定 patience 参数进行 early stop。当 patience=n 时,若连续 n 个 epoch,模型在验证集上的 loss 均没有下降,则进行 early stop,停止训练。当 patience=0 时,不进行 early stop。
代码中默认关闭了 early stop,因为在实践中,early stop 得到的模型的生成效果不一定会更好。
更多的训练参数介绍,可直接看 train.py 中的 set_args()函数中的参数说明
3.3.3 预测模型(人机交互)
运行 interact.py,使用训练好的模型,进行人机交互,输入 q 结束对话之后,聊天记录将保存到 sample.txt 文件中。
执行 interact.py 时,可以尝试通过调整 topk、topp、repetition_penalty、max_history_len 等参数,调整生成的效果。更多的参数介绍,可直接看 interact.py 的 set_args()函数中的参数说明如果要使用 GPU 进行生成,则不要调用--no_cuda 参数,并且通过--device gpu_id 来指定使用哪块 GPU。
问答示例
sample1
sample2
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
DialoGPT: Large-Scale Generative Pre-training for Conversational Response Generation
参考链接:https://github.com/shibing624/dialogbot
更多优质内容请关注公号:汀丶人工智能;会提供一些相关的资源和优质文章,免费获取阅读。
版权声明: 本文为 InfoQ 作者【汀丶人工智能】的原创文章。
原文链接:【http://xie.infoq.cn/article/2d8206fa69add0eb581fed7ba】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论