之前的文章,对UNIT平台和UNIT操作进行了详细介绍,本篇文章将教你如何使用UNIT零编程定制一个简单的订电影票机器人。

回顾基本概念

在配置之前,我们先回顾一下聊天机器人是如何实现聊天过程的。这个过程分两步:一是理解你所说的,理解你话语中的意图(目的)和关键信息(词槽);二是根据你提供的意图和词槽信息作出回应(澄清词槽、回复、引导)。

举个例子:(如果你很清楚,就可以略过这段啦)

用户说“帮我订张电影票吧,解忧杂货店,周日的”,意图是“订电影票”,“解忧杂货店”填充到电影词槽,“周日”填充到日期词槽;用户说“谢谢”,意图是“表达感谢”。

用户没有告诉ChatBot电影院词槽填充的内容,ChatBot回应“你要到哪个电影院呢?”,这是词槽澄清;当“电影词槽”“电影院词槽”“日期词槽”都填充后,ChatBot回应“好的,正在为你出票”,这是回复;当ChatBot给用户出一道选择题,“我还可以帮你:1订饮料、2订小吃,需要哪个呢?”,这就叫做引导。

现在,我们来搭建一个订电影票ChatBot。

一、明确目标梳理逻辑

先思考我们的目标是什么:希望ChatBot听懂哪些意图,理解哪些词槽,实现怎样的对话流程。

如果,我们的目标是让ChatBot听懂“订电影票”的意图和“谢谢”意图;理解“电影名称”“日期”“电影院”词槽;实现如下对话流程:

USER:帮我订张电影票吧,解忧杂货店,周日的

BOT:你要到哪个电影院呢

USER:17.5吧

BOT:好的,正在为你出票

BOT:我还可以帮你:1订饮料,2订小吃,需要哪个呢?

USER:1

BOT:好的,现在帮你订饮料

USER:谢谢

BOT:不客气

那么我们需要建立“订电影票”对话单元;还要建立“订饮料”对话单元和“订小吃”对话单元,因为ChatBot在引导里提到了;“谢谢”对话单元不需要建立,因为UNIT已经为我们预置了。

在“订电影票”对话单元下建立这3个词槽,并引入对应的词典(如电影名称词典中是所有的电影名称),配置一条澄清话术。

配置答复话术,和触发答复的条件(词槽状态)。

配置引导话术,引导目标,和触发引导的条件(词槽状态)。

我们用一张示意图,表示需要配置的内容:

二、准备一个百度账号

进入网址http://unit.baidu.com,出现如下登录页面, 如果没有百度账号,点击“立即注册”注册一个百度账号

三、建立场景&配置对话单元

进入UNIT后【新建场景】,新建一个名称为“电影票助手”的场景。

在【自定义技能】,依次点击【新建单元】—【对话单元】,新建如下3个对话单元,

接下来,配置这3个对话单元:

1. 配置BOOK_SNACKS对话单元

【配置意图】

【配置回复】

2. 配置BOOK_DRINKS对话单元

【配置意图】

【配置回复】

3. 配置BOOK_TICKETS对话单元

【配置意图】

【配置词槽】

(1)配置 “电影名称”词槽

点击【新建词槽】

设置词槽名称为“user_movie_name”,词槽描述为“电影名称”,澄清话术为“看哪部电影?”

选择系统词典“sys_video_movie(电影)”

(2) 配置 “电影院”词槽

点击【新建词槽】

设置词槽名称为“user_cinema”,词槽描述为“电影院”,澄清话术为“到哪个电影院看?”

点击【上传文件】,选择已定义好的电影院词槽词典

在这之前要准备好电影院词槽词典,里面包含机器人需要识别的电影院名称和别名,例如:

(3) 配置 “日期”词槽,方法参照配置“电影名称”词槽

词槽名称为“user_date”

词槽描述为“日期”

澄清话术为“订哪天的?”

选择系统词槽词典“sys_time(时间)”

(4) 在词槽列表中调整词槽澄清的顺序

点击【操作】中的【上移】【下移】,将顺序调整为如下图所示的顺序

【配置回复】

设置文本回复,回复内容是“好的,正在为你出票。”

设置触发条件是user_movie_name、user_cinema、user_date词槽都已填充

这样实现的效果是:当“电影名称”、“电影院”、“日期”、都已填充时,回复“好的,正在为你出票”;当某个词槽未填充时,用“澄清话术”进行澄清询问,澄清的顺序按照上一步的澄清顺序进行。

