看似复杂的【简单导航场景】解决思路
mxw2552261 发布于2017-12 浏览:6389 回复:25
6
收藏
最后编辑于2018-04

场景如下:

   主人:帮我找一下附近的咖啡馆

   小乐:找到多家咖啡馆,请选择第几个?

   主人:帮我找一家有WiFi的

   小乐:找到多家附近有WiFi的咖啡馆,请选择第几个?

   主人:哪家是晚上9点后依然营业的?

   小乐:找到多家附近的、有WiFi的、晚上9点后依然营业的咖啡馆,请选择第几个? 

   主人:请按评分排序

   小乐:已经按评分排序,请选择第几个?

   主人:第一个

   小乐:电机咖啡馆,距你2公里。你是要导航过去,还是给那里打电话?

   主人:导航过去

   小乐:好的,即将为你导航到电机咖啡馆

 

看似很复杂,我们该怎么做呢?

   1. 首先分析梳理业务

   2. 找出对话中都有哪些意图?

   3. 意图中包含哪些词槽?

 

业务就是导航去附近的某个地方,可以是附近的加油站,附近的餐厅,附近的咖啡厅或者是附近的厕所。

意图就是导航,目的地就是词槽,像这样的抽象的地方,系统并没有提供系统词槽,所以我们要 “自定义目的地” 词槽,

 

继续分析:文中提到有WIFI的咖啡厅,应该属于咖啡厅里的一项功能。所以再创建一个功能词槽:

“晚上九点后依然营业”:我们从中找出 “晚上九点后” 是一个时间词槽,时间词槽系统已经提供,直接使用即可。

我们自定义目的地的意图创建完成,包含三个词槽,

 

需求是不管是否选择了时间和功能,都是可以进行意图最终触发,所以我们的触发规则要这么定义:

这样就可以识别出用户的:有WiFi的、晚上9点后依然营业的咖啡馆。

不过用户还提到 “附近的” ,我们可以在后续对话模板里添加特征词来表示,也可以在上面添加一个词槽来表示。

 

我们往下继续分析:“请按评分排序”,我们需要创建一个排序的意图,词槽定义为user_sort,可以按评分排序,环境排序等等,看实际需求。

 

“选择第几个”,我们需要创建一个 “选择” 意图,并且枚举出用户将会说的第几个。一般手机页面显示十条就够了:

“你是要导航过去,还是给那里打电话?” :意图识别后,需要具体做什么?那我们再创建一个意图,“DO”,词槽值“导航,打电话”等等,后续可以根据业务自行添加

OK ,我们的意图总共是四个:

 

意图创建好了,我们可以去创建对话样本和对话模板然后进行训练了,尽量创建多的对话样本。

 

可以创建对话模板:

 

创建附近的特征词,

 

样本创建好了,开始训练吧。

 

一切准备就绪,开始验证:

 

完美

 

关注公众号,大家有关于UNIT的问题,可以一起讨论哈

收藏
点赞
6
个赞
共25条回复 最后由爱上主丽叶回复于2018-04
#26爱上主丽叶回复于2018-04

导航原来是如此引导和筛选条件内容的,真的是扫盲了。

0
#25木蒙的荣耀回复于2018-04

作者没有处理“意图”之间的关系,可以用引导对话  来处理。

0
#24木蒙的荣耀回复于2018-04
#22 天降‖之物回复
这就是我想问的问题: 用户发话的音频流数据是通过终端直接丢给UNIT的,而UNIT的结果是直接返回给资源API服务器的;当资源API服务器处理完之后又将结果直接返回给UNIT,UNIT不会解析处理这个返回结果,而是透传返回给终端。 也就是说资源API只能被动响应UNIT的意图解析结果而无法对UNIT进行控制,终端也只能执行UNIT的返回结果,并且UNIT本身也不支持对于业务的逻辑控制,所以我就不知道作为开发者,要如何干预UNIT  
展开

UNIT支持给每一个动作(回复)设置规则,你可以给“导航目的地”意图的回复,增设一个“上一意图”限制,比如在“自定义导航”意图之后才能触发。

0
#23shoranxfyzhy回复于2018-03
#22 天降‖之物回复
这就是我想问的问题: 用户发话的音频流数据是通过终端直接丢给UNIT的,而UNIT的结果是直接返回给资源API服务器的;当资源API服务器处理完之后又将结果直接返回给UNIT,UNIT不会解析处理这个返回结果,而是透传返回给终端。 也就是说资源API只能被动响应UNIT的意图解析结果而无法对UNIT进行控制,终端也只能执行UNIT的返回结果,并且UNIT本身也不支持对于业务的逻辑控制,所以我就不知道作为开发者,要如何干预UNIT  
展开

这是什么意思回复了这么多一样的?

