对话机器人基础
一、对话机器人分类
1. 知识领域
a. 面向限定领域
只能聊设定好的固定主题。若用户用无关领域挑战机器人,机器人用安全话术回复或结束对话。
b. 面向开放领域
用户不需要有明确的目的或意图。
c. 面向常用问题集
通过检索知识库来回答问题,仅取决知识库的内容。
2. 答案来源
a. 基于结构化
KBQA系统。问答的来源是一个知识库,知识库可能是图数据库、RDF三元组、Mysql等。问题的答案是通过知识库推理得来的。
b. 基于文档
阅读理解任务。根据用户问题,从文档中自动检索答案返回。
c. 基于问答对
语料库中保存大量的问题和答案组,用户的问题在给定的问答集中,将答案返回。
3. 答案反馈机制
a. 基于检索式
答案的来源是人工编写的模板,根据用户的问题,通过一系列算法找到对应的答案模板,返回给用户。
b. 基于生成式
通过NLG技术(自然语言生成模板)生成。专业程度不高,适合自动生成。
4. 任务类型
a. 问答机器人
一问一答,多轮对话之间没有特定关系。
b. 任务机器人
多轮交互式,以最终完成某个任务为对话结束,每轮交互与上文有关系,整个问答流程类似一个软件流程图。
c. 闲聊机器人
聊天多为兴趣爱好等闲聊。
二、实现技术
意图识别层:识别语言的真实意图,将意图分类,进行意图属性抽取。问答匹配层:对问题进行匹配识别及生成答案的过程。1. end-to-end模式
从用户输入到系统输入作为一个整体去训练,希望训练一个从用户端自然语言输入到机器端自然语言输出的整体映射关系。
优点:灵活性强,可扩展性高,减少设计过程中的人工成本,打破传统模块之间的隔离,不存在偏置误差。缺点:中间模型过于庞大,端到端模型对数据的数量和质量要求高,训练困难,对填槽、API调用等过程的建模不够明确,修改任何一个功能,都需要重新训练整个模型。
2. pipeline模式
输入——自言语言理解(NLU)——对话状态追踪(DST)——对话策略学习(DPL)——自然语言生成(NLG)——输出。
优点:灵活性强、可解释性强、易于落地,每个模块都能替换。各个模块之间相对独立,难以联合调优,模块之间的误差会层层积累。
三、 预测会话与答案生成
1. 信息检索
利用搜索来预测
通过问题——答案的匹配算法对候选答案进行打分及排序,选出分值最高的回答作为最终回复。
2. 句型模板匹配标准问题
将用户问题与问答库中的句板模板进行匹配。若匹配成功,则根据句型模板提取用户问句中的语义信息,生成相应的答案
3. 知识图谱推理
类型:用户提问的事实性问题。
基于知识图谱的具体问答流程:
(1) 句型判断
判断用户提问时闲聊还是问答。
如:北京的面积是多少?——判断是问答。
(2) 句子实体抽取
将用户提问的实体抽取出来。
如:实体是北京
(3) 实体匹配
确认提取实体的具体语义、类别
北京是地名
(4) 相似度匹配
使用词向量、模糊匹配对用户提问的属性进行匹配
“是多少”对应的是“面积”
(5) 查询图谱
得到用户提问的答案,即:北京的面积
(6) 进行回答
将查询图谱得到的答案用事先准备的回答模板处理后,返回给用户。
三、多轮对话
初步获取用户意图后,需要更多轮次的对话获取必要的信息以最终得到明确的用户指令的方式。
1. 任务型多轮对话
定义:是一个决策过程,需要机器在对话过程中不断根据当前的状态决策下一步应该采取的最优动作(如:提供结果、询问特定限制条件、澄清或确认需求等),从而能够最有效地辅助用户完成信息或服务获取的任务。
核心模块:自然语言理解模块(NLU)、对话管理模块(DM)、自然语言生成模块(NLG)。
a. 自然语言理解
领域识别:识别该语句是属于什么类型(闲聊、问答、任务)。进入任务型机器人之前做判断与分发。意图识别:识别用户意图,细分具体场景。本质是分类问题。槽位提取:从语句充提取槽位信息,对设定好的槽位进行槽位填充,是序列标注任务。 Bi-LSTM-CRF❃ 槽:多轮对话过程中,将初步用户意图转化为明确用户指令所需要补全的信息对话管理模块。
❃ 【一个槽】对应【一件事情的处理中所需要获取的一种信息】
词槽:利用用户话中关键词来填写的槽。接口槽:利用用户画像及其他场景信息填写的槽。
❃ 澄清话术:希望获取某种信息时所使用的问句。如买衣服,需要知道东西的价格、颜色等属性。
❃当接收到用户问句后,对未填充完成的必填槽组依次进行澄清。
b. 对话管理
对话管理DM:控制人机对话的进程,通过对NLU输出的处理来进行和用户的交互和反应。
通过该过程,带有明确意图的用户不断完善/修正自己的需求,且需求不够具体时明确/澄清用户需求。
对话状态追踪DST:持续对话的各种信息。根据上一时刻状态、用户状态、系统状态更新当前的对话状态。
对话策略学习DPL:对该场景下缺失槽位的反问策略。根据当前时刻的对话状态和系统状态,决定下一步的系统行为。
c. 自然语言生成
基于模板、基于语法、模型等。
2. 多主题多轮对话
话题切换:从一个多轮过程切换至另一个多轮过程,一个任务型多轮对话有多个不同的场景。
主动切换:用户主动改变自己的意图。被动切换:无法从用户的问句中抽取信息以继续当前的多轮对话,只好将其作为一条全新的文具重新解析及话题识别。(利用槽记忆进行信息的继承)
四、对话机器人的工程架构
1. 对话系统分层架构
数据层:提供数据存储访问服务。如数据库、缓存、文件、搜索引擎。
DB(MySQL、Mongo DB、HBase),Neo4j,Solr,ElasticSearch
算法层:意图识别、对话生成、排序。
NLU技术 分词(HanLP、Jieba、ICTCLAS、NLPIR、Standford CoreNLP)词性标注(HanLP、Jieba、ICTCLAS、NLPIR、Standford CoreNLP)NER(HanLP、Standford CoreNLP)同义词文本特征化(TF-IDF、Text Rank、Word2vec)文本分类(Fast Text、SVM、NB)文本聚类(K-Means、DBSCAN) NLG技术: 对话生成
服务层:为应用层提供服务支持,如对话流程管理、用户权限管理、对话内容管理
MVC->RPC->SOA->微服务
应用层:负责具体的对话业务视图展示,如对话内容显示等。
对话管理、Task Engine、词典管理、权限管理
2. 运维相关
a. 问题超出意图范围
用户意图本身很模糊:推荐近似的问题,询问用户是否想问这些近似问题。 推荐按照语义相似度,列出abcd4个选项,若都没有被用户选择,则bot回复一个低分,表示不在处理范围。 Bot的算法模块还无法识别意图:尝试让不同类型的机器人解决。b. 回复/推荐内容错误
标准文案更新但没有及时更新机器人回复话术。产品上线时回复话术A,但是过一段时间,修改回复话术为B,没有同步修改机器人。
修改方法:对系统标准文案进入后台管理系统进行管理,回复不当的文案有一个反馈机制。
c. 写日志遇到的故障
注意Log的级别,不要将Log输出全局配置为Debug。若产生大量的日志会占满硬盘。聊天系统可能集成很多功能模块,每个功能模块可以被打包成微服务形式,但是每一个微服务对外输出的日志只有一个。d. 高并发访问数据库可能引发故障
注意不要高并发访问数据库
e. 缓存引发故障
需要考虑系统的性能。
f. 滥用生产环境
生产环境不可被当测试环境使用。
参考文献:
刘宇, 崔燕红, 郭师光等.聊天机器人:入门 进阶与实战[M].机械工业出版社,:212.
对话机器人概述:/p/331791105