如何搭建一个AI对话系统?
AI客服可以说是现在AI应用得比较成熟的应用了,而AI客服只是AI对话系统里的一种类型而已,今天就来跟大家聊聊AI对话系统。
本文介绍的思路:
- AI对话系统有哪些分类、主要技术和概念?
- AI对话系统的主要工作流程是怎样的?
- 实现一个AI对话系统的主要步骤有哪些?
一、AI对话系统的分类
对话系统主要分为3大类型:任务型、问答型、闲聊型。
(1)任务型
任务型是为了完成某特定的任务,比如说订机票,不仅需要应答用户,还需要去查询机票情况,和执行相应的动作。
(2)问答型
问答型主要是为了能解答用户的问题,相当于维基百科,比如说火车票怎么退票、坐飞机需要注意什么事项,通常仅需要回答问题,不需要执行任务。
(3)闲聊型
闲聊型主要是能聊下去就行,天马行空的聊都无所谓。
小结下3类型对话系统的特点:
- 任务型: 有任务目标,需要把请求参数化。比如说定机票:帮我订一张明天深圳到北京的机票。意图:订机票;词槽:时间、出发地、目的地。(还不知道什么是意图和词槽没关系,后面会详细讲)因此参数化表达就是:帮我订一张【时间】从【出发地】到【目的地】的机票
- 问答型: 有任务目标,但不需要把请求参数化。比如说:怎么办理火车票退票。机器只需要从知识库中找到跟这句话最相似的问题,然后把答案提供给用户就行。
- 闲聊型: 是开放的,没有任务,也没有限定的回答。
当然有时一个对话系统不只是包含单一的类型,可能是多种类型组合在一起的。
二、单轮对话和多伦对话
1. 单轮对话
单轮对话的主要特点:一问一答,不依赖上下文,一般从知识库里检索问题答案,在问答型和闲聊型系统比较常见。
评判单轮对话好坏通常有3个指标:召回率、准确率、问题解决率。
(1)召回率
这里需要注意的是,机器回答了回答了多少问题,但是回答的不一定是正确的,因此就会有下面准确率的指标。
(2)准确率
对于闲聊型的机器人来说,准确率不是它的指标,因为也很难有标准哪些是正确的,哪些是错误的。
但是对于任务型和问答型机器人,这个指标就非常关键,因为我们宁愿机器不回答,也不要它给一个错误的答案。
(3)问题解决率
成功解决的问题数=(总的提问数 – 转人工客服的问题数 – 客户不满意的问题数)
单轮对话主要的难点有哪些呢?
语义理解的细微差异
我们日常口语非常的多样,而且很难标准化,可能相似的句子,语义完全不一样,机器理解这样的语句是非常困难的。
自动学习优化知识库
人工去补充知识库是工作量非常大的事情,而且能做的非常有限,因此还是需要机器自主学习优化,根据历史对话,补充和完善知识库。
如上图,机器一开始不知道“詹皇”是什么意思,那经过对话后,机器就学会了“詹皇”就是“詹姆斯”。
2. 多轮对话
多轮对话的主要特点:多轮问答,上下文关联,需要记忆的能力,在任务型系统中比较常见。
比如说一个订票的任务,机器人需要获取必要的三个信息:时间、出发地、目的地,在没有获取到这3个完整的信息前,机器都会继续的跟用户进行沟通确认。
多轮对话的主要难点有哪些呢?
信息自动补充:
特别是在任务型的对话中,不是所有的信息都是从跟用户的对话中获取的,而是大多数的信息都是基于用户的身份和所处的场景获取的。
比如说:订机票,我们需要用户的身份信息,但可能不需要在对话中问用户,而是之前可能就有记录。比如说出发地,机器可以根据定位获取,而不需要问用户。
中途打断回溯:
如上图,订机票的任务被打断后,去做了个订外卖的任务,然后回来用户说“订明天上午11点的机票”,这个时候机器人需要记住之前用户所说的出发地和目的地,而不是重新问用户。
指代识别:
如上图,用户说“第二个吧”,机器需要知道用户指的是“10:30,东方航空公司”
三、对话理解
在对话系统中,实现对话理解的方式通常有两种:语义解析、语义匹配。
下图就是我们本章主要讨论的内容:
1. 语义解析
在讲语义解析之前,我们先来讲一个概念“意图”。
意图是指用户潜在的目的或表达的诉求, 假设用户说:帮我订一张深圳到北京的机票,那意图就是:订机票。
因此机器识别到用户的订机票的意图之后,马上就转入到了订机票的任务中。
那订机票需要必备那些信息呢?时间、出发地、目的地是必填。
这里又引入了另外一个概念“词槽”。词槽分为必填槽和非必填槽,我们把用户说的话,按一定的规则填到相应的词槽里,只有把必填的词槽填完了,才会执行意图的相关指令。
也就是说机器人先要识别用户的意图,然后根据要达到这个意图需要获取哪些信息来询问用户,直到获取完所有必备的信息。
介绍完意图和词槽后,我们继续回来讨论语义解析。
语义解析:把语句解析为结构化的语义表示。 语义解析通常又分为三种实现方式:语义模式、传统的机器学习、深度神经网络。
语义模式(基于意图和词槽识别):
人工定义语义模式,用以解析用户输入的语句。
识别意图:根据语句识别用户的意图。
检测词槽:检测词槽关键信息。
传统机器学习模式:
通过建模为序列标注或分类问题,解析用户输入的语句。
通过分类问题获得输入语句的意图;通过序列标注识别输入语句的词槽。
把语句输入到机器学习系统之后,会输出属于各种意图的概率,然后确定意图,标注各词槽的类型。
深度神经网络模式:
基于深度神经网络的模式可同时实现意图和词槽的识别,但需要海量的数据去训练。
三种模式的优劣势:
2. 语义匹配
通过语义相似度计算匹配最接近的实例,来理解用户输入的语句。
首先将输入语句表示为便于匹配的语义形式;然后计算输入语句和数据库中语句的相似度;相似度最高的就是最匹配的语句。
四、对话系统的工作流程
前面我们已经介绍完了对话系统的类型、关键概念和技术,我们把前面介绍的内容串联起来,就是这一章要讲的话系统的主要工作流程。
1. 主要工作流程
用户输入语句:比如说“帮我预定从深圳到北京的车票”。
对话的理解:理解的实现方式有语义解析和语义匹配。
对话管理:因为可能不是一次的问答就能解决问题了,比如说用户输入的语句中只有出发地和目的地,还没有提到时间,因此机器还要去问用户出发时间;比如说我们前面提到的用户在订机票的任务中,突然转到了订外卖,然后再回来订机票,因此机器要学会管理前面未完成的任务。
资源检索与任务执行:机器回答问题和执行动作需要跟外部的资源连接,比如说订机票,需要到机票系统去查询航班和余票情况,最后还要执行订票的动作。
外部知识服务:指的就是机器完成任务所需要的外部资源。
2. 理解和回应
从另外一个维度,对话系统又可以分为两大块: 如何理解、如何应答。
如何理解?主要有两种方式:语义解析、语义匹配(前面已经讲过就不再重复了)。
如何应答?应答才是交流中最直观的表现方式,能不能更加接近人的交流方式,就需要在应答上表现了。应答主要又分为:词槽澄清、回复、引导。
词槽澄清:
假设用户问:詹皇今天得了多少分?
机器人听不懂“詹皇”是谁,它就会问:詹皇是谁?。这就是词槽澄清。
回复:
即机器理解了用户意图之后的答复。但这里需要注意的是,触发这个答复的条件是什么?比如说订机票就需要知道时间、出发地和目的地这3个条件。回复话术又是怎样的?可爱点的回复,还是严肃点的回复,或者是要二次确认等等。
引导:
引导是指完成了当前的任务之后,机器人可以引导用户做其他的事情。比如说订完机票,机器人可以问,需要给你订酒店吗?这样是不是显的更加的接近人的交流了。
当然引导也需要主要几个点:
- 什么时候才会触发引导?当前任务执行完还是怎样。
- 引导做什么?是引导去订酒店还是引导去订外卖?
- 引导的话术是什么?我还可以为你订酒店、你需要订酒店吗。
五、实现一个对话系统的主要步骤
下面以一个订机票对话系统为例,串联实现一个对话系统的整体步骤。
1. 定义对话系统
确定场景和边界,目标是什么,需要哪些功能,需要哪些信息和资源,还有确定不做什么。
订机票对话系统的定义:
2. 富集数据资源
所需信息资源:
穷举完成这个系统所需要的信息和字段。
词槽词典:
设置词槽的属性,必填或非必填,列举所有词槽的词典。
从上图我们列举了一些订机票的词槽:日期、出发地、目的地、特征词等。
词典是什么呢?词典就是词槽下所有有可能的槽值,比如出发地词槽的词典就是所有的城市。
语料:
收集尽可能多的语料,语料越多,系统效果越好。
下面就以请求预定机票的为例,列举了一下语料。
3. 写故事线
我们先写一条愉悦的故事线,中途没有异常的情况。
然后再在各个环节补充异常情况,比如说:
- 听不清用户的话,需要澄清;
- 中途用户转换了其他任务,需要记忆相应的信息;
- 用户突然改变行程,比如说:不了,还是帮我订后天的机票;
- 等等各种异常情况的处理方案。
4. 抽取对话流程
根据故事线,抽取出主要的对话流程。
当然,这只是愉悦路径的流程,你还可以根据出现异常情况,不断的加入各种分支,完成整个流程。
5. 开发/训练调优
在前面定义好系统,收集完所需信息和资源,确定好对话流程后,接下来就可以进入开发了。
当然如果你没有这么强大的开发能力,现在也有一些开放的平台可以快速的实现你的对话系统。比如说百度的UNIT开放平台,讯飞的AIUI开放平台等,都支持快速的实现你的对话系统,可以去体验一下。
开发完之后,就开始用数据去训练,不断调优,完善你的系统。
5. 上线后不断优化迭代
优化其实是一个持续的过程,上线后我们需要根据用户的反馈或日志的分析,找出问题不断优化。
对话系统常见的优化思路:
- 找出机器识别错误的意图,分析错误的原因;
- 找出机器没有覆盖的意图,分析是否属于定义的功能范围内,若是则后续需要添加;
- 对于高频使用的意图,不断完善体验;等等。
本文主要是参考了百度云智学院的教学内容。
本文由 @Jimmy 原创发布于人人都是产品经理。未经许可,禁止转载。
题图来自Unsplash,基于CC0协议。
作者暂无likerid, 赞赏暂由本网站代持,当作者有likerid后会全部转账给作者(我们会尽力而为)。Tips: Until now, everytime you want to store your article, we will help you store it in Filecoin network. In the future, you can store it in Filecoin network using your own filecoin.
Support author:
Author's Filecoin address:
Or you can use Likecoin to support author: