起点学院课程

以同程艺龙客服机器人为例,谈谈意图识别和对话管理建设

24 评论 8666 浏览 25 收藏 18 分钟
15天0基础极速入门数据分析,掌握一套数据分析流程和方法,学完就能写一份数据报告!了解一下>>

随着云计算、大数据、机器学习、深度学习等技术的不断发展进步,基于人工智能的智能客服机器人崭露头角。本文将以同程艺龙客服机器人为例,分析智能客服机器人的意图识别和对话管理建设。

所谓智能客服机器人,其实是一种使用自然语言与用户进行交流的人工智能信息系统,它采用包括自然语言理解、机器学习技术在内的多项智能人机交互技术,能够识别并理解用户以文字或语音形式提出的问题,通过语义分析理解用户意图,并以拟人化的方式与用户沟通,向用户提供信息咨询等相关服务。

智能客服是人机交互在客服领域的一个应用,本文将和大家简单分享下同程艺龙智能客服机器人在意图识别以及对话管理建设过程中的一点心得体会。

同程艺龙智能客服目前分为单轮问答的QA Bot和多轮对话的Task Bot,一般多轮对话的智能客服系统会切分为以下几个模块:客人的问题Q,进来后首先经过NLU模块抽象化为客人的意图(intent)以及关键信息槽位(slot),意图及槽位传给DM模块后,经过DST、DPL、NLG模块返回答案。

目前的智能客服会话的核心是进行用户意图匹配,只有明确了意图,才能给出针对性的回答,所以下面简单和大家分享下意图识别的一般性原理。

一、关于意图识别的实践

对于智能客服机器人而言,意图识别就是判断用户咨询的问题是什么?用户想表达的是什么意思?

例如:

这张机票我不要了-退票

我的火车票出票了没-催出票

我要预订明天的机票-帮下单

一般会使用下面几种方式进行提取

1. 基于命名实体提取和词库

例如我的订单出票了没,使用HanLp 自然语言处理工具包, 会抽取以下2个词语 订单、出票,根据停用词词典去除掉订单,然后根据出票到词库中进行匹配对应的分类,找到对应意图催出票。对于复杂的句子,可以统计词频,根据频率最高的找到对应的分类意图。

使用这种方式优点是操作方便,用搜索的方式很快找出对应的意图。但缺点也很明显,比如这个订单还没出票,没出票不要了,意图是退票,很明显提取出来的是错误。识别的准确率相对来说不高,所以此种方式一般作为机器学习意图槽位数据提取。

2. 基于模板的匹配

查询非常符合规则的类别,通过规则解析的方式来获取查询的意图。 帮我预订明天的苏州到北京的机票,可以使用规则模板,进行如下提取 [苏州]到[北京][明天][机票]。

这种方式需要借助命名实体提取,词性标准,语义分析才能完成,对于规则性比较强的咨询有较好的准确率。但此种方式对于研发和训练师需要做大量的工作,较难进行扩展。

3. 基于机器学习

1)逻辑回归

意图识别在机器学习中的分类问题,也就是使用逻辑回归进行分类。在使用逻辑回归之前,首先要对词语进行分词,向量化。 分词可以比较各个分词的效果,最常用是jieba分词。支持配置专业名词及停用词。分词完成后,需要将词与进行向量化。

一般有2种方式,一种是使用One-Hot编码,这种方式一般针对专业性比较强的领域使用,另一种是word2vec,这种编码方式可以很好的标识词之间的关系。

one-hot编码一半般将所有词行列进行排列,相同的地方记做1,比如分词完成后,按照词频排序结果如下:

那么[订单,出票,取消]得到的词向量为[[1,0,0],[0,1,0],[0,0,1]] 假如一个句子是这个订单还没出票,没出票不要了,订单出现一次,出票出现2次,这个句子最终的向量为

使用word2vec得到的结果类似。

针对意图识别,一般是多类分类。但多分类问题是从二分类问题进行扩展。

2)二元分类

对于二分问题,在对于未知概率分布条件下,一般假设为正态分布(高斯分布),多维高斯分布如下,也是多个高斯分布相乘得到的结果。

