# 实体和辅助词
当你在制作技能和问答时,你会发现以下几种情况:
举例
- 同一个事物,有不同的说法:
- 周杰伦: 杰伦、周董、小公举、jay……
- 空调:冷气、雪柜、空调机、冷气机……
- 同一句话,可以取不同的值:
- 我想听周杰伦的歌
- 我想听陈奕迅的歌
- 我想听刘德华的歌
- 同样的意思,可以加上不同的词语进行辅助:
- 帮我打开灯
- 你可以打开灯吗
- 帮我打开灯吧
为了更简便地开发技能,你可以使用在用户的常用表达中引用实体或辅助词,以避免写多句语料。
# 实体
用户的语料中,同一类型的名词将会被总结为实体。
示例
明天合肥天气怎么样
后天北京天气怎么样
{time}{city}天气怎么样
time 是时间实体 city 是中国城市实体
实体信息将会在结果 Json 中的 semantic.slots 字段中显示。其中 name 为实体名,value 为用户的表述词,normValue 为规整化以后的值。
{
"semantic":[
{
"intent":"QUERY",
"slots":[
{
"name":"datetime",
"value":"今天",
"normValue":"{"datetime":"2018-01-22","suggestDatetime":"2018-01-22"}"
},
{
"name":"location.city",
"value":"帝都",
"normValue":"北京市"
}
]
}
],
"service":"weather",
"text":"查看帝都今天的天气",
"answer":{
"text":""北京今天晴","-10℃ ~ -2℃","西南风微风""
},
"save_history":true
}
# 静态实体
TIP
这里的静态指,此类实体不区分作用域,对所有使用的技能,所有使用的用户生效。静态实体可以通过网页修改。
以天气查询的 App 为例,开发者期望用户的交互方式为:
明天合肥天气怎么样
明天厦门会下雨吗
我们可以把以上两句话抽象为一个自定义技能
,其中语料如下:
{time} {localtion} 天气怎么样
{time} {localtion} 会下雨吗
{time}
和{location}
分别包含:
time 实体 | location 实体 |
---|---|
今天 | 北京 |
明天 | 上海 |
后天 | 合肥 |
周一 | 厦门 |
周二 | 武汉 |
…… | …… |
对于静态实体,开发者任意一款 App 添加了静态实体均可生效,生效时间为永久。
# 动态实体
动态实体相比静态实体,区别在于静态实体可作用于所有技能,所有用户;动态实体仅作用于他的生效维度。
动态实体可分为应用级,用户级和自定义。开发者指定动态实体的作用维度后,动态实体仅在对应的应用/用户进行生效,动态实体的通过HTTP接口上传和更新实体词条。
一般来说,动态实体可用于以下场景:用户通讯录,饭店菜单等。
关于动态实体的详细说明,请查看动态实体。
# 通配实体
开放实体中包含一种特殊的实体,称之为通配实体,用于配置不能穷举的技能语义槽。
例如在天气中技能中,查看{chinaCity}的天气,chinaCity(中国城市)可以穷举的。
但在搜索技能中,搜索 {something},something 是不可能穷举的。因此在搜索技能时,推荐使用通配实体。
通配实体可以匹配任意的1~99个字符。
TIP
注意:因通配实体的命中率过高,使用通配实体可能会降低其它意图和技能的命中概率,从而造成语义结果与预期不符。因此,在实体可以穷举时,请勿使用通配实体。
# 举例
语料:提醒我 {time} 在 {location} 开会
例句:提醒我下午三点在A1楼1407开会
解析结果如下:
{
"slots":[
{
"name":"time",
"normValue":{
"datetime":"T15:00:00",
"suggestDatetime":"T15:00:00"
},
"value":"下午三点"
},
{
"name":"location",
"normValue":"A1楼1407",
"value":"A1楼1407"
}
]
}
# 辅助词
为了满足开发者快速编写语料的需求,同时保证语料的可维护性,技能工作室提出了辅助词的概念,不同于实体,辅助词仅用于帮助开发者编写语料,但在最终开发者拿到的结构化数据中不会展现。
在如下语料中:
- 「帮我」「定一下」从{合肥}到{广州}的「飞机票」
- 「我要」「买一张」从{合肥}到{广州}的「机票」
- 「给我」「预约」从{合肥}到{广州}的「航班」
语料的主体结构没有变化,开发者实际关注的信息也只有出发地和目的地,但是用户的表达方式却千变万化,此时我们可以把这句话抽象成:
- {helpMe}{book}从{startCity}到{endCity}的{ticket}
其中,startCity和endCity为实体,helpMe、book和ticket的为辅助词。这些辅助词包含的内容如下:
helpMe 辅助词 | book 辅助词 | ticket辅助词 |
---|---|---|
帮我 | 定一下 | 飞机票 |
我要 | 买一张 | 机票 |
给我 | 预约 | 航班 |
我想 | 购买 | 客机 |
我想要 | 预订 | 飞机 |
…… | …… |
「例句语料」和「模版语料」均支持使用辅助词,推荐使用「例句语料」以保证语料的可读性。同时平台已经帮开发者整理了若干常用的辅助词,开发者可以直接使用。
# 表述必须
「表述必须」指的是,用户在表达这句话的过程中,该槽位必须存在才能被理解。
例如:“「帮我」「定一下」从{合肥}到{广州}的「飞机票」” 在这句话中,「定一下」、{合肥}、{广州}、「飞机票」四个槽位均为表述必须,「帮我」则不是表述必须,因为省略后,“定一下从合肥到广州的飞机票”没有歧义,但是其他四个槽位省略任意一个都会造成语句不通或表述歧义。