Android-AIUI技能设计技巧及处理策略总结

半年多一直在做机器人语音方向的应用,现在产品基本上稳定下来了,在语音交互的路上踩过不少坑,在这里记录分享一下。假设看到这篇文章的人对AIUI的基本概念包括实体、技能、语料、意图都已了解。

最开始的语音处理方案

讯飞MSC录音+本地NLP处理。

当时还不知道有AIUI这个东西,本地做了一个简陋的NLP处理的程序。大概思路和AIUI的技能处理一样,先把不同的问题分类并定好优先级,然后从返回的语音文本中提取出关键字,分析意图。再对相应的意图做处理。

这种方案满足了最初的演示需求,但是机器人的语音交互体验不好,必须使用固定的句式、只能回答固定的问题。演示圆满完成之后,公司要求着力做好这个项目。本来说有个demo就行的任务,变成了产品级的项目。于是就有了下面的方案。

真正可行的语音处理方案

MSC录音 + AIUI语义解析 +本地技能处理

既然是产品级的项目,开始研究要怎么做。在AIUI的官网中看到了有关AIUI的介绍,发现其处理思路和我之前做的几乎一样,但其丰富的问题库,优秀的语义解析设计比我的好多了。也就是说,我可以用AIUI这套处理实现之前所有的功能,还能做的更好。

AIUI的接入有一定的学习成本, 经过几个月的实践,总结一下AIUI的技能语料设计的内容。

  1. AIUI的语料是全匹配的,比如你设计的语料是“你叫什么名字”,问法也必须是“你叫什么名字”才能识别出来。由于录音中可能会存在各种各样的杂音,要想识别“你叫什么名字××××××”(×表示任意字符)这种问题,需要使用AIUI的通配实体。

  2. 如果终端的实体需要差异化配置,可以使用动态实体。动态实体分为应用级、用户级和自定义级。应用级可以在实体名相同的情况下,为每个 appid 设置不同的实体副本;用户级对每个用户维护一个实体副本;自定义可以自定义的维度,为自定义的维度设置不同的实体副本。我的应用在不同的城市,实体的数据是不一样的,相同城市,实体数据一样。所以选择了自定义维度,维度就是城市(city)。

  3. 动态实体在应用每次启动必须重新上传,否则不会生效。每次上传都会覆盖之前的动态实体。

  4. 语料设计时尽量不要出现文字,全部用实体来表示。
    例如:我的某一条语料就是{common}{station}{common}{go}{common}{station}{common}
    其中common是通配实体,可以匹配任意1-21个字符,go是一个静态实体,语料可以是“去,到,前往”等,station是一个动态实体,表示每个城市的站点。
    这样设计的好处在于,如果发现某个词语有很多近义词,可以直接修改其静态实体就行,而不必修改语料的句式。

  5. 技能在初期设计时,就应该做好区分,保持单一原则,即一个技能只处理一类问题。千万不要把不同类型的问题放在同一技能里面,当你后续需要对不同技能分类处理的时候,你就会感谢当初选择了单一原则。

  6. 当技能多了,避免不了会出现一个语料,一种问法,可能对应了多个技能里的意图。默认的结果在最外层的,更多结果会体现在”moreResult”这个字段里面。这个时候要怎么处理?我的策略是:技能分级,按优先级处理。为每一种技能设定一个优先级,只处理最高优先级的技能。如果最外层的优先级和moreResult里面最高优先级的优先级一样,则取最外层的结果。如果更低,则取moreResult里面最高优先级的结果。

  7. “rc=4”的语义处理:这类语义为未知语义,平台上没有对应的技能或者问答对。这类语义是需要过滤处理的,我的逻辑是:如果当前有正在处理的语义,直接丢弃未知语义;如果没有,则保留。

  8. 如何处理商店的技能:商店的技能其实很好处理,因为商店的技能基本上都是有直接答案的。我们可以统一处理。在answer这个字段里能解析到商店技能返回的语义结果的回答,我们只要处理这个信息就可以。

    思考

    1.AIUI的这套语音语义处理方案解决了录音、识别、语义解析功能,但是实际使用过程中,用户的问法不可能按照我们设计的来,如何才能最大限度地匹配出用户的意图?最好还是自己做一些NLP的处理,比如可以计算用户的问法和语料库的相似度,选择一个相似度最大的意图返回给用户,或者引导用户做出正确的问法。

    2.全双工交互:1.0版本做的是单工的,即机器人说话的时候不录音,用户需要看机器人的状态来判断这个时候是否在录音,是否可以开始交互,体验很不好。2.0版本就改成了全双工的交互,机器人响应的同时,也在录音。这个改动很简单,但是对用户体验的提升却是极大的。如果你也是和我一样的方案,建议也做成全双工的。这种全双工的方式在某些形态,比如手机上,可能不太合适,但是像机器人、智能家居这些产品形态上是很合适的。试想如果每次交互,都要先说一遍唤醒词,这样的产品你会喜欢使用吗?

注:本篇为工程实践中的纯干货分享,转载请注明出处。

你可能感兴趣的:(Android学习总结)