什么是开放收索的查询分析功能?

 
0 15
半夏的溫柔
2019-11-25 16:42

0d6a9b939b9d3671b8672ee7.png

大家好今天主要介绍一下OpenSearch的查询分析功能。

查询分析功能主要在查询链路工作。如果没有使用查询分析功能,发送给OpenSearch的请求,经过验签、限流和一些基础功能限制的检查之后,会发送给搜索引擎进行查询。如果配置了查询分析功能,Query在发送给搜索引擎之前,会先根据查询分析功能中所配置的功能做查询意图理解,然后做一些Query的改写,再把改写后的Query发送给搜索引擎。

在介绍查询分析功能之前,我们先来看一下查询分析的一个入口。

686b15f1971d2d431059c5f2.png

这是登陆OpenSearch控制台的一个App列表界面。我们点击这个版本可以进入App的详细情况。

06b0dfb9f2b274a9ae8bc090.png

查询分析的入口在列表左边,高级配置→查询意图理解。

03550772e54aaadf6c0033dd.png

这个页签中会显示你所有的查询分析的规则,我们点击添加规则。

b800993efd77c03d9226ec0f.png

首先输入以下规则名称,然后选择索引的范围。索引范围有通用分词和电商分词两种索引类型。如果你选择使用通用分词索引,下面可以选择的行业类型就只有通用这一种;假如你选择了电商分词索引的话,可以选择的行业类型就包括了通用和电商两种类型。

接下来我们以电商场景为例来进行进一步的介绍。

fd883bbefba2134fc10c47b7.png

这边就以上图的这个demo_app为例来进行查询意图理解功能的介绍。

b466feb63816037edacae8bd.png

这边可以看到添加了一个历史搜索。

594fe4dd3caaa9ae27be8a63.png

这里面包括了最近搜索的Query和当时搜索Query所配的一些子句和参数的情况。

我们先来看一下不配任何查询分析功能的搜索测试结果。

2231a464ebbc54dad756e569.png

点击搜索,可以看到查询结果为空。因为在默认情况下,引擎是要召回Query分词之后的所有词的一个结果。也就是说一个Doc同时包含“杨幂 同款 耐克 修身 连 衣 群 包邮 .”,这些term才会进行有效召回。这边没有召回的一个原因是,连衣裙的裙字写错了。这在搜索中其实是非常常见的一个情况,用户经常会写错查询的Query中的一个词或者几个字。这时候就需要用到查询意图理解中的拼写纠错的功能。我们来看一下它的配置。

8b4e35b027329090210ee3ca.png

在查询意图理解中点击添加规则,选择刚刚的电商分词的索引,选择电商行业,然后给它配上一个拼写检查,点解确定后等待生效。

66f0f3c371cf40ad00352c33.png

这边可以点击效果测试按钮直接跳到查询分析功能的效果测试。

3468e3c155fbc1aca1c870ae.png

还是以刚刚那个Query为例,配置带有拼写纠错功能的查询意图理解后,我们看到它已经能够成功召回“杨幂同款耐克修身连衣裙包邮.”,这个裙是正确的。这上面有一个提示,以下结果是查询这个正确的裙的Query的一个结果,如果你仍然想要搜索原来的这个查询结果的话,也可以点击后面这个链接。

点击查询查看查询分析处理结果。

68ec7d03eb3808811c6e667f.png

可以看到这边有一个拼写纠错,处理之后的拼写纠错结果是“杨幂同款耐克修身连衣裙包邮.”,连衣裙的裙变成了正确的,显示这个纠错等级是一个全替换查询。

拼写纠错功能不仅可以对错误的汉字进行纠错,如果Query中有一些拼音夹杂,在它认为这个拼音跟前后的汉字能够组成一个词组的时候,它也会把拼音给纠成一个汉字。比如我们把杨幂的幂写成了一个拼音的mi来试一下。

89245cc5bdf0f399ee7544c3.png

结果这边可以看到,它成功的把杨幂的mi纠成了汉字的幂。

在配置了拼写纠错功能之后,我们成功的召回了一条Doc,但这个召回的量有点少。这是因为引擎在默认的情况下,只召回包含这个Query分词之后所有词的结果。也就是说,只有一个Doc同时包含了“杨幂 同款 耐克 修身 连衣裙 包邮 .”,才会进行有效的召回。但是在一个Query中并不是所有的词都有意义,比如这个里面的标点符号“.”,我们认为它是一个没有意义的词,希望他不参与Doc的召回。这时候就需要用到查询意图理解中的停用词功能。我们来看一下这个功能的效果。

bbaac626d69497a24e38dbe1.png

还是以刚刚配的这个查询意图理解作为演示,我们来添加一下停用词功能。等待它生效后还是点效果测试进去。

160a0c11b979e4841c9d5071.png

可以看到,相比于刚刚只召回了完全匹配的这条Query,就是包含“.”的这条Query,这里还多召回了一条“杨幂同款耐克修身连衣裙包邮”,不包含“.”的Query。因为在默认情况下,系统的通用词词典都是一些标点符号。你如果想根据业务的情况配置一些其它的停用词,也可以有一个干预的功能,这个功能我们稍后再详细介绍一下。

