如何搭建一个AI对话系统?

不懂技术怎么做产品?15天在线学习,补齐产品经理必备技术知识,再也不被开发忽悠。了解一下>

AI客服可以说是现在AI应用得比较成熟的应用了,而AI客服只是AI对话系统里的一种类型而已,今天就来跟大家聊聊AI对话系统。

本文介绍的思路:

  • AI对话系统有哪些分类、主要技术和概念?
  • AI对话系统的主要工作流程是怎样的?
  • 实现一个AI对话系统的主要步骤有哪些?

一、AI对话系统的分类

对话系统主要分为3大类型:任务型、问答型、闲聊型。

(1)任务型

任务型是为了完成某特定的任务,比如说订机票,不仅需要应答用户,还需要去查询机票情况,和执行相应的动作。

(2)问答型

问答型主要是为了能解答用户的问题,相当于维基百科,比如说火车票怎么退票、坐飞机需要注意什么事项,通常仅需要回答问题,不需要执行任务。

(3)闲聊型

闲聊型主要是能聊下去就行,天马行空的聊都无所谓。

小结下3类型对话系统的特点:

  1. 任务型:有任务目标,需要把请求参数化。比如说定机票:帮我订一张明天深圳到北京的机票。意图:订机票;词槽:时间、出发地、目的地。(还不知道什么是意图和词槽没关系,后面会详细讲)因此参数化表达就是:帮我订一张【时间】从【出发地】到【目的地】的机票
  2. 问答型:有任务目标,但不需要把请求参数化。比如说:怎么办理火车票退票。机器只需要从知识库中找到跟这句话最相似的问题,然后把答案提供给用户就行。
  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协议。

给作者打赏,鼓励TA抓紧创作!
1人打赏
评论
欢迎留言讨论~!
圈子
关注微信公众号
大家都在问