智能客服
智能客服设计整体框架
智能客服根据任务类型可以分为:咨询问答、任务型多轮对话、闲聊客服。
智能客服原理
咨询问答
参考链接:
QA机器人的本质是:假设用户提了一个问题Q,QA机器人需要从已有的QA数据库中寻找最合适的QA对返回,QA机器人会进行QQ相似度计算和QA匹配度计算,通过综合相似度与匹配度,找到最适合的一组QA对 (Qi, Ai),即最佳答案返回。
设计思路
1、客服根据常见的问答数据创建问答知识库。
2、用户提出的问题是,将用户问题与知识库中的问题进行相似度计算,检索出最相近的问题
3、返回最相关的问题及其答案
解决方案:
基于问答对的方法,常用检索+排序的算法。
1、NN模型:常见的网络模型包括RNN和CNN模型。例如双层编码(Decoder)的长短期记忆模型(LSTM)。这种模型在很多场景下都比较好用,网络模型的主要缺点是需要一定数量的样本。
2、拆分成子问题:在语料比较小的情况下,将问题进行拆分(1)把问题变成一种短文本语义表征,通常有tfidf、w2v。(2)然后再进行语义距离计算,例如计算向量的余弦距离
eg:QA机器人问题-问题匹配算法原理
QQ匹配包括几个部分:句向量化、相似度计算、相似度排序。
- 句向量化是使用BoW词袋模型和同义词扩展,将句子的词转换成向量;
- 然后再与问题库里的词进行相似度计算,计算出余弦相似度;
- 用余弦距离产生相应的结果,按照相似度大小排序返回答案列表。
任务型多轮对话
(Task-Bot) 的关键技术是基于意图识别与语义槽提取。
eg: A: “帮我订一个今天下午3点到4点的会议室吧?要大一点的。”
机器人识别出来这是一个任务,而这个任务要完成必须三个语义槽:时间、地点、大小。
任务型多轮对话原理
任务型对话主要包括三部分:自然语言理解,对话管理,最后是自然语言生成 (忽略语音识别步骤)
自然语言理解:
该模块一般包含以下三个模块:
- 领域识别:即识别该语句是不是属于这个任务场景,一般有多个机器人集成时,如闲聊机器人,问答机器人等,领域识别应当在进入任务型机器人之前做判断与分发
- 意图识别:即识别用户意图,细分该任务型场景下的子场景
- 语义槽填充:用于对话管理模块的输入 Eg: Text=“人民币对美元的汇率是多少”;经过自然语言理解模块会解析为 act ( slot1
= value1, slot2 = value2 ……) 的形式,即意图,槽位,槽位信息三元组形式,即 Text会解析为“查询(槽位1=人民币,槽位2=美元)”这样的形式。
对话管理模块
自然语言理解模块的三元组输出将作为对话管理系统的输入。它主要包括两部分: - 状态追踪模块:该模块在对话的每一轮次对用户的目标进行预估,管理每个回合的输入和对话历史,输出当前对话状态。
- 对话策略模块:该模块的主要功能是根据前面的对话状态决策采取的最优动作(如:提供结果,询问特定限制条件,澄清或确认需求等)从而最有效的辅助用户完成信息或服务获取的任务。该模块基于用户输入的语义表达和当前对话状态输出下一步的系统行为和更新的对话状态。
Eg: text=“人民币对美元的汇率是多少”。“查询(槽位1=人民币,槽位2=美元)”这样的形式将作为对话管理模块的输入,这时候状态追踪模块就要根据前几轮的信息,结合该输入判断该轮的查询状态,确定查询的槽位,以及与数据库的交互。如得到想要查询的确实是人民币对美元的汇率信息。这时候,根据现有的对话策略判断当前的槽位状态,最后给出对话管理模块的输出,如查询结果(源货币=人民币,目标货币=美元,汇率=1:0.16)
参考链接:https://www.cnblogs.com/qcloud1001/p/9182421.html
解决方案
第一个是语法分析,可以通过语法规则去分析一句话,得到这句活是疑问句还是肯定句,继而分析出用户意图。相应的也可以通过语法结构中找到对应的槽值。
第二种方法是生成模式,主要两个代表性的HMM,CRF, 这样就需要标注数据。
第三种方法是分类思想,先对一句话提取特征,再根据有多少个槽值或意图训练多少个分类器,输入一句话分别给不同的分类器,最终得到包含槽值的概率有多大,最终得到这个槽值。
还有一种采用深度学习方式,使用LSTM+CRF两种组合的方式进行实体识别,现在也是首选的方法 ,但有一个问题是深度学习的速度比较慢 ,一般轻量型的对话系统还是通过语法分析或分类方式或序列标注来做。
自然语言生成模块
该模块主要任务是将对话策略输出的语义表达生成流畅可读的自然语言句子,反馈给用户。
传统方法(a)基于模板的NLG方法: 人为定义一些模板,用需要的信息填空的方法。
(b)基于树的NLGhttps://zhuanlan.zhihu.com/p/49197552
闲聊问答
解决方案
- 检索式ChatBot
- 像ES那样直接检索(如使用fuzzywuzzy),只能字面匹配
- 构造句向量,检索问答库,能够检索有同义词的句子
- 生成式ChatBot(todo)
- seq2seq
- GAN
数据集
英文
斯坦福大学自然语言处理的QA数据集SQuAD
来自Stack Overflow平台的Python语言问答数据集【Kaggle】
来自Stack Overflow品台的R语言问答数据集【Kaggle】
保险行业问答(QA)数据集【Minwei Feng】
AI2科学问答数据集(多选)
康奈尔大学电影对白
微软的10万个问题和答案的MS MARCO数据集
中文
百度的中文问答数据集WebQA
中文问答数据
中文对话数据集
中文电影台词数据集dgk_shooter_min.conv
白鹭时代中文问答语料:白鹭时代论坛问答数据,一个问题对应一个最好的答案
微博数据集:华为李航实验室发布,也是论文“Neural Responding Machine for Short-Text Conversation”使用的数据集
新浪微博数据集,评论回复短句
参考文献:
系列(三)-- BERT在阅读理解与问答上应用
DuReader:百度大规模的中文机器阅读理解数据集
基于知识图谱的问答系统入门—NLPCC2016KBQA数据集
基于DrQA的中文问答系统构建(一):DrQA安装
阅读理解式问答系统参考文章:
Li P, Li W, He Z, et al. Dataset and Neural Recurrent Sequence Labeling Model for Open-Domain Factoid Question Answering[J]. arXiv: Computation and Language, 2016.
DGCNN,全名为Dilate Gated Convolutional Neural Network,即“膨胀门卷积神经网络”