再来看看这次的查询分析处理结果。

c3e302a01946610ffb5a5bd2.png

可以看到刚刚拼写纠错的结果还是在,然后又多了一个停用词的结果,“.”这个标点符号被成功识别出来了,作为停用词它就不参与实际的召回了。

c7665711f5015be709f0011f.png

看这个系统实际查询词中就不包含这个标点符号了。

查询意图理解还有一个同义词的功能。还是以这个Query为例。我们现在召回的Doc其实只包含了中文的耐克,但实际App中的Doc可能会同时包含中文的耐克,还有英文的Nike。这个时候就需要使用查询意图理解中的同义词的功能。我们来看一下它的配置情况。

81d49f27abf110f95586afba.png

这里把同义词的功能给勾选上。生效之后,点击效果测试。

还是以刚刚的Query为例。

0b116ef0d8088544a308bd18.png

可以看到比刚刚多召回了两条Doc,这两条Doc的就是将前面两条中的“耐克”变成了“nike”,看一下查询分析的处理结果。

80cbeb24d9f52bfe7592e20c.png

可以看到识别出来nike这么一个同义词。

88bfec733c25553bd0a57a1c.png

这边系统实际查询词我们也可以看出来。

配置了刚刚的停用词、拼写纠错还有同义词功能之后,我们可以看到成功的召回了四条Doc,但实际对这个召回量可能还不太满意。你可能会觉得用户输入的这个Query的意图只是想搜耐克连衣裙,这些包邮、修身等等,这些词对于用户的意图其实都是无关紧要的,没有这些词的Doc也要进行召回。这个时候就需要使用查询意图理解中的一些其他功能了。

我们来看一下,比如实体识别的这个功能就可以很好的达到刚刚我们想要的那个效果。

a7e2927dfbab7a9378783d38.png

实体识别是对系统Query分词之后的每个语义实体进行一个实体类型的识别。每个语义实体都会被打上相应的标签,然后可为不同的类型配置相应的重要度。我们来看一下就按照这个默认配置开启实体识别后的一个搜索的结果。

facbb1b449e8da908ffc45a2.png

可以看到比刚刚的搜索结果多召回了一条“杨幂同款耐克修身连衣裙”,它把包邮这个词去掉了。可以看到系统实际查询词有两条。默认情况下,它会以第一条Query召回,如果第一条Query没有命中Doc的话,才会以第二条Query进行召回。

来看一下它的查询分析处理结果。

8149fa60b853f28c637a1362.png

可以看到这边多了一个实体识别的处理结果。它把杨幂识别成人名,同款识别成了后缀,耐克识别成品牌,修身识别为款式元素,连衣裙是一个品类,包邮是营销服务,然后还有最后一个“.”是一个符号。刚才看到在第一条Query中,其实是把杨幂、耐克、修身、连衣裙都保留,然后把包邮和同款RANK掉了。这个其实是根据刚刚实体识别中配置的高、中、低三种重要性来选择的。

e0960b1208cf151ee6ff7de8.png

再来看一下刚刚改写出来的两条Query,第一条Query可以把它理解成一个偏保守的Query;第二条可以理解成一个偏激进的Query。

在默认情况下,第一条Query会包含实体识别中重要性高级和中级两种词。这边看到它中间的人名、品牌、款式元素、品类都是参与召回的,然后营销服务和后缀都是被RANK掉的。

第二条只会包含高重要性中的词,其余的中等重要性和低重要性的实体类型都会被RANK掉。可以看到他只包含了耐克这个品牌和连衣裙这个品类,其它的词都是被RANK掉的。

RANK的意思是,这个词并不参与Query的召回,但是包含这个词优先级会更高一些,排序结果更靠前。

我们来看一下刚刚的召回结果。

3968bc2554f46e6c20235932.png

这个地方可以看到,我们的召回Doc中已经多了一条不包含包邮的结果。

如果想要进一步扩大召回结果,有两种可选的方案:

第一种方案是,通过调整实体识别的重要度。

比如刚才举例中的Query,如果你觉得杨幂这个人名其实对收索意图不那么重要,这边可以把人名这个实体类型从中重要性中去掉,然后把它放到低重要性中。

3af753e40f251f7988fdf2d4.png

再来看一下这样做的效果。

3da37792af9f66049031dd70.png

可以看到,相比于刚刚的5条召回结果,又多召回了两条不含杨幂的结果。

88f5c780b19eff7d913a3de6.png

在第一条Query中,杨幂这个人名本来是要参与召回的,现在已经被RANK掉了,但是包含杨幂这个词的Doc排序的优先级会更加高一点。

第二种扩大召回的方案是设置召回的参数。通过增加一个re_search参数,设置阀值。

3bd96db6e600585d510b6c5b.png

我们看到的两条Query,在默认情况下,使用第一条Query召回,只有当第一条Query没有召回结果的时候,才会使用第二条Query进行召回。但是我们可以为第一条Query的召回设置一个阀值,如果它的召回结果小于这个阈值,就会使用第二条Query进行召回。当然,如果第一条Query的召回结果数大于这个阈值,还是会默认使用第一条Query进行召回。