带入贝叶斯公式,最终得到是关于w,b的函数,也是sigmod函数。

对于数据量较少的分类,可以使用生成模型(Generative Model),计算p(c1),p(c2)和各个分类样本数据的均值mean和共用协方差矩阵Σ,即可得到w,b,对于任意输入x

代表数据分类属于c1​,否则属于c2​。由于是二元分类,不必单独计算p(c2|x)。

但针对数据量较多的情况,一般使用判别模型(Discriminative Model), 针对二分类问题,根据最大拟然估算,Loss函数为

所有就是要找到w,b,使得

为了计算方便,将公式取对数

由于和的概率表达式不统一,上面的式子无法写成统一的形式,为了统一格式,这里将所有Training data都打上0和1的标签, y = 1代表​c1, y= 0代表​c2,于是上式进一步改写成:

这个形式其实就是两个分布的交叉熵,表示个概率分布有多接近。

下面就是对这个loss函数使用梯度下降求解最小值,对w,b微分最终得到每次更新的梯度,最终得到w,b,带入sigmod函数即可得到结果。

另外,一般情况下判别模型比生成模型要高。

以上二元分类的情况,对于多元分类问题,其原理的推导过程与二元分类基本一致。

3)多分类

假设我们用的是高斯分布,共用协方差矩阵,经过一般推导,也就是各种变换后,可以得到一个softmax函数。

假设有三个分类:c1,c2,c3 ​,每一个c都有自己的w,b,w1,w2,w3 ​分布代表三个向量, ​b1,b2,b3分别代表三个常量,输入x也是一个向量。

用softmax进行输出正则化。softmax计算方式如下:

可以是任何值,但是做完softmax之后,输出的值一定是介于0~1之间,并且它们的和一定是1。
多分类任务中输出的是目标属于每个类别的概率,所有类别概率的和为1,其中概率最大的类别就是目标所属的分类。

即二分类使用sigmod函数输出得到结果,而多分类使用softmax得到结果。

如下图所示,输入x经过三个式子分别生成,经过softmax转化成输出,它们分别是这三个 分类的概率,由于sum=1,因此做完softmax之后就可以把y的分布当做是一个概率分布。

我们在训练的时候还需要有一个输出,因为是三个分类,所以对应的输出也是三维的。为了满足交叉熵的条件,输出也必须是概率分布,这里我们不能使用1,2,3作为分类的区分,为了保证所有分类之间的关系是一样的,这里使用类似于one-hot编码的方式。

和二元分类求解一样,利用交叉熵,最终通过微分得到最优​w1,w2,w3 ​。

4. 基于神经网络

对于输入参数比较复杂的情况,例如输入的可能是一个100*100的矩阵,这个时候就需要对数据进行处理,或者输入的特征无法在数据源上进行数据处理,就需要在逻辑回归之前再接上一个逻辑回归,对数据源做处理。

多个逻辑回归就构成了一个类神经网络,也就是深度学习,如(CNN,LTSM)。

对于分类问题,深度学习的最后输出函数也就是sigmod或者softmax函数。

通过上一次的语义抽取和意图识别,对话会进入后续对话树模块。根据前一模块抽取数据和用户本身数据,将数据填充到对话树的对应部分,对话数节点也可以根据条件拉取其他数据,最终这些数据都会在当前会话中保存。可以根据用户问题,如果条件满足,通过NLG模块生成对应话术返回。

最终一次用户会话的完整的流程

5. 应用与实践

同程艺龙智能酒店订单咨询问题,目前使用交叉熵和L-GFGS算法训练得到的意图,初步打样上线后,准确率在93%左右。

二、对话管理平台的搭建

上文我们提到了智能客服相关的核心技术,除此之外,我们还希望有一套比较完整的对话管理系统解决方案,并期望它:

更灵活:可灵活支持以上不同形态,不同业务,不同的运营人员使用。

更易用:运营团队可以自主训练自己的机器人和定义对话流程。

同程艺龙对话管理平台:

面向于同程艺龙和外部租户的公共对话管理支持系统,包括机器人训练,对话流程配置功能(词槽和意图的配置、对话条件和执行动作的配置)、以及相关的数据报表和机器人自学习优化等功能。

