【提升篇】UNIT2.0--火车票场景实例教程
tiancorn 发布于2018-07-08 02:17 浏览:28755 回复:69
20
收藏
最后编辑于2019-05-23

1 UNIT2.0基本概念
https://ai.baidu.com/docs#/UNIT-v2-intro/top

 

2 搭建对话技能的总体流程


总共分为3大阶段,1是需求分析,2是使用平台搭建最小可用的对话技能,3是持续的优化。第1阶段 需求分析,这个阶段应该有产品经理或需求分析师这样的角色参与,首先要分析业务场景,然后进行对话技能的功能定义,接着要梳理业务场景里的对话逻辑,最后要收集场景里的对话数据。

完成第1阶段后即可进入UNIT平台来搭建对话技能,首先要进行技能定义:定义意图和词槽,然后要针对这些意图提供训练数据,接着去训练模型,教会它我们定义的那些意图。最后就可以进行对话测试了。完成第二阶段后,我们就需要进入一个周期性的循环的 持续优化阶段,在这个阶段须要我们不停的对技能的对话理解效果进行评估,然后优化训练数据,当对话理解效果达到一定水平后,就可以把这个对话技能集成到产品中提供给用户使用了。在使用一段时间后可以收集到大量的用户对话日志和用户反馈,这时我们又可以进行优化。本文中主要介绍前两个阶段工作,帮助大家快速入门。第三个阶段的工作我们在单独的文章中做详细的介绍。

3 需求分析
下面以订火车票这样的场景来讲解整个流程,先说需求分析阶段要做的工作

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


首先我们进行业务场景的分析,确定一个场景下应该做什么,不应该做什么。火车票这个场景,根据用户需求的轻重缓急判断,应该做 订票、退票、改签、查询以及一些火车票相关的一些规章制度的常见问题解答。为了用户体验也可以做一些简单的问候和查天气的一些功能。而毫无目标的闲聊是不应该做的。接下来我们还要看看 业务场景下的对话都是什么类型的?任务型的对话 都有明确的目标,这个目标其实就是用户的意图,同时也会有一些关键信息需要参数化,就是需要把满足用户意图的关键信息参数化为词槽。火车票场景下 订票、退票的对话都是任务型的。再说问答型,它也有明确的任务目标,但这类型的对话不需要把用户问话中的信息参数化,因为这类型的用户问题基本都是针对一些规则、规章制度的提问,都有固定、明确的答案,不需要再用词槽去做进一步判断处理。比如,退票怎么扣费。最后一种闲聊型的对话,其实就是随便的聊聊天,没有任何任务目标。如果把这类型的对话加入到对话机器人中 就会对任务型的对话理解造成一些干扰,影响任务目标的达成,所以不应该做。

3.2 功能定义:确定优先级及关键信息要素
那么在确定边界和目标后,我们就可以对火车票对话机器人的功能进行定义了。

在功能定义的阶段,我们要先确定各功能的优先级,并确定每个功能对应的实体要素。火车票这个场景,我们认为订票、退票、改签、查询都是最高优的功能。建议大家使用MVP原则 先完成一个最小化可行的产品,比如我们就先完成一个只有订票功能的对话机器人,那就要分析要完成订票 需要哪些实体要素, 出发时间、出发站点、到达站点这三个是必须的,还可能需要火车类型、车次、座位类型,同时要完成一个能真实落地的订火车票机器人,其实还需要你自己的业务系统完成个人信息、账户信息、票务状态的管理与业务逻辑的处理。UNIT平台将主要为你完成用户订票需求的精确理解。

完成功能的定义后,我们接下来还需要对业务场景下的对话逻辑进行梳理

3.3 对话逻辑梳理:任务型对话的常规与异常情况、问答型的知识分类


我们要先看订火车票的正常对话逻辑,一般都是用户提出订票需求,当缺少订票的必须信息时火车票技能应该像售票员一样,让你补充这些缺失的信息,补充完成后就可以根据订票的信息到火车票系统中查询到合适的车票让用户确定,用户确定支付后,就完成了订票的流程。

完成正常对话逻辑的梳理,我们还要看一些异常的对话逻辑。