0
#22天降‖之物回复于2018-03
#18 mxw2552261回复
这是需要做业务处理控制的,如果发现并没有要导航的目的地,就要问用户导航去哪里了
展开

这就是我想问的问题:

用户发话的音频流数据是通过终端直接丢给UNIT的,而UNIT的结果是直接返回给资源API服务器的;当资源API服务器处理完之后又将结果直接返回给UNIT,UNIT不会解析处理这个返回结果,而是透传返回给终端。

也就是说资源API只能被动响应UNIT的意图解析结果而无法对UNIT进行控制,终端也只能执行UNIT的返回结果,并且UNIT本身也不支持对于业务的逻辑控制,所以我就不知道作为开发者,要如何干预UNIT

 

0
#21天降‖之物回复于2018-03
#18 mxw2552261回复
这是需要做业务处理控制的,如果发现并没有要导航的目的地,就要问用户导航去哪里了
展开

这就是我想问的问题:

用户发话的音频流数据是通过终端直接丢给UNIT的,而UNIT的结果是直接返回给资源API服务器的;

当资源API服务器处理完之后又将结果直接返回给UNIT,UNIT不会解析处理这个返回结果,而是透传返回给终端。

也就是说资源API只能被动响应UNIT的意图解析结果而无法对UNIT进行控制,终端也只能执行UNIT的返回结果,并且UNIT本身也不支持对于业务的逻辑控制,所以我就不知道作为开发者,要如何干预UNIT

 

0
#20天降‖之物回复于2018-03
#18 mxw2552261回复
这是需要做业务处理控制的,如果发现并没有要导航的目的地,就要问用户导航去哪里了
展开

这就是我想问的问题:

用户发话的音频流数据是通过终端直接丢给UNIT的,而UNIT的结果是直接返回给资源API服务器的;

当资源API服务器处理完之后又将结果直接返回给UNIT,UNIT不会解析处理这个返回结果,而是透传返回给终端。

也就是说资源API只能被动响应UNIT的意图解析结果而无法对UNIT进行控制,终端也只能执行UNIT的返回结果,并且UNIT本身也不支持对于业务的逻辑控制,所以我就不知道作为开发者,要如何干预控制UNIT

 

0
#19天降‖之物回复于2018-03
#18 mxw2552261回复
这是需要做业务处理控制的,如果发现并没有要导航的目的地,就要问用户导航去哪里了
展开

这就是我想问的问题:

用户发话的音频流数据是通过终端直接丢给UNIT的,而UNIT的结果是直接返回给资源API服务器的;

当资源API服务器处理完之后又将结果直接返回给UNIT,UNIT不会解析处理这个返回结果,而是透传返回给终端。

也就是说资源API只能被动响应UNIT的意图解析结果而无法对UNIT进行控制,终端也只能执行UNIT的返回结果,并且UNIT本身也不支持对于业务的逻辑控制,所以我就不知道作为开发者,要如何干预控制UNIT

 

0
#18mxw2552261回复于2018-03
#17 天降‖之物回复
很棒的说明,赞~~~~ 我也照着做了一个,有一个疑问想请教一下。 如果用户一开始说的不是“帮我找一下附近的咖啡馆”,而是直接说“导航过去”,那么是不是就直接跳到最后一个意图呢? 有什么办法避免吗?
展开

这是需要做业务处理控制的,如果发现并没有要导航的目的地,就要问用户导航去哪里了

0
#17天降‖之物回复于2018-03

很棒的说明,赞~~~~

我也照着做了一个,有一个疑问想请教一下。

如果用户一开始说的不是“帮我找一下附近的咖啡馆”,而是直接说“导航过去”,那么是不是就直接跳到最后一个意图呢?

有什么办法避免吗?

0
#16daipeng_hi回复于2018-01
#14 shoranxfyzhy回复
一样一样,你也多发帖子呀,哈哈

嘿嘿,找机会吧

0
#15mxw2552261回复于2017-12

好,继续。。。

0
#14shoranxfyzhy回复于2017-12
#13 daipeng_hi回复
就喜欢看这样的帖子,收获不少

一样一样,你也多发帖子呀,哈哈

0
#13daipeng_hi回复于2017-12

就喜欢看这样的帖子,收获不少

1
#12mxw2552261回复于2017-12

谢谢各位

0
#1115053535385回复于2017-12

这个思路好

0
#10卡农LLLL回复于2017-12

专业扫盲贴..666

0
#9zr0519回复于2017-12

果然专业!

0
#8mxw2552261回复于2017-12
#3 Leautolink回复
这个思路不错,可以根据此场景举一反三。

大家相互讨论各种思路哈

0
#7mxw2552261回复于2017-12
#5 shoranxfyzhy回复
感谢分享,扫盲了

共同学习

0
TOP
切换版块