开发者学堂课程【3节课走进云小蜜产品:课时3 :高级能力和算法效果优化】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/298/detail/3497
课时3 :高级能力和算法效果优化(二)
三、意图话术高级配置方式 LGF
对于机器人当中的每一个意图会包含许多不同说法,话术多样性较多,例如查天气的意图,就会有如下问法:
北京的天气
明天的天气
杭州气温
查询明天北京天气情况
请问一下明天北京天气如何
请问后天,上海天气怎么样
如果要一条话术一条话术的书写,需要书写的量较多。所以此时设计了高效的知识归纳方式 LGF,例如可以通过以下一条句子表达144条句子,并且是在不包含体和通配符的情况下,如果将实体和通配符的多种不可不同的可能性考虑进去,表达的数量会更加多:
.{0,2}{请问[一下]][${日期}][${城市}][的](天气|气温)[如何|怎么样].{(0,2}
演示lgf配置:
首先打开左侧的意图列表页面,此处会存在许多新建意图,编辑意图的入口:
以已经拥有的查天气的意图进行演示:
打开编辑意图页面之后,存在意图名称以及已经配置的意图话术:
最下方是高级配置方式,此时已经存在两条:
实际进行测试:
在 debug 窗口当中,可以查看到匹配类型及匹配细节。如上图所示,查天气这句话,匹配到了 LGF,匹配的细节就是之前的 LGF 当中的第二条,以上是 LGF 的配置入口。进入到意图编辑页面的最底部,可以在此处进行新增问法。对于 LGF 如何编写、语法规则如何等问题,存在一个文档进行讲解。用户可以按照文档中的规则进行编写,发现问题时也可以进行相应的查阅。
LGF 最简单的形式就是一条话术,匹配的也是话术本身。如果 LGF 话术写为“今天的北京天气”,那么只能匹配到“今天的北京天气”,不能匹配到“今天北京天气”,如果仅仅少了一个“的”,对于本身影响不大。需要有字符的可选能力,所以增加了可选部分功能。使用方括号进行扩起来,表达的意思就是这一部分可有可无。例如如果将“今天北京的天气”中“的”扩起来之后,能够同时到以下两句话:
“今天北京天气”
“今天的北京天气”
一个话术当中有些部分是可有可无的,但在同一部分也有不同种的表达,例如时间可以有今天,明天,后天,也有其他许多不同的说法。对于不同的时间值,每个时间值都写话术,花费的时间较多,所以就将不同的值写到一个 LGF 当中,用或关系表达,用竖线的形式,
例如:
(今天|明天|后天)北京[的]天气[预报]
三个部分,只要有一个能够匹配上,那么该 LGF 就能够匹配上。以下四条话术都能够进行匹配:
今天北京的天气
今天北京天气预报
明天北京天气
后天北京的天气预报
更强大的功能是参数表达,由于许多意图带有参数,例如天气查询,首先需要收集到日期和城市,才能够进行对应的日期查询,否则不知道进行哪个城市的查询。由于城市枚举情况非常多,可能有上百种,如果使用或的情况,话术会非常复杂,所以就将参数表达引入。例如查天气意图有两个参数,分别是日期和城市,那么就将城市这个参数以如下形式引入:
${日期}${城市}[的]天气[预报|情况|状况]
以上就能够替换或情况的表达方式,大大减少配置成本。配置完成之后,以下话术都能够匹配:
今天上海天气预报
下周一北京天气
3号重庆天气状况
用户在表达话术时,开头结尾会有许多语气词,例如请问、查下、告诉我、啊、嗯等不影响意图查询判定的话术。该话术可以使用一个通配符表达,以此增加话术的匹配能力。通配符的语法规则是:
.{下限,上限}
比如.{0,3}表示能匹配0个(没有)到3个任意字符(字符为JTF字符,中文字、标点、英文字母都算一个),匹配能力会进一步得到增强。通配符会导致优先级衰减,例如以下两个意图:
//意图A
.{0,3}吃饭去{0,3}
//意图B
.{0,3}吃饭.{0,3}
意图 A 比意图 B 多了一个去字。所以意图 A 匹配到的通配符会较少,所以会优先出意图 A 再出意图 B。
对于逻辑非,假设存在两个意图:
预定幸福大巴
取消预定幸福大巴
意图A的逻辑表达形式是:
.{0,3}幸福大巴.{0,3}
意图 B 的逻辑表达形式是:
(!退订I取消){0,3}幸福大巴.{0,3}
表达方式不同,意图会发生较大转变。在配置预定幸福大巴时,需要将不包含取消,不包含退订等信息表达出来,通过感叹号的方式,加上感叹号之后,用户输入退订幸福大巴时,就不会匹配到意图 a 上。通配符槽位抽取以及匹配容错知识使用稍微较少,用户遇到可以自行查阅。