关于AIUI中的技能、实体的理解。
技能:
AIUI 开放平台的技能分为开放技能和自定义技能,其中开放技能由科大讯飞提供,涵盖天气,股票,闹钟,智能家居等生活常用情景,技能用于完成一个或者一组特定意图。一个意图又包含若干句语料。语料为交互的核心内容。
按照粒度从大到小划分:应用>技能>意图>语料
以智能音箱为例,音箱可以拥有若干个技能,比如天气、音乐、空调以及星座。针对星座这个技能,存在幸运数字,幸运颜色和今日运势等意图。针对幸运数字又有若干种问法,例如:今天射手座的幸运数字,射手座今天的幸运数字是什么
语料:与交互设计师和产品经理相关
开发者在语料中尽可能多的覆盖用户可能的说法,AIUI 引擎匹配到语料后,会返回给开发者对应的所属的意图以及实体槽信息。
语料撰写:语气助词、礼貌性用语等与语义无关词汇的冗余或缺失以及口语化的表示,不会影响匹配效果,如:“请问一下空调什么价格”、“空调什么价格呀”、“空调什么价格”、“空调怎么卖”四者语义匹配;
通用领域的近义词,如:“出售”,“卖”,“售卖”三个词词义一致。 AIUI 后续迭代过程中,我们会持续拓展通用和垂直领域的同义词并迭代更新模型来优化方案,以达到更好的理解效果。
可选符
语料中的大括号{}代表实体,中括号[]代表可选符,小括号()代表必选符。 大括号:打电话给{contact}
中括号:帮我呼叫张三[的电话|的电话号码|的手机],等同于:帮我呼叫张三、帮我呼叫张三的电话、帮我呼叫张三的电话号码、帮我呼叫张三的手机
小括号:帮我(呼叫|拨打)张三的电话号码,等同于:帮我呼叫张三的电话号码、帮我拨打张三的电话号码
一句语料中,中括号和小括号个数之和最多支持两个。中括号和小括号不能相互包含。
√ [{time}]{city}的天气
√ [帮我|请帮我]呼叫张三[的手机号|的号码]
x [帮我|请帮我](呼叫|拨打)张三[的手机号|的号码]
静态实体
用例1:
以天气查询的 App 为例,开发者期望用户的交互方式为:
明天合肥天气怎么样
明天厦门会下雨吗
我们可以把以上两句话抽象为一个自定义技能,其中语料如下:
{time} {localtion} 天气怎么样
{time} {localtion} 会下雨吗
{time}和{location}分别包含:
time 实体 location 实体
今天 北京
明天 上海
后天 合肥
周一 厦门
周二 武汉
…………
对于静态实体,开发者任意一款 App 添加了静态实体均可生效,生效时间为永久。为了方便开发者,讯飞开放平台已经为开发者内置了"数字","城市","歌曲"等三十多个常用实体,开发者可以直接调用。
用例2:
以开发两款百科 App 为例,分别是《水浒传百科》和《西游记百科》,开发者期望用户的交互方式为:
我想听李逵的故事
介绍一下孙悟空
我们可以把以上两句话抽象为一个自定义技能,其中语料如下:
我想听{name}的故事
介绍一下{name}
《水浒传百科》和《西游记百科》两个 App 均添加了这个技能,但是这两个 App 的实体并不相同。{name} 内容分别如下:
水浒传 name 实体 西游记 name实体
宋江 唐僧
鲁智深 孙悟空
林冲 猪八戒
武松 沙僧
李逵 太上老君
…………
为了实现这个目标,我们提供了动态实体(应用级),动态实体(应用级)可以在实体名相同的情况下,为每个 appid 设置不同的实体副本。
动态实体(应用级)作用域为 appid,生效时间为永久。
用户级
以开发一款电话 App 为例, 开发者期望用户的提问方式为:
打电话给张三
呼叫李四
我们可以把以上两句话抽象为一个自定义技能,其中语料如下:
打电话给{contacts}
呼叫{contacts}
由于每个用户的联系人名称都不一样,因此无法使用静态实体。为此 AIUI 的 SDK 中,为开发者提供了相应的 API 接口,开发者可以针对每个用户维护一个实体副本。动态实体(用户级)只对特定用户生效,生效时间为永久。
自定义级
所见即可说
用例5:
假设开发者需要在电视上开发一款菜谱 App, 开发者期望用户的交互方式为:
我想做徽菜
下一页
换一批
随即电视上显示出四道徽菜的图片和文字,分别如下:
此时电视显示的菜谱
臭鲑鱼
鸡汁腊鱼
清蒸石鸡
问政山笋
用户接下来可能会说:
臭鲑鱼怎么做
我们将其抽象为一个自定义技能,其中语料如下:
{name}怎么做
由于用户不确定的操作和意图,每次电视上显示的菜谱名称均不相同,为了使得界面上向用户展示的信息,用户都可以语音交互的方式控制,我们选择使用动态实体(所见即可说),所见即可说的业务流程如下,作用域为当前用户,作用时间为当前会话,会话结束后,所见即可说实体立刻失效:
客户端获取信源信息
整理信源中的关键
调用所见即可说
API接口上传数据
会话结束失效
用户语音交互
通配实体
开放实体中包含一种特殊的实体,称之为通配实体,用于配置不能穷举的技能语义槽。如在搜索技能中,搜索 {chinaCity} 与搜索 {something},两者不同的是:chinaCity(中国城市)可以穷举,而 something 不可以穷举。因此在搜索 {something} 时,推荐使用通配实体。通配实体可以匹配任意的1~20个字符。注意:因通配实体的命中率过高,使用通配实体可能会降低其它意图和技能的命中概率,从而造成语义结果与预期不符。因此,在实体可以穷举时,请勿使用通配实体。
举例:
语料:提醒我 {time} 在 {location} 开会例句:提醒我下午三点在A1楼1407开会解析结果如下:
time: 15:00
wildcard: A1
楼1407
总结
举例子:
某app金曲库只提供四大天王的歌曲。
需要定制一个实体,取名custom artist,在此实体集合中写全歌手名字。
最后在测试语料中写:
我想听周杰伦的歌
由于周杰伦不在实体中,因此返回无结果。