干货篇|百度UNIT对话系统核心技术解析

2018 年 9 月 20 日 InfoQ

对话系统,本质上是通过机器学习和人工智能等技术让机器理解人的语言。它包含了诸多学科方法的融合使用,是人工智能领域的一个技术集中演练营。

9 月,InfoQ 与百度联合推出“ 从入门到实战 百度 UNIT 对话系统开发训练营”主题活动,百度 NLP 资深研发工程师姜文斌、百度 NLP 产品架构师田凯及百度 NLP 资深研发工程师孙叔琦联合出席三门线上课程,从 UNIT 对话系统的基本结构和功能入手,介绍 UNIT 核心模块和常用技术,以及 UNIT 平台底层机制,教你快速完成对话系统的搭建和应用。

错过直播的开发者可以从以下资料回顾干货内容:

1 对话系统的基本概念与原理

当前,人工智能时代的人机交互主要以人机对话为主。对话系统种类繁多,划分方式多种多样,可根据用途分为任务型、问答型、闲聊型对话系统;根据场景分为封闭域、开放域对话系统;还可根据使用方法分为检索式、生成式对话系统。下面我们重点看下任务型多轮对话系统

任务型人机对话系统

在对话过程中,机器人需执行的操作分为口语理解、对话管理、执行命令、语言生成四个过程。如下图所示对话系统的基本操作流程:

       

首先,对话系统需理解用户的自然语言请求,根据用户给出的查询输入先后经过口语理解、对话管理,然后决定进行语言生成还是指令执行,最后给出系统答复。其中,核心模块为口语理解和对话管理。

口语理解  

口语理解的功能为理解用户请求所包含的语义信息,用于信息查询或指令执行。其任务难点为自然语言的歧义性,表达方法的多样性及叙述风格的口语化。那么该如何攻破口语理解的任务难点呢?

可通过两种经典模式解决:基于语义解析的口语理解模式,基于语义匹配的口语理解模式。

基于语义解析的口语理解模式,是将用户请求解析为所包含语义信息的结构化表达。其中,最典型的结构化表达是意图(描述用户的核心诉求)+ 词槽(描述意图的关键信息)的模式。常用方法有基于知识规则的方法,基于机器学习的方法,基于融合策略的方法。

基于语义匹配的口语理解模式,不需要解析出具体的格式,而是需要寻找与其具有最高语义匹配程度的问答对。

对话管理

对话管理的功能为基于对话状态实施对话策略,从而实现多轮对话逻辑。其任务难点为状态计算的不确定性及不确定环境下的选择。基于此,对话管理也建立了两大核心任务:对话状态跟踪、对话策略选择。如下图为对话管理在整个对话流程中的位置,及状态位置和对话管理之间相互配合的关系。

       

对话状态跟踪,即根据对话历史计算当前对话状态,管理并更新对话历史。其常用方法为:基于人工规则的方法,基于机器学习的方法。通过建立影射,输入会话历史,然后输出当前对话状态。

对话策略选择,即根据当前对话状态,选择接下来最恰当的操作。其常用方法为:基于人工规则的方法,基于机器学习的方法,基于强化学习的方法。同样是通过建模影射的过程,输入当前对话状态,输出系统回复和指令执行。

系统构建与系统评估  
搭建流程

如下图所示为人机对话系统的构建过程,通过分析定义、知识编纂、系统搭建、构造应用、积累迭代的过程,构建人机对话系统。其中,知识编纂和系统搭建之间是交替进行的,基于已编纂的知识先搭建模型查看其效果,再反过来补充知识。另外,当模型搭建好之后,会进入积累迭代的过程,该过程可长时间持续收集用户数据,根据数据进行某种动画的或人工辅助的标注,从而产生数据回流回到知识编纂阶段,进一步丰富语料、模板、词典等,这是对话系统构建流程中规模较大的产品持续迭代阶段。

       

系统评估

评估方法分为两大类:

  1. 对单个系统的精度给出量化的指标数据,用于单个系统的精度评估

由于口语理解精度直接影响对话管理运行,进而影响对话系统效果,因此可以通过评估口语理解来评估对话系统。其中有三个指标:准确率(Precision),召回率(Recall),F 值(F-measure)

准确率 = 预测结果中正确的数量 / 预测结果中总的数量

召回率 = 预测结果中正确的数量 / 测试集中应该被识别的数量

2.   对两个系统的精度对比给出量化的指标数据,用于系统迭代时给出精度对比。