比如,当火车票技能已经完成用户订票所有信息的收集并给出可订车票时 用户又突然提出要变更相关信息,比如把出发时间从周五中午换成周六早上,这时我们的火车票技能也要像真人售票员一样能理解这种需求的变更,并根据用户的最新信息查询出新的可订车票。

这样的对话逻辑梳理可以帮助我们后续更合理地定义技能。

完成任务型的对话逻辑梳理后,我们还要对看看问答型的对话逻辑

前面我们说问答型对话 其实都是用户对一些规则、规则制度的提问,这些问题都是标准、固定答案的。这类型的对话逻辑梳理其实就是要对问题进行分类,或者叫知识分类。比如我们把火车票相关的问题分类为儿童票问题、学生票问题、行李托运问题、退票问题等。

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

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


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

在这个阶段收集的数据将在后面技能搭建的第二个阶段使用,其实他们就是教会机器人对话理解技能的材料,越多越好。关于这些材料收集的技巧在《UNIT 使用技巧与持续优化 https://pan.baidu.com/s/1gyQXvExLka5yjdZr3tUziA 》中会有详细的介绍,在此就不展开了。

好了,到目前为止,我们需求分析第一大阶段的工作就完成了,接下来我们进入UNIT快速搭建订票机器人的阶段。

4 搭建对话技能

-------可拷贝或选择下面红色的文字 在UNIT里一步一步配置出火车票技能-------
注册百度账号,打开http://unit.baidu.com ,进入UNIT-->「我的技能」

 

4.1 新建技能


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

技能名称火车票

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


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

具体操作步骤:

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

意图名称BOOK_TICKET

意图别名订票

4.2.2  添加词槽

添加四个词槽:

