1、分类
按场景分,对话系统大体上分为3类:闲聊型、问答型、任务型。
1.1 单轮对话(问答型)
问答型单轮对话是问答式的,即类似检索引擎;依赖于知识库/问答对集合,不依赖上下文。
评估指标:召回率、准确率、问题解决率。
单轮对话的难点:
a.识别同一问题的不同表达方式:对于同一意思的不同问法,返回一个相同的答案。
b.理解语义细微差别,处理差异性问法:即使问句非常类似,但语义存在差别,也需匹配到不同语义下的不同答案。
c.聚类高频问题,自动学习优化知识库:根据历史对话数据,通过聚类自动总结及挖掘不在知识库内的高频问句,补充和完善知识库。
目前问答型对话系统主要有以下几种设计方法:
基于语义分析的方法:此方法的思路就是来一个 Query 之后首先语义分析出逻辑表达式,然后根据 这个逻辑表达式去知识库中推理查询出答案,即使用知识图谱解决。这个方法的重点就在于语义分析。
基于信息抽取的方法:这种方法的思想就是来一个问题之后,首先是问题的各种分析,包括抽取关键词、关系词、焦点词以及问题的各种分类信息,然后从海量文档中检索出可能包含答案的文档段落,再在证据库中找到相关的证据支撑, 最后根据许多模型对结果排序找到最终的答案。
端对端的方法:这种方法是基于深度学习的模型,它首先将问题表征成一个向量(这个过程缺省略了问题分析步骤),然后将答案也表征成向量,最后计算这 两个向量的关联度,值越高那么就越可能是答案 。 它的核心就是在表征答案的时候如何把候选知识(无结构化段落或者结构化子图)表征进来。
然而一个真正的问答系统一般都是根据要解决的问题融合多种方法来处理。
1.2 多轮对话
单轮对话 | 多轮对话 |
---|---|
轮次和轮次之间独立,任意两句话之间相互独立 | 考虑话语之间的相互关系 |
执行一条指令所需的全部信息都在这一句话里 | 可以处理不完整的语义情况 |
没有记忆功能 | 记录历史话语 |
评估指标:任务完成率、定制难度。
多轮对话的难点:
a.准确进行语义理解:要有上下文的关联;支持中途打断回溯;支持指代[这]识别。
b.状态管理和个性化语言生成:用户画像管理(如针对不同地域的用户反馈不同的响应);对话状态管理(如:“请帮我订3月28日北京到上海的机票”->引导用户身份证信息、“请帮我订北京到上海的机票” -> 引导出发时间 & 身份证信息)。
2、意图识别
指识别提问者的潜在目的及表达诉求。
意图识别与预置行业知识库有关系:预置行业知识库越完善,机器人对用户的意图就能够识别的更加具体和准确。
在相同的意图大类下,还有可能会将更详细的意图进行分类,可以使用类脑图进行梳理。
例如:“请问你们发哪家快递” 和“请问我的快递走到哪了”都同样属于物流咨询意图,但从更细致分类来讲,“请问你们发哪家快递”属于咨询物流供应商选型的意图,而“请问我的快递走到哪儿了”属于查询物流状态的意图。
任务型对话需要意图识别,而问答型对话不需要意图识别。
意图识别难点:
a.用户输入不规范,且同一问题的不同用户的表达方式存在差异。例如,“请帮我订一张深沪高铁票”,这里的“深沪高铁”是否是和另一用户说的“深圳到上海的高铁”是同一个意思呢。
b.多意图判断,相同的词汇比如水,可能有多种意思,可能是喝的水,也可能是护肤品爽肤水。
c.数据冷启动,必须基于大量数据才能定义并获取准确意图。
d.没有固定评价标准,用户意图并没有量化测量指标,基本以人为主观判断为准。
3、对话模板
用来给对话系统按具体语法、句式做出的示范,教他在某一特定语法、句式中,该如何理解对话意图,哪个词是重要信息,对应的词槽,特征词是什么。
例如:通过对话样本标注告诉机器人“三亚明天会不会下雨”与“三亚明天会下雨吗”都是询问天气的语句,其中“三亚”是对应城市city这个词槽,“明日”和“明天”都是time词槽。这样的训练越多,机器人的理解能力便越强,这与学习语言中的人类孩童的学习方式十分相似。
例如:“[D:sys_loc][D:sys_time]天气如何”,上述标注表示可以将所有满足“[城市]+[时间]+天气如何”这一规则的query解析为WEATHERINFO对话意图。
对话模板也可以使用多条对话模板组成对话模板组,实现按片段去匹配用户query,实现更强的对话意图泛化匹配能力,提高模板对用户query的召回率。
网友评论