规则模板
在意图、问答和复合实体中,允许通过配置规则模板的方式来定义可以匹配的用户表述(query)的内容,从而可以实现通过规则的方式快速建立识别能力,对于一些特殊的case有比较好的针对性处理效果。
基本语法
UNIT企业版中建立了一套规则识别的语法,其基本语法定义如下:
序号 | 语法名称 | 语法规则 | 语法说明 | 举例 |
---|---|---|---|---|
1 | 通配符 | [W:a-b] | 表示a-b位文本,a、b为0-20自然数,且b大于等于a | 例如:[W:5-10]表示适配5-10字符长度的文本,可以匹配“同学,你好”,不可匹配“你好” |
2 | 任意数字 | [N:a-b] | 表示a-b位数字(阿拉伯数字、罗马数字),a、b为0-20自然数,且b大于等于a | 例如:[N:3-3],表示适配3位数字的文本,可以匹配“123”,不可以匹配“1234” |
3 | 任意字母 | [L:a-b] | 表示a-b位英文字母,不区分大小写,a、b为0-20自然数,且b大于等于a | 例如:[L:0-5],可以匹配“”、“aBc”、“A”,可匹配“abcdefg”中小于5个字符的部分 |
4 | 任意标点 | [P:a-b] | 表示a-b位标点符号,a、b为0-20自然数,且b大于等于a | 例如:[P:1-3],可以匹配“?”,“。。。” |
5 | 任意符号 | [S:a-b] | 表示a-b位ASCII符号,例如数学符号,货币符号,a、b为0-20自然数,且b大于等于a | 例如:+、-、=、¥等 |
6 | 任意分隔符 | [Z:a-b] | 表示a-b位分隔符,例如空格、换行,a、b为0-20自然数,且b大于等于a | 直接输入空格或换行即可。注意虽然本工具支持调试,但在真实进行语义识别中往往会对句首句尾的分隔符进行去除 |
7 | 否定语法 | [W:a-b^{xxx}] | 表示长度为a-b位不包含的xxx的文本,a、b为0-20自然数,且b大于等于a | 例如:[W:5-10^{不要}],表示最小5位最长10位且不包含“不要”的文本 |
8 | 符合文本 | xxx | 表示必须完全符合xxx,xxx可以是语法支持的任何内容 | 例如:额度 表示文本必须完全符合“额度”这两个字 |
9 | 模糊匹配语法 | ~xxx | 表示只要包含xxx即可匹配,xxx可以是语法支持的任何内容 | 例如:~额度,表示文本中只要包含“额度”这两个字即可匹配 |
10 | 非必选文本 | [xxx?] | 表示文本中可以存在或不存xxx | 例如:[一辆?]表示语句中可以存在“一辆”,也可以不存在 |
11 | 可选对象 | [AAA|BBB] | 表示符合AAA或者BBB中的一个,AAA/BBB可以是语法支持的任何内容,例如文本、实体、词库 | 例如:[查询|查找|@check] 表示语句中必须符合“查询”或“查找”或“@check”中的实体值 |
12 | 实体引用 | [@实体id] | 表示符合某实体中任意一条实体值;仅支持引用普通实体和规则实体,不支持引用复合实体 | 例如:[@sys_location] 表示用户语句中符合地点实体值,例如“北京”即可识别 |
13 | 词库引用 | [$词库ID] | 表示符合某词库中任意一个词条 | 例如:用户创建了一个ID为abc的专业词库,则[$abc]表示该词库下的词条均可识别到配置该模板的意图上 |
14 | 值抽取 | {} | 支持模板通过配置{}抽取某些值,此功能主要用于复合实体命中模板 | 例如"[W:0-10]{[@sys_number],name='number'}",输入"我要买123",返回结果{'number':123} |
注意:语法中使用到的符号均为英文符号,例如请注意区分英文"~"和中文"~",
模板规则调试工具
在意图模板、问答模板、复合实体命中模板中,可以通过文本框右侧图标唤起模板规则测试工具。通过该工具,可以先验证模板识别的正确性再保存到相应模块中。
常见规则模板写法
意图/问答规则模板使用案例
【case1】设立了一个信用卡办理的意图,希望表达相关信用卡时可以直接命中办理意图。
首先,建一个信用卡的实体,将相关信用卡的名称和俗称添加到实体的实体值和同义词中。然后为该意图添加一个模板,这样只要包含该实体的表达都会识别为信用卡办理意图:
~[@creditCard]
但是这样的模板显然过于宽泛,用户可能希望更精准地控制,那么可以分析办理信用卡的表达还有什么特点。不难发现,如果用户表达办理的诉求,往往会加上一些动词,因此可以枚举常见的办理相关的动词,使模板具备一定的限定能力,例如:
~[办|办理|开][@creditCard]
进一步分析还可以发现,不同场景用户的表达会更加口语化,所以可以进一步添加一些限定以更好支持:
~[办|办理|开][个?|张?][@creditCard]
【case2】模版片段组合使用
-
“|”关系可与“?”关系混合使用,“|”优先级较高
例如: 写法:[查询?|查看?|查查?]天气 含义:“查询”“查看”“查查”存在或不存在均可,但不同时存在。“天气”为必须字段。 可命中语句:查询天气;查看天气;查查天气;天气
-
[W:a-b]、[@实体ID]、xx可与“?”、“|”混用
例如1: 写法:[@card_type?]额度 (@card_type包含信用卡、借记卡两个实体值) 含义:@card_type中的任一实体值存在或不存在均可,“额度”为必须字段。 可命中语句:信用卡额度;借记卡额度;额度 例如2: 写法:[W:0-2|帮我看看]余额 含义:任意0-2个字符或“帮我看看”存在,“余额”为必须字段 可命中语句:帮我看看余额;查查余额;余额;查余额;xx余额 例如3: 写法:[卡片|@card_type?]额度 (@card_type包含信用卡、借记卡两个实体值) 含义:(1)“卡片”存在 或 (2) @card_type中的任一实体值存在或不存在,“额度”为必须字段。 可命中语句:卡片额度;信用卡额度;借记卡额度;额度
复合实体规则模板使用案例
【case1】一句话中有两个相同的实体需要做标记,例如,标记出发地(start)和目的地(end):
**~我要[从?]{[@sys_location],name='start'}[前往|到|去]{[@sys_location],name='end'}**
【case2】一句话中有多个属性信息需要采集,例如机场航线实体,需要采集出发地、出发机场、目的地、目的机场四个信息:
**[W:0-7]从{[@City],name='startCity'}[的?]{[@airport],name='startAirport'}[出发?][开始?][启程?][至|到达|到|往|去|飞|飞到|飞往|飞去|前往|回]{[@City],name='endCity'}[的?]{[@airport],name='endAirport'}[W:0-7]**
模板书写Tips:先定义模板书写思路,可以使模板书写得更精准,以上述模板为例:
泛化宽度+出发前缀词+出发地(地名+机场)+出发后缀词+航线连接词+目的地(地名+机场)+泛化宽度
- 前缀泛化宽度:[W:0-7]
- 出发前缀词:从
- 出发地:{[@City],name='startCity'}[的?]{[@airport],name='startAirport'}
- 出发后缀词:[出发?][开始?][启程?]
- 航线连接词:[至|到达|到|往|去|飞|飞到|飞往|飞去|前往|回]
- 目的地:{[@City],name='endCity'}[的?]{[@airport],name='endAirport'}
- 后缀泛化宽度:[W:0-7]
注:事实上用户表达会有更多可能,因此可能需要在命中规则中添加多组,此处仅以标准表达为示例
使用提示
1.规则模板常常用来解决冷启动阶段语料较少的问题,其利用规则的方式定义文本的格式,有较高识别效率,但是也会遇到一些错误案例。复杂情况的模板配置可能比较复杂。
2.当前可以通过模板配置实现手动指定澄清功能。例如,在意图a和问答b下配置一个一模一样的模板,若用户表述符合模板内容,则会触发澄清。
3.复合实体的命中模板需要考虑更多实体属性组合的情况。假设有一个机场航线的复合实体,具有四个属性(出发城市、出发机场、到达城市、到达机场),那么其命中模板要考虑用户表述中对一些值的省略。例如,用户可能会说“我要从北京到广州”,而省略了机场的表达,此时模板规则要考虑到这种情况也能识别为机场航线实体。