【配置引导】

设置引导话术“我还可以帮你:1订饮料,2订小吃”

设置引导目标,“1”引导至“BOOK_DRINKS”,“2”引导至“BOOK_SNACKS”

设置触发条件是user_movie_name、user_cinema、user_date词槽都已填充

这样实现的效果是:当“电影名称”、“电影院”、“日期”、都已填充时,回复“我还可以帮你:1订饮料,2订小吃”;当用户说“1”则跳转到“BOOK_DRINKS”,说“2”则跳转至“BOOK_SNACKS”。

四、配置对话样本/对话模板

对话样本可以在线编辑并标注语料,也可以离线编辑上传。如果是离线编辑上传语料,要使用“一键确认”进行标注确认。

还可以编辑对话模板,对话模板代表一种固定的句式,配置以后机器人会识别出符合这条模板的所有话术。如“[D:kw_request_book][D:user_date]电影[D:user_movie_name][W:0-10]”

1. 离线编辑对话样本集

在文本文档中编辑对话样本,举几个例子:

2. 建立book对话样本集

进入【数据中心】,点击【新建对话样本集】。

点击【上传文件】,选择编辑好的book对话样本集,建立后要【一键确认】。

也可不选择【上传文件】上传对话样本,直接点击【确定】,后续在线编辑对话样本。

进入“book”对话样本集列表,

在线编辑,点击对话列表页面上的【新建对话样本】,进入对话对话样本编辑页面

输入“对话样本”,选择“意图”,标注“词槽”后,点击【新建并继续】则继续编辑对话样本,点击【新建并完成】则回到对话样本列表。如果没有词槽信息则不标注词槽。

3. 配置对话模板

进入【对话模板集】,点击【编辑对话模板】

先建立特征词,点击【新建特征词】

建立一个名称为“kw_request_book”的特征词

点击【上传文件】,文件的内容是一系列表示请求订票的词语或短语,如下所示:

可在线或离线编辑对话模板,这里在线编辑一条对话模板。点击【新建对话模板】

建立一条意图为“BOOK”的对话模板,在“对话模板”中编辑内容

模板“[D:kw_request_book][D:user_date]电影[D:user_movie_name][W:0-10]”可以匹配“帮我订周日的电影芳华”,也可以匹配“订一下明天的电影心理罪吧,谢谢”

五、训练生效/验证模型

1. 训练生效模型

进入【训练验证】,点击【训练并生效新模型】

勾选“生效全部模板”,勾选所有对话样本,点击【训练模型并生效到沙盒】

接下来耐心等待10分钟,当模型“已生效”,并且沙盒环境“启动成功”后,就可以在左边的验证区域和你的机器人对话啦。

2. 验证模型

我们可以在平台上的验证区域体验机器人的效果。

如果机器人对用户输入话语的意图或词槽解析错误,可通过“@”快捷键修正

修正后的话语添加进“默认集”和“对话模板”中

选择“学习模式”,会将验证中用户输入的所有话语添加进指定的对话样本集中,并对修正的话语添加进“对话模板”中。

点击【分享】,用手机微信扫描二维码,可进行手机体验

六、发现问题

由于词槽、逻辑、语料配置都不够丰富,你会发现以下一些问题:

1.更丰富的词槽信息不能识别

订电影票通常还需要“订票数量”、“时间”这些信息,这个简单的订电影票机器人在订票意图下没有配置“订票数量”、“时间”词槽,因此不能实现这些信息的询问和识别。如果要实现对“订票数量”、“时间”,就需要增加词槽的配置。

2. 更复杂的逻辑不能实现

更复杂的逻辑,比如机器人向用户确认需求信息“您的需求如下,是否确认?”,用户想要更改需求“我想改成周六晚上看”,如果要实现这些功能,就需要更丰富完整的配置。

3.更灵活的语言不能理解

这个简单的订电影票机器人,只引入了50条对话样本和1条对话模板,语料不丰富,它对语言的理解能力就有限,对一些更灵活的语言比如“听说解忧杂货店很好看,我想明天晚上6点左右和闺蜜一起去看,你帮我选个中间靠后的座位订一下吧”不能理解,这需要增加语料。

定制对话机器人不是一蹴而就的,需要反复验证,发现问题,添加对话样本和对话模板,优化配置,再重新训练生效,这是一个反复优化的过程。

下篇文章将对订电影票机器人做一些优化配置,展示UNIT使用的灵活度。