《信息检索导论》第三章总结


一、Hash Table和Search Tree


实现dictionary的方法主要有哈希表搜索树(二叉树、B树、AVL树);

实现哈希表的dictionary的优点:

(1)查询效率O(1);

缺点:

(1)哈希冲突。

(2)不支持模糊查询。

(3)哈希函数需要不断变化以适应需求。

实现搜索树的dictionary的优点:

(1)支持模糊查询。

缺点:

(1)查询效率相对较慢。

(2)树要保持平衡。


二、单个通配符查询


1.尾通配符查询


比如abc*,即通配符出现在尾部的查询就是尾通配符查询,这种查询使用搜索树可以完成,方法就是以a,b,c的顺序遍历树。如下图所示:


如果要查询ab*,则

(1)比较根节点:因为a在a-m中,所以往左走。

(2)因为ab在a-hu之间,因此往左走。

(3)剩下的子节点就是满足要求的结果,遍历并取得他们的posting即可。


2.头通配符查询


如果要进行头通配符查询,则需要引入反向B tree的概念。反向B tree是把B tree查询的顺序反过来。比如要查询*cba,则查询顺序为a,b,c,举例:


查询*ba的步骤:

(1)比较根节点,因为a在a-m之间,则往左走。

(2)因为ba在aa-uh之间,因此往左走。

因此下面的子节点就是满足条件的结果。


3.一般通配符查询


比如abc*cba,只需要分解成abc*和*cba,并分别运用1,2的知识即可。但要注意查询出的结果必须在abc*cba中过滤一遍。因为比如abcba满足abc*和*cba,但是却不满足abc*cba;

三、专用于通配符查询的索引结构


1.permuterm index




方法:$表示一个词的末尾(正则),即如果ab,则表示成ab$,并进行轮排,形成ab$,$ab,b$a,并指向ab;

在处理单个通配符查询时,如果要查*b,则先添上$,然后旋转,使得*在词的尾端,即b$*,并在搜索树中查找。发现b$a满足要求,则ab满足要求。

在处理多个通配符查询时,如果要查询a*b*,则先添加$即a*b*$,然后旋转为$a*b*,先查询$a*,取得的结果再通过a*b*过滤即可。

缺点:词典会变得很大。


2.K-GRAM index


K-GRAM的定义:k个连续的字母的组合,在第二十章中会讲到k-shingle,意思是k个连续单词的组合。

比如:hello的3-gram是:hel,ell,llo;

索引结构:

k-gram index的dictionary是所有词的k-gram的集合。

k-gram index的posting是匹配k-gram的单词序列。

索引规则:

在建索引之前必须在单词首尾添加$;再进行k-gram indexing;

查询方法:

举例:查找com*;利用3-gram 索引

(0)添加$,即$com*$; 如果是2-gram,则是$c , co , om

(1)先通过3-gram index进行查找匹配的单词;

(2)因为3-gram index查找出的结果并不精确(比如coordcom,匹配$co,com,却不能匹配$com*),因此需要在$com*进行过滤,才能得出结果。

总结:k-gram索引的速度非常慢;因为需要先对k-gram索引取得单词(原本的单层索引变成了两层索引),再进行一次过滤,才能进入普通的倒排索引中查找docID;

而轮排索引不需要后过滤,但是空间消耗很大;


四、拼音校验方法


主要原则:先找邻近度大的词,如果邻近度相同,则找常用词;


1.编辑距离


通过动态规划的方法,把两个单词看成二维矩阵,进行计算。


比如PARIS 和 ALICE


注意:编辑距离有个缺点,就是如果要让查询和每个term计算编辑距离,则效率太差,因为在倒排索引的dictionary中有几千万个term;

2.利用k-gram计算Jaccard系数

Jaccard系数:给定集合A和B,J=(AB)/(A+B-AB);

假设A和B是两个单词,长度为m和n,因此A和B分别有m-1个和n-1个k-gram;

给定一个查询Q,计算出Q所对应的k-gram后,即可对k-gram索引遍历,对每个单词和Q计算Jaccard系数,AB可以理解为有多少个k-gram重叠,而A+B-AB可以理解为合并后一共有多少k-gram(通过A和B的k-gram长度和 减去AB的k-gram overlap的数量),并取得Jaccard系数高出阈值的单词。

总结:可以先进行k-gram索引,然后再进行编辑距离的计算。

当然以上只是适用于单独单词的拼写错误,如果类似于I are happy.这种查询,就检测不出错误,因为单独的单词都是对的。

检测方法:当进行查询后返回的结果很少,则对查询词组有所怀疑,则会对每个单词进行替换,使得找出返回结果多的词组。

3.语音校验

通过把发音类似的单词放在同一个组(通过语音哈希函数),称为soundex算法。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值