针对系统迭代需求,比较基线系统 X 和对比系统 Y 的优势。其中两个系统的定量对比涉及的指标:

  • Diff 面:同一条 query 解析结果不一致的情况在抽样集合中的占比

  • G(变好):针对同一条 query,Y 的结果比 X 好

  • S(相同):针对同一条 query,Y 的结果与 X 差不多

  • B(变差):针对同一条 query,Y 的结果比 X 差

如果 Y 要替换 X,至少 G>B;同时如果 Diff 面过大,需要考虑用户体验的波动。

2 如何使用 UNIT 搭建智能对话机器人

搭建对话系统是一个相对专业而复杂的过程,通常分三个主要的阶段。首先是需求分析,然后是使用平台搭建 BOT,最后是持续优化。

       

需求分析

第一阶段需求分析,这个阶段应该有产品经理或需求分析师这样的角色参与。

  • 首先要分析业务场景;

  • 然后进行对话机器人的功能定义;

  • 接着要梳理业务场景里的对话逻辑;

  • 最后要收集场景里的对话数据。

下面以订火车票的场景来讲解整个流程要做哪些工作。

业务场景分析:确定边界,明确目标

首先进行业务场景的分析,确定一个场景下机器人应该做什么,不应该做什么。

火车票场景,根据用户需求的轻重缓急判断,应该做订票、退票、改签、查询以及一些火车票相关的一些规章制度的常见问题解答。为了用户体验也可以做一些简单的问候和查天气的一些功能。而毫无目标的闲聊是不应该做的。

功能定义:确定优先级及关键信息要素

在确定边界和目标后,就可以对火车票对话机器人的功能进行定义了。

在功能定义的阶段,要先确定各功能的优先级,并确定每个功能对应的实体要素。火车票这个场景,可以认为订票、退票、改签、查询都是最高优的功能。

完成功能的定义后,接下来还需要对业务场景下的对话逻辑进行梳理,包括正常的对话逻辑和异常的对话逻辑。另外,关于问答型对话,其实都是用户对一些规则、规则制度的提问,这些问题都是标准、固定答案的。这类型的对话逻辑梳理其实就是要对问题进行分类,或者叫知识分类。

场景数据收集:在真实场景下用户会怎么问?

完成对话的逻辑梳理后,还要进行需求分析的最后一个环节的工作,就是数据收集。

针对任务型的对话,要收集真实场景下用户买票的各种问法,越多越好。而对问答型的对话,要根据前面的知识分类去收集每个分类下的问题与答案,即问答对。

在这个阶段收集的数据将在后面 BOT 搭建的第二个阶段使用。

搭建 BOT  

