规则实体与复合实体
本产品除了提供通过枚举方式实现的普通实体和预置的系统实体以外,还为高级用户提供了规则实体和复合实体的功能。本文将介绍这两类实体的使用方法和注意事项。
规则实体
基本配置
规则实体是通过正则的方式定义实体识别的范围,降低了普通实体通过枚举的方式来维护的成本,提高了效率。并且一些无法枚举的实体也可以通过规则的方式进行支持。本节介绍其基本使用方法。
第一步:新建规则实体
在实体新建页面点击新建实体,并且选择实体类型为规则实体
第二步:为实体添加规则
在实体详情页可以添加规则,规则采用的语法是正则表达式,符合规则的部分将被识别为实体
第三步:验证规则有效性
在完成添加之前,可以验证规则有效性。点击文本框右侧的图标可以唤起“模板规则调试工具”,输入正则和文本可以判断其规则是否可以被识别。例如,新建一个国内航班号的规则实体,可以先为其添加一个南航的规则“CZ\d{4}”(注意正则区分大小写),然后唤起调试界面进行测试。
第四步:完成添加
可以为某个实体添加多个规则。需要注意的是,如果添加太多规则不利于维护时,可以利用正则的语法对规则进行合并。例如大小写的支持,例如国内航司的二字码的合并等等;但需要注意的是,规则合并得越多,理解和排查时就更加困难,因此在抽象程度和规则数量上需要寻求平衡。
当实体的规则都建立好以后,可以在NLU分析中去检查实体识别的效果。
规则实体的使用
规则实体的使用方式和普通实体完全一致,可以在会话流程中通过下拉的方式进行选择,也可以在高级模式或规则模板中通过 @实体id 的方式进行使用。
复合实体
复合实体用来解决一句话中存在多个相同/不同实体需要通过标记来区分的情况。例如,“我要从北京到广州”,用户表达的一句话中既有出发地又有目的地的地点实体,此时需要通过复合实体来进行定义和标记。
规则模板
不同于规则实体直接采用正则表达式,复合实体的命中规则是通过规则模板实现的。规则模板的语法和使用说明请参考:规则模板使用说明。在 UNIT企业版中,复合实体的命中规则、意图模板、问答模板都是通过这套规则模板语法实现的。
基本配置
第一步:新建复合实体
创建实体时类型为复合实体
第二步:定义复合实体属性
(1)复合实体可以由多个属性组成,每个属性都可以关联一个生效的实体(但不可关联复合实体)
- 属性标识:属性的唯一识别,必填
- 关联实体:属性必须要关联一个实体,该实体的识别结果将映射到属性上
- 自动填充:如果该属性勾选了自动填充,就代表该属性是在对话过程中必须收集到的信息;如果用户表述命中了规则模板但没有收集到该属性信息,系统会自动发问,引导用户进行补充,直到超过重试次数;如果超过次数仍没有收集到,则最终系统会认为未命中该复合实体
(2)以包含出发地和目的地的复合实体为例,定义两个属性start和end,并分别关联到地点实体
第三步:填写命中规则
定义好属性后,要为此复合实体填写命中规则。在填写前,要注意根据业务抽象好可能的用户表述,然后利用规则模板语法(规则模板使用说明)为该实体填写命中规则。
根据对该复合实体用途的定义,不难发现首先要对用户的完整表达进行抽象,当用户表达此类诉求时,其语法往往是“出发地-连接词-目的地”的句式。常见的连接词有“去、前往、到“,同时注意规则模板是完整匹配的,因此如果只要包含即可需要加“~”符号。由此可以构建如下的模板:
~{[@sys_location],name='start'}[去|前往|到]{[@sys_location],name='end'}
特别对{[@sys_location],name='start'}语法进行说明,[@sys_location]代表属性关联的实体,name='start'代表在上一步定义的属性。
除此以外,用户的表达往往会缺省出发地的表达,例如“我要去广州”。在过去需要在会话流程中去判断变量是否存在,而有了复合实体后可以直接通过引导话术进行自动填充。因此可以为该复合实体再添加一个缺省出发地的模板:
~[去|前往|到]{[@sys_location],name='end'}
注意:复合实体的命中规则中至少需要包含一个属性及其对应的关联实体。请注意规则模板中属性的命名和关联实体需要和属性定义里的一致。
第四步:测试命中规则
在正式保存模板之前,最好先对规则模板进行测试,以确保其命中结果符合预期
测试符合预期后可以保存规则模板。命中规则可以添加多组规则模板
第五步:设置实体值组合方式
在使用复合实体时,复合实体的实体值也可以根据需求被定义,如果不填写则默认会展示所有属性的值;实体值的定义方式就是一段文本,其中可以通过{%属性名%}的方式引用属性的值
可以看到在NLU中,识别到的实体值是按复合实体中定义的来呈现的
第六步:整体效果测试
复合实体编辑完成后可以在nlu分析中对复合实体整体效果进行测试。注意规则模板的生效可能会需要2-5分钟
也可以测试未完整表达的句式,此时复合实体信息会展示在“必填属性未完全命中的复合实体”表格中;所谓必填属性即勾选了“缺失时自动填充”功能的属性
复合实体的使用
测试好效果后就可以在会话流程中使用复合实体了,一般使用时通过下拉的方式进行选择,选择时既可以选择实体本身,也可以选择实体的某个属性;但注意,复合实体不能以“[@实体id]”的方式在规则模板中进行使用。
在变量赋值中选择,选择了复合实体
在进入条件中选择,选择了复合实体的某个属性
选择属性时,其对应的高级表达式是通过@实体id.get('属性名')的方式获取的
特别注意: 复合实体在会话流程中使用时,由于其自动填充机制类型的回复在中控中的优先级仅高于【子节点anything_else】,因此当在复合实体作为进入条件的节点右侧配置实体或其他非anything_else的进入条件的兄弟节点时,如果复合实体没有直接命中全部属性就会导致DM会选中其他节点,从而导致中控使用其他节点的回复。因此使用复合实体需要增加两个约束:
1.不要在流程片段根节点的进入条件使用复合实体
2.做复合实体采集时,必须要按照实体采集的标准配置,在其右侧增加一个anything_else的兄弟节点进行特殊情况兜底
案例
快速建立一个简单的机票查询流程(简化流程,只采集时间和出发地目的地即可,可利用实体采集模板快速建立)
会话流程中填写实体采集模板表单
创建会话流程
当用户表述缺省出发地的时候,也可以通过自动引导话术让用户进行补充