# 用户问法
用户问法则是用户对于意图的常见表达。用户对于一个意图,可能存在多种不同表达。开发者在配置问答时,最好能够尽可能全面地填写用户问法,覆盖多种不同的句式。
为了方便开发者快速编写用户问法,平台支持通过使用「正则符号」、「词典」与「语义槽」的方式添加用户问法。
注:问法不允许重复,已经存在的问法在同一个机器人中无法再次创建
例如:
「我想查询北京的天气」和「我想查询上海的天气」
以上两句可以使用词典 {城市} ,合并为:
我想查询{城市}的天气
而
「我想查询{城市}的天气」和「{城市}天气怎么样」
是两个不同句式的句子,需要分为两种用户问法来添加。
# 规则&样例
目前自定义技能的问法有两种配置方式,分别是:
问法规则:
具有“精准可控”但“不够灵活”的特点
问法样例:
具有“撰写简单”、“泛化能力强”、“相对不可控”的特点
单个意图的问法配置,可根据实际情况来选择,且可同时使用两种方式。
# 问法规则
支持:“()”、“|”、“&&”`三种规则符号。
符号样式 | 释意 | 补充说明 |
---|---|---|
() | 必选 | 前后有序,必须成对出现,不能嵌套 |
| | 或 | 前后有一个出现就能命中 |
&& | 链接 | 前后两个条件没有顺序区别 |
注意:以上正则符号均必须为英文符号;
(打开|想看|)&&(视频)({节目名称})
表示当前规则有三个条件:(打开|想看|)、(视频)、({节目名称})
- 其中(打开|想看|)条件最后的“|”表示的是可选条件,“想看”和“打开”出现一个即可; (视频)({节目名称})是必选条件,即用户问法中“视频”和“{节目名称}”必须都出现才能命中。
- &&表示前后两个条件是无序的,即“想看视频…”、“视频打开…”均可以命中;
- (视频)({节目名称})表示这两个条件是有序的,必须连续出现才能命中,即“视频xxx”可命中,“xxx视频”不可命中。
平台提供“问法规则”相似度阈值参数的自定义,可以让规则具有一定灵活性。默认阈值为 0.8(通用最佳值)。
- 如果将阈值设为【1】,那么 “我想看视频郭德纲相声” 这句话,因为多了一个 “我” 字就无法命中。
- 如果将阈值设置成【0.6】,那么 “我想看视频郭德纲相声” 则可以命中。不过,阈值越低也可能引入一些误命中的情况,比如 “别给我打开郭德纲相声” 也有可能命中。
# 问法样例
问法样例具有语义泛化能力,能够降低用户的撰写难度。比如用户问的问题和你配置的问题近似或者意思大体相同,有可能会命中此意图。其中问法样例也可以使用部分规则符号。简单理解,如果你写了一句话,可能和这句话类似的表达都有可能命中。 优点是:增加了一定的泛化能力,但与此同时泛化的也可能是无法控制的。比如算法认为某个句子相似,就会命中,但实际用户表达的不是这个意思,当然这种情况也会比较小,只是有一定概率会出现这种情况。
问法样例同样可以使用部分规则:
可以使用:“()”、“|”
两种符号(最多出现 4 个),不可使用”&“
符号。
用户问法最多一句话引用三个词典或槽位,即一句话里词典或槽位的使用不能超过3个。
例如: 我们想配置一个用户查询天气的问题,如果使用纯问法规则,可能需要输入:
(你查一下|我想看一下|你知道|搜索一下|播一下|直播|我想知道|查询|给我查询|给我查询|给我查询一下|查询|查询一下|预告|预告|报一下|看一下|查看|你好|我问一下|帮我查一下|)({from_loc})(的|)(气温|温度|天气|天气预报)({日期})(怎么|怎么|怎么|怎么|咋样|是怎么|是什么样|是什么样的|是什么|什么样|)
但使用问法样例配置,我们可以简单配置三个句子:
(播报|查询)({from_loc}|)({日期}|)(天气|天气预报)
(告诉我|我想知道)({from_loc}|)({日期}|)天气
({from_loc}|)({日期}|)(适合|)(怎么样|)
同样,句子示例也可以通过调整句子的相似度阈值,来扩展或者收敛命中的概率。阈值越低,就约束越低,越容易命中。