注册百度账号,打开(http://unit.baidu.com),进入 UNIT:   

1. 新建 BOT

在 UNIT 平台搭建对话机器人的第一步是先创建一个 BOT,只需要输入一个 BOT 名称,非常简单。

 2. 定义自定义技能:新建对话 / 问答意图

创建完后就进入技能定义的阶段,技能又分自定义技能和预置技能,每个技能都是由多个相关的意图组成,这个阶段的新建意图就对应需求分析阶段的功能定义。订票功能就可以转化为订票意图 BOOK_TICKET,订票的关键信息可以定义为实现订票意图的词槽,这里简单一些,把出发时间、出发站点、到达站点、车次定义为词槽:user_time、user_from、user_to、trainnumber。

具体操作步骤如下:

2.1  新建对话意图

点击【火车票】BOT,进入技能模块,在自定义技能中【新建对话意图】:


2.2  添加词槽

第一步是选择【添加方式】,选 「新建自定义词槽」,并设置词槽名(user_time)和词槽别名 (出发时间),

第二步先打开【系统词槽词典】的开关,然后选择系统词典 sys_time(时间)

  • UNIT 平台中词槽的识别依赖词槽对应的词典。支持自定义词典,也可以选择系统预置词典,建议在能选择系统词典的情况下尽量选择使用系统词典,当系统词典里没有你需要的类型时可以添加自定义词典。

第三步设置词槽与意图关联属性,这里火车票的出发时间是订票里必须的关键信息,所以选择必填。澄清话术就是当用户表达订票需求的语句里缺少出发时间时 bot 主动让用户澄清的话术。还可以设置让用户澄清多少轮后放弃要求澄清,默认是 3 次。

添加完所有词槽后如下图:


在词槽列表中可以调整词槽澄清的顺序。

2.3  设置 BOT 回应

BOT 回应就是当 BOT 识别出用户的意图和所有必填词槽值时给用户的反馈。

有三种回应方式:【答复】、【引导至对话意图】、【引导值问答意图】

2.4  新建问答意图

2.5   添加预置技能

完成自定义技能后,还可以加一个问候的预置技能。


而添加问候技能无须任何开发,只要在预置技能中选择添加即可。后续会陆续开放更多的预置技能。

3. 添加训练数据

完成 BOT 的技能定义后,进入搭建 BOT 的最重要的第二个环节,给 BOT 添加训练数据,这个阶段就是要给 BOT 提供 1 到 3 种学习数据,让其学习定义的技能。

3.1 配置对话模板

首先是配置对话模板,对话模板是对用户需求表达的一种规则抽象,配置好对话模板,可以快速识别不同表达方式的用户需求。

在 UNIT2.0 中,为对话模板更强大的用法,多个模板片段组成一个对话模板,每个模板片段都可以由词槽、特征词、特定文本单独或组合而成,而且多个模板片段可以是无序的,也可以是有序的。顺序设为 0 就表示这个模板片段可以出现在用户 query 中的任意位置。而非 0 的,必须按照数字顺序在 query 中出现。此外还可以设置一个模板片段是否必须在用户 query 中出现。


当我们有多个对话模板时,它们之间是有优先级的,在对话模板列表的上面的优先级要高于下面的,可以选中一条对话模板,然后执行上移、下移的操作来调整优先级。

3.2  标注对话样本

这部分要把需求分析最后一个阶段收集到的对话数据导入 UNIT 平台,然后给他们逐条标注意图、词槽。这部分数据可以用于后续的样本学习,让对话机器人获得更好的对话理解泛化能力。


然后在对话样本集中新建 『买火车票、查天气』样本集,把上面下载的两个对话样本文件导入:


机器学习一般对训练样本有数量的要求,几条几十条数据,基本训练不出什么泛化理解能力,而当你很难收集到大量的对话样本时怎么办?UNIT 平台提供了推荐对话样本的工具,只需要你收集 50 条真实场景的对话样本后就可以用它作为种子样本来推荐类似的样本,种子样本质量越高越好,它对推荐质量有直接影响。

3.3  添加问答对

在需求分析阶段就收集整理的问答对数据在问答集中导入即可


并不是每个场景都需要添加上面的三种训练数据,该如何选择?这要根据您自己场景中的对话类型和数据收集情况来定。

  • 假如你的场景是任务型的又缺少对话样本,这时你就可以先去配置对话模板,快速达到一定效果后再从日志中筛选更多的对话样本;

  • 假如你一开始就有对话样本,这时你可以对话模板、对话样本一起上,这样可以快速达到一个更好的效果;

  • 而如果你还有问答行的对话时,只要添加问答对就可以了,这个最简单。

3.4 训练模型

训练 bot 有两种方式,一种是指训练上面配置的对话模板,另外一种是训练对话样本同时训练对话模板。


系统默认必须训练对话模板,不论你有没有标注对话模板。如果这时如上图你在对话样本集里使用了默认选项『使用沙盒中的模型』,直接训练模型并生效到沙盒,会需要 15~30 秒的时间。


如果如上图在对话样本集选项中选择了『重新选择样本』且选中了有标注样本的样本集,则对应后端的训练讲采用深度机器学习的策略进行样本的训练学习,同时也会把标注的模板也融合进来一起训练。这时训练的速度会与标注的对话样本量成正比。这里需要注意的是一定要选择系统自带的「闲聊负例样本」,这样可以降低 BOT 的误召回情况,就是告诉 BOT 哪些 query 是闲聊而不是买票。

4. 测试体验

完成模型的训练后,就可以在测试窗口跟 BOT 聊一聊,看看它有没有学会你交给他的技能了:


3 UNIT 使用技巧与持续优化
准确理解领域问题
  • 任务型场景,该场景特点是有任务目标,需要把请求参数化,并且在多轮对话之间,参数还可以继承。

  • 问答型场景,该场景特点是有任务目标,不需要把请求参数化

  • 聊天型场景,该场景特点是没有任务目标

高效建设领域资源

高效建设词槽

首先看内置词槽与自定义词典、规则的关系

  • 自定义词典、规则的优先级高于系统内置,但是系统词槽如果包含了自定义词,会按系统词槽识别。

  • 自定义此点之间优先级相等,如果一个词属于多个词典,会相应的识别出多个词槽候选。因此,不必担心自定义词典之间的冲突与歧义,一切都有模板兜底。

  • 规则的形式是正则表达式,要注意控制通配的范围,善用捕捉功能加以限制。不加约束的通配,是 badcase 的重要来源。

那么该如何定义词槽以及如何高效地扩充系统内没有包含的词槽呢?

扩展法:针对每个词槽 / 特征词至少产出 3-5 个实例,可进行基于资源的扩展(树形结构、结构化信息、开放分类),基于相关度的扩展(上下文相似度、Word embedding),基于语料的扩展(Set expansion 算法)。

挖掘法:可在垂直网站爬取词槽,或者在离线知识库 Dump。

当然,也可采取挖掘 + 扩展的方法,先挖掘出词槽,随后再进行扩展。另外,质检工作很重要,当挖掘的量很大时,可以选择使用众包。、

自然语言理解配置
对话模板配置技巧:
  • 关键词可以抽象上下文的表达方式

  • 基于模板的意图推到,有队词槽进行消歧的能力

  • 善用模板片段,增强模板泛化能力

  • 模板的定义顺序决定了意图的解析顺序

 对话样本配置技巧:
  • 关于数据量:100 可训;1000 可用

  • 所有已标注样本都会进入 K-V 字典,K-V 字典保证样本一定会按标注的方式解析,当词槽识别出现不稳定时,注意看看样本

定期评估与优化

定期评估指定期随机业务日志,人工评估效果,其重点关注情况为以下几点:

  • 意图解析失败 / 错误、词槽缺失

  • 可能的原因:出现了之前没见过的说法,出现了当前不覆盖的词槽

  • 应对方案:新增模板,标注样本,扩展词槽

  • 词槽解析错误、归一化错误

  • 可能的原因:系统词槽 badcase,用户词槽出现了歧义,用户词典覆盖了系统词槽

  • 应对方案:向 UNIT 吐槽,调整词典 / 模板,少量 case 可以直接通过标注样本强制解决

  • 存在新需求不能满足

  • 应对方案:分析是否需要支持——是:新增技能;否:引导用户的功能预期。

关于百度 UNIT 对话系统更多解析及视频,可点击【阅读原文】查看 UNIT 对话系统初级教学课程,或扫描下方二维码,进入百度技术专区下载课程 PPT 深入了解。

登录查看更多
23

相关内容

专知会员服务
153+阅读 · 2020年4月21日
NLP基础任务:文本分类近年发展汇总,68页超详细解析
专知会员服务
57+阅读 · 2020年1月3日
【阿里技术干货】知识结构化在阿里小蜜中的应用
专知会员服务
96+阅读 · 2019年12月14日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
94+阅读 · 2019年12月4日
[综述]基于深度学习的开放领域对话系统研究综述
专知会员服务
78+阅读 · 2019年10月12日
基于RASA的task-orient对话系统解析(一)
AINLP
16+阅读 · 2019年8月27日
NLP实践:对话系统技术原理和应用
AI100
34+阅读 · 2019年3月20日
多轮对话之对话管理:Dialog Management
PaperWeekly
18+阅读 · 2018年1月15日
干货 | 如何在NLP领域干成第一件事?
AI科技评论
5+阅读 · 2017年12月27日
如何成为一名对话系统工程师
人工智能头条
9+阅读 · 2017年12月5日
史上最全!阿里智能人机交互的核心技术解析
阿里技术
4+阅读 · 2017年12月2日
最全面的百度NLP自然语言处理技术解析
未来产业促进会
13+阅读 · 2017年11月12日
Adversarial Mutual Information for Text Generation
Arxiv
13+阅读 · 2020年6月30日
Neural Response Generation with Meta-Words
Arxiv
6+阅读 · 2019年6月14日
Arxiv
6+阅读 · 2018年11月1日
Arxiv
26+阅读 · 2018年9月21日
VIP会员
相关VIP内容
专知会员服务
153+阅读 · 2020年4月21日
NLP基础任务:文本分类近年发展汇总,68页超详细解析
专知会员服务
57+阅读 · 2020年1月3日
【阿里技术干货】知识结构化在阿里小蜜中的应用
专知会员服务
96+阅读 · 2019年12月14日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
94+阅读 · 2019年12月4日
[综述]基于深度学习的开放领域对话系统研究综述
专知会员服务
78+阅读 · 2019年10月12日
相关资讯
基于RASA的task-orient对话系统解析(一)
AINLP
16+阅读 · 2019年8月27日
NLP实践:对话系统技术原理和应用
AI100
34+阅读 · 2019年3月20日
多轮对话之对话管理:Dialog Management
PaperWeekly
18+阅读 · 2018年1月15日
干货 | 如何在NLP领域干成第一件事?
AI科技评论
5+阅读 · 2017年12月27日
如何成为一名对话系统工程师
人工智能头条
9+阅读 · 2017年12月5日
史上最全!阿里智能人机交互的核心技术解析
阿里技术
4+阅读 · 2017年12月2日
最全面的百度NLP自然语言处理技术解析
未来产业促进会
13+阅读 · 2017年11月12日
Top
微信扫码咨询专知VIP会员