之前的文章,对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使用的灵活度。
热门跟贴