1、词槽名:user_time别名出发时间,词典:系统词典——sys_time(时间)必填

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

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

  • UNIT平台中词槽的识别依赖词槽对应的词典。支持自定义词典,也可以选择系统预置词典,我们建议在能选择系统词典的情况下尽量选择使用系统词典(详见:http://ai.baidu.com/forum/topic/show/869949 ),当系统词典里没有你需要的类型时可以添加自定义词典。

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

按照上面的步骤完成下面3个词槽的配置

2、词槽名:user_from,别名:出发站点,词典:系统词典——sys_loc(地点)必填

3、词槽名:user_to,别名:到达站点,词典:系统词典——sys_loc(地点)必填

4、词槽名:user_trainnumber,别名:车次,词典:系统词典——sys_train_num(火车车次)非必填

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

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

4.2.3  设置对话回应


对话回应就是当技能模型识别出用户的意图和所有必填词槽值 时给用户的反馈。

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

这里我们以【答复】为例,设置答复文本内容为:"为您找到的车次和座位信息如下,确认下单吗?" ,

触发规则 我们选择智能生成,但因为词槽 user_trainnumber是非必填词槽,这里可以删掉,如下图,点击user_trainnumber 对应规则后面的叉号 删除:

最终保存意图

  • 注意点:实际落地的时候这里其实需要你在自己的业务代码里判断当前技能解析的用户意图为订票,且用户提供了出发时间、出发站点、到达站点,这时你用这三个词槽值去火车票系统中找出符合条件的火车票,并生成一个火车票list返回给用户,供用户选择,并完成支付。
  • 引导值对话意图:是当前对话满足一定条件时把当前意图到另一个对话意图,让用户进入另一个意图的对话中。
  • 引导至问答意图:是当前对话满足一定条件时把当前意图到另一个问答意图,让用户直接在目标问答意图下提问并获取答案。

4.2.4  新建问答意图


针对前期分析问答型对话的退票问题 定义一个问答意图 FAQ_REFUND,意图别名:问退款问题

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

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

4.4   添加训练数据
完成技能定义后,我们进入搭建技能的最重要的第2个环节,给技能添加训练数据,这个阶段就是要提供1到3种学习数据,让其学习我们定义的功能(意图、词槽的识别)。

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

比如,订一下北京到上海的火车票,多谢了,我们就首先可以从中提取出订票意图的词槽表达。

接着我们还可以抽象出一些特征词,比如把我需要、我要定 都抽象为表达预订的特征词kw_booking,把到、去、往、回归纳为kw_to特征词,这些特征词在新建模板前就可以新建好,并添加好尽量多的词典值,这样能让一条模板可以覆盖尽量多的用户query。而有些即不能归纳为词槽,也不能归纳为特征词,但又经常可能在用户的一句话里出现的,可以用通配符去表达。比如这句话里的多谢了,就可以用通配来表达。

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

看这个对话模板,有5个模板片段, 按照顺序的意思就是 什么时间要订从哪到哪的票,这里出发时间的顺序设为0,表示出发时间可以在用户query中的任何位置,而下面的要定从哪到哪的票 这是固定顺序的。当然用户的一句话里不一定说的这么全,只要有 我要定、火车票 这样的特征词就能确定用户是要订票的意图了——必须匹配设为”是”。其他的信息都可以在后续的对话中让用户去澄清补充的。

最后大家还要了解的一个概念是阈值,它是说当前模板配置的词槽、特征词 占用户query的长度比例,当只有这个比例达到这个阈值的时候,我们才会判定用户的query就是这个模板所表示的意图。大家会需要经常调整这个阈值,调的太低,可能会造成很多误召回,太高可能会导致召回率很低。

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

这里我们定义了四个特征词:kw_booking、kw_to、kw_ticket、kw_seattype

kw_booking,描述:订、买,我要买

词典值:

预订



订购

我要
我需要
我要定
帮我订
订一下
定一下
我要定
帮我定

kw_to,描述:到、去、回、往

词典值:





kw_ticket描述:票、火车票

词典值:


火车票
高铁
高铁票
动车
动车票
城际
城际火车票
城际高铁票
直达
直达火车票
直达列车
直达火车
特快
特快火车票
特快票
快车
快车票
临时
临时火车票
普通火车票 

kw_seattype描述:硬卧、软卧、一等座、二等座

词典值:

特等座
商务座
一等座
二等座
高级软卧
卧铺
软卧
硬卧
软座
硬座
无座 

定义完特征词后下载 对话模板的文件(该文件是我在系统配置好的对话模板导出的文件)(链接:https://pan.baidu.com/s/19OfZR34lzgt0B96HenQwiA  密码:9arz)

再导入系统:

这里大家可以尝试自己按照上面的介绍新建对话模式 试试,导入的对话模板也可以编辑看看结构。

关于对话模板的更多技巧说明可 下载文档进一步学习了解:https://pan.baidu.com/s/1j6cx9HPuRav1tvOToW2mEA

4.4.2  标注对话样本

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

本示例中的对话样本 可下载文件(链接:https://pan.baidu.com/s/19OfZR34lzgt0B96HenQwiA  密码:9arz)在【对话样本】页面直接导入:

然后在对话样本集中新建 『买火车票、查天气』样本集,把上面下载的两个对话样本文件(这两个文件是我之前标注好从系统中导出的)导入:

 

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

4.4.3  添加问答对
在需求分析阶段就收集整理的问答对数据,这里我们把退款相关的问答对在问答集中导入即可

本示例中的问答对数据文件 可下载(链接:https://pan.baidu.com/s/19OfZR34lzgt0B96HenQwiA  密码:9arz)在【问答集:FAQ_REFUND】中导入:

 

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

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

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

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

4.5 训练模型


训练技能需要:1、选训练数据;2、选训练策略,一种是快速生效,一种是深度训练

系统默认必须训练对话模板,不论你有没有标注对话模板

如上图,选择快速生效会把对话模板和选择的对话样本、问答集使用基于知识规则、基于样本实例的训练策略进行快速训练,一般会需要15~1分钟(对话样本如果比较多的话会约慢一些)。

如果选择了深度训练,则会把上面选的数据,除了使用快速训练的策略训练之外 还会对所选数据进行融合、加工处理后进行深度机器学习训练,训练时长会与标注的对话样本量成正比。

这里需要注意的是一定要选择系统自带的「闲聊」负例样本,这样可以降低技能模型的误召回情况,就是告诉模型哪些query是闲聊而不是买票的。

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

本入门教程到此结束,该教程中的火车票BOT 相关的意图、词槽定义,对话模板、训练样本、问答集数据都分享在下面的网盘中,可以下载后体验时参考、导入使用:

链接:https://pan.baidu.com/s/19OfZR34lzgt0B96HenQwiA  密码:9arz

使用过程中有任何问题欢迎留言交流,或加入百度Hi群:1617262、QQ群:584835350 讨论交流。

也欢迎微信扫码关注UNIT公众号,获取最新动态消息。

 

收藏
点赞
20
个赞
共69条回复 最后由落花凋零尘世景回复于2019-05-23 14:08
#70落花凋零尘世景回复于2019-05-23 14:08:52

ee

0
#69伊茨米可回复于2019-05-13 10:21:06
#67 hecosysu回复
“模板因格式错误导入失败,下载失败模板” pattern导入的时候,显示了这个错误,请问你们自己创建的BOOK_TICKET导入的时候,没有这个问题吗
展开

请问提示什么错误?

0
#68伊茨米可回复于2019-05-13 10:20:38
#66 liguanghui2588回复
这个在火车站有实际应用没?

有的

 

0
#67hecosysu回复于2019-04-28 15:55:40

“模板因格式错误导入失败,下载失败模板” pattern导入的时候,显示了这个错误,请问你们自己创建的BOOK_TICKET导入的时候,没有这个问题吗

0
#66liguanghui2588回复于2019-04-26 12:15:29

这个在火车站有实际应用没?

0
#65tiancorn回复于2019-04-25 21:44:18
#64 hecosysu回复
这个教程的界面跟现在最新的UNIT界面不一样,请问什么时候会更新一下?
展开

已经更新了

0
#64hecosysu回复于2019-04-18 19:52:01

这个教程的界面跟现在最新的UNIT界面不一样,请问什么时候会更新一下?

0
#63伊茨米可回复于2019-04-09 11:26:19
#62 gcc604回复
机器人可以发布至生产环境吗?我看现在是“敬请期待”

暂时还不可以

0
#62gcc604回复于2019-04-02 17:36:20

机器人可以发布至生产环境吗?我看现在是“敬请期待”

0
#61gcc604回复于2019-04-02 17:35:58

机器人可以发布至生产环境吗?我看现在是“敬请期待”

0
#60伊茨米可回复于2019-03-23 15:25:51
#59 龙猫benny回复
你好,想了解下“训练对话模板”是什么意思呢?模板匹配的方法不是基于规则吗?
展开

是的,模板是某个句式的规则。

0
#59龙猫benny回复于2019-03-22 10:08:30

你好,想了解下“训练对话模板”是什么意思呢?模板匹配的方法不是基于规则吗?

0
#58伊茨米可回复于2019-02-20 19:39:54
#57 彦丶子凡回复
但是评论真的很烦,右边的滚动条都很小了

收到反馈,我们内部沟通下

 

0
#57彦丶子凡回复于2019-02-13 14:03:02

但是评论真的很烦,右边的滚动条都很小了

0
#56彦丶子凡回复于2019-02-13 14:02:38

这个真的很详细

0
#55189******80回复于2018-11-11 14:01:08

这个很方便了

0
#54伊茨米可回复于2018-11-08 00:36:07
#53 故事从哪里结束回复
请问完成自定义查询火车票的技能后,怎么加问候的预置技能???怎么把自己的自定义技能和多个预置的技能放在一个自动问答系统呢中?
展开

现在自定义技能和预置技能是独立的,您可以同时调用,然后按优先级获取答复结果传给终端用户(智能对话常见的使用方法),后面UNIT会推出机器人的概念,来帮助您完成这部分工作

0
#53故事从哪里结束回复于2018-11-07 20:36:29

请问完成自定义查询火车票的技能后,怎么加问候的预置技能???怎么把自己的自定义技能和多个预置的技能放在一个自动问答系统呢中?

0
#52liguanghui2588回复于2018-11-07 08:37:04

这个通过语音下单挺方便的

0
#51伊茨米可回复于2018-09-30 11:24:24
#50 蓝兰兰111回复
你用的开发平台是什么?

0
TOP
切换版块