我们来看一下配了参数之后的效果。

35df1a8cf5fdf246c44af9e8.png

可以看到,相比于刚刚的7条召回结果,这边多召回了2个Doc。

01b355c0cf1e66b820e0b1d0.png

这边多召回的Doc是“耐克连衣裙”和“nike连衣裙”,只包含了耐克这个品牌,还有连衣裙这个品类,其他的词都被RANK了,它这个结果就是使用了第二条Query进行召回。

下面我们再来看一下查询分析功能的干预。干预是一种在对系统结果不满意的情况下的一个backup。

我们先来看一下刚刚查询分析的结果。

5724fdb4f1de3a0919df9ff4.png

这边有拼音纠错的结果、实体识别的结果,还有停用词和同义词的结果。这些都是我们刚刚配置的查询分析的功能。我们再来添加一个干预词典。

ab1c4b98185afb9709b1d432.png

先来添加一个停用词的词典,输入词典名称→创建。

ae9a3a5a69154101199ecb83.png

点击管理来添加数据。

815ccef5115bcb85e068ecd9.png

新增一个干预词条,这边有添加和屏蔽两个选项。添加就是添加一个新的停用词,屏蔽就是屏蔽系统原有的停用词。还是以前面的这个Query为例,我们这边添加一个停用词“同款”。

提交生效以后,把刚刚我们配置的词典添加到查询分析结果中,再对刚刚的Query进行一个测试。

c2b36974121879001a2e9fc4.png

可以看到我们添加到干预词典中的“同款”在系统实际查询词中已经没有出现了。

再来看一下查询分析的处理结果。

9058b29d873e79fc09a02b2c.png

看到停用词一栏,除了刚刚的标点符号,同款也成功的被系统识别成了一个停用词。

我们再来看一下其它的干预词典的情况。比如我们创建一个拼写纠错的词典。

3695c44317326306ad5b2ef5.png

还是点击管理来添加词条。

1fbfba05c4259d890534779a.png

这次我们添加一个屏蔽的干预词条。比如说刚刚“连衣群”被纠正成正确的“连衣裙”。现在我们就在这里屏蔽系统的这个连衣裙的词条。等待以后把它添加到我们配置的查询意图理解中去。再进行搜索测试,看一下结果。

5f929d863bd5aba737766daf.png

这边可以看到,已经不会对刚刚的“连衣群”进行纠错了。再来看一下查询分析的处理结果。

d8fc752450e282120a8858a9.png

拼写纠错只把“杨mi”成功的纠错成“杨幂”,然后“连衣群”这个拼写纠错已经被我们成功地屏蔽掉了。

同义词的干预词典添加方法也是一样,这边我们就不一一举例说明了。

最后我们再来看一下实体识别的干预情况。同样的方法,我们来添加一个实体识别的词典。

db20fee0f0b9e678a60b1c1c.png

需要注意的是,在添加实体识别干预词典的时候,需要先选择一个关联的分析器。因为不同分析器的分词结果是不一样的,这个分词结果会进一步影响实体识别的结果,所以在添加实体识别干预词典的时候,需要先选择一个分析器,然后这个实体识别的干预词典也只能被用在相关分析器的查询分析流程上。

ff486a18193148b6f248489e.png

新增一个干预词条。这边要注意,在添加实体识别的干预词条的时候,首先要对实际查询的词条进行一个识别。在这个识别的基础上,对原有的识别结果进行一个修改。比如原来“杨幂”是被识别成了一个人名,这边我们把它修改成一个品牌。

等它生效之后把这个干预词典添加进去。来看一下实体识别的干预效果。

a8f6c14d574135fd3be0e6d7.png

这边可以看到杨幂这个词已经在我们的实际查询词中了。查看查询分析的处理结果。

886909bcbbfde8bee436f56c.png

可以看到“杨幂”这个词已经从一个人名成功的变成了一个品牌,并且它在两条Query中都会参与召回,因为品牌是一个高优先级的实体类型。

以上就是我要介绍的查询意图理解的全部功能,更多详情参见:开放搜索

本文内容由互联网用户自发贡献,版权归作者所有,本站不拥有所有权也不承担相关法律责任。如需转载请按以下形式注明来源: 复制

文章来源:阿里云牛优惠资讯网
文章标题:什么是开放收索的查询分析功能?
原文地址:https://aliyunnew.com/a/What-is-the-query-analysis-function-of-open-retrieval.html
发布时间:2019-11-25 16:42
相关话题
没有相关话题
猜您喜欢
没有相关数据
回帖
  • 抢占沙发~~
本月热门
API网关在使用中有哪些常见问题? 0
如何设置流量控制? 0
如何生成和使用SDK? 0
如何调用API? 0
如何创建API网关? 0
阿里云邮件推送服务中的域名如何配置? 0
阿里云邮件推送服务中如何新建域名? 0
阿里云邮件推送服务中如何新建收件人列表? 0
阿里云邮件推送中如何新建模板? 0
阿里云邮件推送中如何新建发信任务? 0