1. 多租户管理

考虑内外部的不同需求,平台采用SAAS的租户管理方式,将不同业务之间分离解耦。租户下支持创建多业务线和系统角色、成员等。

2. 可视化任务场景搭建

我们将对话交互抽象和总结为条件判断(Entry),信息收集 (SlotFilling),响应回复(Response)等一系列元素模块。支持运营人员在平台上利用这些元素,快速自由组合配置对话流。

业务系统可以通过系统公共API接入全局变量,并将这些变量运用到对话流配置中。同时也也可以使用系统预置的条件参数,或对话中已收集到的信息来完善任务场景。

例如:【定机票】场景下,首先要判断是否已存在未支付的冲突订单,业务系统可以接入全局变量 [查询订单] [订单状态],在该判断节点选择使用。

在决策树中添加信息收集节点(SlotFilling),配置多轮对话参数和澄清话术,来完成复杂场景和多伦对话。系统预置了常用通用实体供选择,如时间,城市等;支持自行扩写专用实体类型用来补充与业务强相关的行业专用实体,如航司,水果等;

例如:【定机票】场景中,如不存在冲突订单,需要确认买票的信息:定义 [出发时间] [出发地] [目的地] 3个槽位,和澄清话术,系统将按流程完成填槽信息收集。

3. 响应类型

任务执行响应结果包含文本响应,自定义类响应(提交数据或完成某项任务),跳转(跳转其他场景/节点)等多种形式。

例如:【定机票】场景下,通过文本回复确认客户购买需求后,可以通过[提交订单][发送支付链接]代替客户提交订单并发送支付链接完成下单流程。

在整体上,智能客服业务和技术的部分是解耦的。业务相关信息的设定和操作都是通过智能客服平台,包括不同业务线的意图和词槽的设定、答案配置、数据审核、测试、标注等。新建一条业务线的智能客服应用,只需要在平台上新建项目,输入设定的意图、对应的语料、必要的槽位和对应的答案。

此外,平台上的答案配置也很灵活,可以是固定回答,可以是知识图谱的schema,可以是外部的接口,或是随不同词槽设定的回复等等。

三、写在最后

以上是同程艺龙智能客服产品技术推进过程中的一点点心得分享,未来智能客服将往多模态和多语言方向发展,支持语音、图像等模态的解析。智能客服还将提供智能外呼、主动服务、人机协同、等多维度服务,未来将实现从售前到售后、从服务到产品的全业务以及全服务流程的智能化,构建服务行业的全智能模式。

 

本文由 @Candy 原创发布于人人都是产品经理。未经许可,禁止转载

题图来自Unsplash,基于CC0协议

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
起点学院课程
评论
评论请登录
  1. 你在同程艺龙吗

    回复
  2. 很多干货,学习到了

    回复
  3. 干货挺多。不错

    回复
  4. 不错不错 深度好文

    回复
  5. ZY的?

    回复
  6. 专业性术语较多,技术性较为出彩,不过个人感觉还是应该更偏业务侧一些

    回复
    1. 感谢您的建议,后续分享一些产品推进上的心得体会,大家一起交流学习

      回复
  7. 😉

    回复
  8. 大佬太谦虚了, 亿点点心得。

    回复
  9. 求教,AI产品经理需要对上述算法和建模(类似高斯、贝叶斯等)有很深的理解吗?

    回复
    1. 从事NLP领域相关产品是需要了解一些算法知识,当然没有必要一味追求最新的算法,找到适合自己的算法才最重要。

      回复
  10. 好多干货

    回复
  11. 👍👍👍👍👍👍👍👍👍

    回复
  12. 👍

    回复
  13. 😉 虽然看不懂,但是觉得很厉害

    回复
    1. 同感

      回复
    2. 同感

      回复
    3. 很好

      回复
    4. 同感

      回复
  14. 意图识别 、 机器学习,值得关注

    回复
    1. 很好

      回复
    2. 不错

      回复
  15. 干货很多!

    回复
  16. 挺不错,值得收藏

    回复