query识别讲解及常见问题处理
半醉半醒半疯Z 发布于2020-10 浏览:3695 回复:1
2
收藏
最后编辑于2020-12

只介绍整个识别过程中可看到的数据,不涉及具体的技术,目的是了解语句是如何识别以及query识别不符合预期之后该怎么检查与调整。

识别过程
对query分词 ==> 分词结果标注词槽 ==> 给出识别候选 ==> 选定最终识别结果 ==> 展示结果

识别过程对应的参数
lexical_analysis下的basic_word ==> lexical_analysis下的etypes ==> candidates ==> qu_res_chosen ==> schema

详细讲解

以查天气的demo为例,时间(user_time)、地点(user_loc)两个词槽,分别复用系统时间(sys_time)、地点(sys_loc)词典,且地点词槽添加自定义词典值“北京”。
query:今天北京天气怎样


对query分词
以上图为例,语句被分词模块分成了4个基本词部分,分别是“今天”“北京”“天气”“怎样”
分词是最基本最重要的,只有分词结果与期望识别的词槽一致才能匹配词槽

分词结果标注词槽
以上图为例,etypes表示该基本词被哪些系统词典和词槽自定义词典收录
如果某个词同时存在于词槽自定义词典和系统词典中,会根据自定义词典给出结果
只要基本词被某个词槽收录,就说明该基本词在词槽中配置了,与etypes结果中的顺序和type的显示无联系。

给出识别候选
以上图为例,candidates给出的是识别候选,如果query可以被多个模板或者同时被模板、样本识别到,就会有多个。

informal_word:匹配的口语化词,informal_word:匹配的特征词

选定最终识别结果
以上图为例,qu_res_chosen一般都是candidates的第一个候选结果。

展示结果
确定识别结果之后,模型就会根据该结果给出schema下的意图、词槽信息


常见问题
1、query不识别或识别不符合预期,该怎么检查?
答:如果分词不符合预期词槽,就使用分词干预(词槽管理右上角高级设置中),可以将两个合在一起的词分开。如果分词结果未标注词槽,说明这个词没在词槽词典中配置,需要添加自定义词典。如果这两方面都没有问题,就得检查模板、样本,需要有模板、样本这种识别语句的配置才行。如果有模板,那可能就是模板配置异常,可以参考这份文档理解模板的用法:https://ai.baidu.com/forum/topic/show/965983

2、basic_word里面怎么有多个词?
答:如果自定义词典值在分词模块下是由多个词组成的,就显示多个,对识别没有影响。

3、分词与标注词槽介绍
答:这两种操作是一次性的,语句只会进行一次分词,然后根据配置的词槽进行标注。给出结果之后无法进行二次调整,也就是只会根据分词结果去识别匹配,如果觉得分词有问题,就使用使用分词干预(词槽管理右上角高级设置中)。另外,分词与标注是优先给出长的结果,比如,一个词槽包含“北京”,一个包含“北京今天”,输入“北京今天天气怎样”,会识别“北京今天”。

4、怎样避免分词问题和达到更好的识别效果?
答:1、按照一般正常的字词结构去添加词典值,不需要在词典值中添加语气词或者对识别没什么作用的字,比如“今天的”,这个“的”就没什么意义。2、如果标注了样本,样本中标注的词典值最好也添加到自定义词典中,因为标注的结果只对那条样本有效。

5、怎么判断是模板还是样本识别的query?
答:以candidates中的结果来说,模板的match_info数据会比较多,第一个就是group_id(模板优先级,数字越小优先级越高,界面显示越靠前),否则就是样本识别的。

6、比较相似的两句query怎么识别结果不同?
答:每条语句都是根据配置数据解析的,不能单从query相似去判断结果一定相同。这种情况一般都与样本识别有关,因为除非是样本原句,否则置信度都不会很高,所以即使在相似的情况下,置信度不同,识别结果不同。在确定不使用模板识别query的前提下,对识别有误的query进行样本标注来处理。

7、同一query单轮和多轮下识别结果怎么不一样?
答:这种情况一般是因为query符合了多个意图的模板,而UNIT在选定结果时有个策略,会优先给出与上轮意图一致的识别结果。如果不期望出现这种情况,可以根据candidates下的识别结果去调整数据,比如提高模板阈值,让不期望的意图不识别到query。如果无法通过调整配置解决,就在对话时重置对话(接口调用时bot_session置空),保证query是首轮输入的。

8、样本识别的结果有问题怎么办?
答:样本识别的话,基本就样本原句、样本inst策略(query属于样本原句更换词典值的语句)和泛化识别三种,前两种就是根据实际需要调整样本原句即可,最后一种,如果期望识别,就将query标注样本,如果不期望识别,就将query标注为SYS_OTHER意图。

9、模板识别的结果有问题怎么办?
答:模板就两个状态,识别与不识别,识别就是因为query符合了模板,可以通过调整阈值、调整模板必须匹配等手段去解决。模板的具体配置可以参考文档:https://ai.baidu.com/forum/topic/show/965983

10、怎么对话的时候,上次识别的词槽还在?
答:如果未重置对话,每轮对话的词槽都会一直保留,新识别的词槽会直接显示,原有的词槽值会被新query中的结果替换。

11、意图、词槽不置信和多意图确认这种情况怎么处理?
答:这些都是数据配置不合理引起的。意图、词槽不置信基本是样本识别的,query不是样本原句,置信度过低;多意图确认是模板识别,query符合多个意图模板,需要调整模板。这种不置信的系统反问,直接关闭对话反问频率即可(bernard_level置0),会默认肯定或选择第一个,可根据此策略调整数据。

12、什么是置信度?
答:置信度是模型对该语句识别之后给出的一个分数,分数越高说明模型越能够识别该语句。置信度是输出参数,无法调整。

13、特征词是怎么解析的?
答:分词结果不会给出特征词的结果,但是特征词也需要与分词结果一致才能识别。可从识别结果中查看,match_keywords表示特征词。

14、哪里可以看到口语化词?
答:识别结果中的informal_word。

15、对话窗口报错“对话样本 请求参数不正确”怎么办?
答:query包含异常内容,比如换行、tab、表情、特殊字符等,query需要是正常的汉字、字母、数字和常见符号。

16、批量测试怎么使用?
答:先下载参考demo,然后根据demo的要求配置需要测试的query,上传文件之后,点击开始解析,解析完成之后,下载文件,查看识别结果。批量测试不占用每天的对话次数。

17、单条测试的query不包含词槽怎么在词槽那里有显示?
答:显示的不是词槽,是指那一行的数据,如果有词槽会使用[]标注出来。

18、怎么更改已识别的词槽词典值?
答:因为系统有内置的词槽澄清模板(CMD_UPDATE_词槽名 意图的模板),所以,直接输入需要更改的词槽词典值即可。内置模板为了避免误识别等情况出现,阈值卡的较高,所以如果想在进行词槽澄清或者已识别词典值更改时,输入词典值的时候包含一些其他内容,就需要自己配置词槽澄清模板。添加对话模板,选择意图时下拉,会看到所有词槽的CMD_UPDATE澄清意图,选择需要的词槽意图,按照期望实现的澄清语句去配置模板即可。需要注意,这种澄清只能选择该词槽,没有其他词槽可选,可以使用汉字和特征词。

收藏
点赞
2
个赞
共1条回复 最后由unit_internal9编辑于2020-12
#2unit_internal9回复于2020-10

写的好~

0
TOP
切换版块