一种基于重复数据删除架构的倒排索引表示方法及系统与流程

文档序号:11950366阅读:227来源:国知局
一种基于重复数据删除架构的倒排索引表示方法及系统与流程

本发明属于搜索引擎的倒排索引压缩技术领域,特别涉及一种基于重复数据删除架构的倒排索引表示方法及系统。本发明同样适用于基于社区网络图的数据压缩问题和查询问题。



背景技术:

倒排索引是现代搜索引擎中使用最广泛的数据结构,它由字典和倒排列表两部分组成。其中字典保存了对文档集合进行处理后得到的词项、词项的文档频率以及一个指向该词项所对应倒排列表的指针;倒排列表由多个倒排记录构成,其中每个倒排记录对应包含该词项的一篇文档,倒排记录中记录的信息包括:文档序号(称为docID),词项频率(词项在该文档中出现的次数),位置信息(词项在文档中的出现位置)等。在本发明中,我们假设每个倒排列表仅由一系列docID组成。具体结构示意图参照图3。

随着互联网的快速发展,一方面倒排索引占用的存储空间急剧膨胀,另一方面扫描倒排索引所需的时间更长,降低了搜索引擎的查询处理效率。为了克服索引数据规模持续增长所带来的问题,人们提出了大量对倒排索引进行压缩的方法。对倒排索引进行压缩,不仅能够有效减少倒排索引占用的存储空间,同时能够显著提高查询处理效率。

对任意词项t,其对应的倒排列表一般可表示为:<d1,d2,d3,…,dft>,其中ft是该词项的文档频率,d1,d2,d3,…,dft为原始的文档序号。由于倒排列表中的文档序号是按升序排列的,因此人们提出采用d-gap形式来表示文档序号,即对每个文档序号,用该文档序号和前面相邻的文档序号的差值来表示(第一个文档序号除外),从而得到如下形式的倒排列表:<d1,d2-d1,d3-d2,…,dft-dft-1>,之后再对该列表进行变长编码达到压缩的效果。因为文档序号之间的差值(d-gap)要远小于原始的文档序号,而数值越小意味着需要的编码位宽越短,所以d-gap形式的倒排索引其压缩率要高于一般形式的倒排索引。

尽管d-gap形式的倒排索引需要编码的平均数值更小,但是压缩过程中需要编码的数值个数并没有减少。通过观察我们发现,倒排索引中存在着大量的重复数据部分。尽管同一列表内没有重复的文档序号,但是不同的列表却可能包含相同的文档序列。举例说明,假设倒排列表l1,l2和l3分别具有如下形式:

l1→{1,2,5,14,20,39,40,41,42}

l2→{1,2,5,6,9,10,14,16,39,40,41,50}

l3→{1,2,5,11,14,39,40,41,43,50}

可见l1,l2和l3均包含文档序列{1,2,5}和{39,40,41},如果我们令“A={1,2,5}”,“B={39,40,41}”,则l1,l2和l3可分别归约成如下形式:

l’1→{A,14,20,B,42}

l’2→{A,6,9,10,14,16,B,50}

l’3→{A,11,14,B,43,50}

显然|A|+|B|+|l’1|+|l’2|+|l’3|<|l1|+|l2|+|l3|,即需要编码的数值个数减少了,而需要编码的数越少,编码后所需的存储空间自然也越小。

除搜索引擎外,在处理社区网络拓图的关系数据中,倒排索引模型依然具有可适用性。一种典型的应用场景是在一个完整社区网络中,用户与其他用户间存在某种关系,例如用户间相互订阅、彼此关注等,这里统称为朋友关系。如果用图论描述问题,就是存在这样一个图:图中的每个点代表某个确定的用户,存在连接任意点A和B的边代表用户A与用户B是朋友关系。在这种拓扑结构下,一种典型应用是搜索某个用户的所有朋友中以某个字符串为姓名前缀的用户,并返回候选结果集。

针对上述应用场景,目前存在两种解决方案。第一是记录图中每个点和与其有相邻关系的其他点。当查询处理时,会依次遍历所有与它相连的其他点,通过字符串对比判断这个点对应的用户名是否包含查询字符串作为前缀。这种方法的缺点之一是需要遍历所有朋友节点,其中包含查询字符串前缀的节点一般只占少数;其次是字符串匹配扫描会消耗更多的计算资源。更具性能优势的方案是使用倒排索引结构存储关系数据,建立用户与其朋友用户间一对多映射关系(即用户倒排列表)。再根据统计结果,建立字符串与包含其作为姓名前缀的所有用户间的一对多映射关系(即字符串倒排列表)。当查询处理时,需要分别读取查询用户的用户倒排列表和查询对应的字符串倒排列表,两者的交集即为候选结果集。在这种模型下,一般倒排索引的压缩方法和查询算法同样适用。



技术实现要素:

本发明的目的是解决现有的倒排索引压缩方法需要对每个文档序号进行编码的问题,提供一种新型的基于重复数据删除架构的倒排索引表示方法及系统,能够有效地删除倒排索引中的重复数据,减少待编码的文档序号数目,提高倒排索引的压缩率。

本发明首先提供了一种基于重复数据删除架构的倒排索引表示方法,参照图1,其主要步骤包括:

步骤1(S101),遍历倒排索引中的每条倒排列表,识别并记录不同倒排列表之间重复出现的序列模式;

步骤2(S102),计算步骤1中识别的重复序列模式的模式长度,根据模式长度进行相应操作:当模式长度小于阈值k时,删除该模式;当模式长度大于等于阈值k时,保留该模式。其中阈值k的取值介于4至6之间。之后根据所述各序列模式的字典序,为所述各序列模式分配模式序号;

步骤3(S103),根据步骤2删除简化后的序列模式对倒排索引进行归约,之后分别存储序列模式和归约后的倒排列表,为每个序列模式保留其模式长度和模式序号;

步骤4(S104).进行差值处理:对于序列模式内容中的相邻文档序号进行差值计算;

当前一个元素为文档序号时,对于归约后的每个倒排列表中的文档序号,除第一个元素保存原始值外,剩余元素均减去前一个相邻元素的原始值;当前一个元素为模式序号时,减去前一个相邻序列模式的最大元素;

对于倒排列表中的模式序号,除第一个元素保存原始值外,剩余元素均减去与之最近的前一个模式序号原始值;每个模式序号表示为二元组,包括模式序号或模式序号差值和下一个模式序号的位置偏移量,同时每个倒排列表的最前段记录列表中第一个模式序号的位置偏移量,得到新的倒排索引;

其中所述序列模式是不同倒排列表间重复出现的文档序列,所述模式长度为所述序列模式中的文档序号个数。

为实现上述发明目的,本发明还提供了一种基于重复数据删除架构的倒排索引表示系统。参照图2,该系统包括:

模式识别模块,用于遍历倒排索引中的每条倒排列表,识别并记录不同倒排列表之间重复出现的序列模式;

模式精简模块,是在从模式识别模块得到的结果基础上,计算所述各序列模式的模式长度,根据所述模式长度进行相应操作:当模式长度小于阈值k时,删除该模式,当模式长度大于等于阈值k时,保留该模式,之后根据所述各序列模式的字典序,为所述各序列模式分配模式序号;

索引归约模块,根据模式精简模块得到的删除简化后的序列模式,对倒排索引进行归约,之后分别存储序列模式和归约后的倒排列表,其中为每个序列模式保留其模式长度和模式序号;

差值处理模块,针对索引归约模块存储的序列模式和归约后的倒排列表,进行差值处理:对于序列模式和归约后的倒排列表,分别计算相邻元素间的差值并替换原始元素;对于倒排列表中的每个模式序号,分别记录序号或序号差值和下一个模式序号的位置偏移量,得到新的倒排索引;

其中所述序列模式是不同倒排列表间重复出现的文档序列,所述模式长度为所述序列模式中的文档序号个数。

本发明的优点和有益效果在于,有效地删除倒排索引中的重复数据,减少待编码的文档序号数目,提高倒排索引的压缩率,本发明能够广泛适用于搜索引擎性能优化和倒排索引压缩领域。

附图说明

图1是本发明的基于重复数据删除架构的倒排索引表示方法流程图;

图2是本发明的基于重复数据删除架构的倒排索引表示系统示意图;

图3是现有技术中的倒排索引基本结构示意图;

具体实施方式

为便于理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明作进一步的详细说明。

实施例1、

基于重复数据删除架构的倒排索引表示方法,其流程参见图1。用于实现所述方法的倒排索引表示系统,参见图2。

我们把倒排列表中数值连续的文档序号序列称为一个序列区间,比如序列{10,11,12,13,14}可以称为一个序列区间,而序列{10,11,13,14}则包含两个序列区间,第一个序列区间是{10,11},第二个序列区间是{13,14}。通过观察我们发现,倒排列表中存在着大量这样的序列区间,因此在本发明中,我们提出两种识别不同列表之间重复文档序列的策略:C1.识别任意重复的文档序列;C2.仅识别重复的序列区间。针对序列模式是序列区间的情况,我们采用run-length的表示方法,用于对序列模式的存储方式进行优化,从而进一步提高倒排索引的压缩率。下面介绍序列模式的表示方法:

对应策略C1,假设给定一个包含n个文档序号的序列模式M:

<mrow> <mi>M</mi> <mo>=</mo> <mo>{</mo> <msub> <mi>d</mi> <mn>1</mn> </msub> <mo>,</mo> <msub> <mi>d</mi> <mn>2</mn> </msub> <mo>,</mo> <mo>...</mo> <mo>,</mo> <msub> <mi>d</mi> <mi>n</mi> </msub> <mo>}</mo> <mo>,</mo> <msub> <mi>d</mi> <mrow> <mi>i</mi> <mo>+</mo> <mn>1</mn> </mrow> </msub> <mo>&gt;</mo> <msub> <mi>d</mi> <mi>i</mi> </msub> <mo>,</mo> <mo>&ForAll;</mo> <mi>i</mi> <mo>&gt;</mo> <mn>1</mn> </mrow>

采用d-gap的表示方法同时保留模式长度n,其相应形式为:

Md-gap={n,d1,d2-d1,...,dn-dn-1}

对应策略C2,假设给定一个包含n个文档序号的序列模式M:

<mrow> <mi>M</mi> <mo>=</mo> <mo>{</mo> <msub> <mi>d</mi> <mn>1</mn> </msub> <mo>,</mo> <msub> <mi>d</mi> <mn>2</mn> </msub> <mo>,</mo> <mo>...</mo> <mo>,</mo> <msub> <mi>d</mi> <mi>n</mi> </msub> <mo>}</mo> <mo>,</mo> <msub> <mi>d</mi> <mrow> <mi>i</mi> <mo>+</mo> <mn>1</mn> </mrow> </msub> <mo>=</mo> <msub> <mi>d</mi> <mi>i</mi> </msub> <mo>+</mo> <mn>1</mn> <mo>,</mo> <mo>&ForAll;</mo> <mi>i</mi> <mo>&gt;</mo> <mn>1</mn> </mrow>

采用run-length的表示方法同时保留模式长度n,其相应形式为:

Mrun-length={n,d1}

之所以把基于序列区间的序列模式表示成{模式长度,首文档序号}的形式,是因为通过run-length来表示这些模式,我们只需2个整数就能表示原来n个文档序号的情况,因此需要存储的整数可减少(n-2)个,且n的值越大,run-length减少的整数数目也越多。

假设存在这样一个倒排索引,其中包括三个倒排列表l1,l2和l3

l1→{1,2,3,14,20,21,39,40,49,51,55}

l2→{1,2,3,9,10,11,14,21,39,40,49,55}

l3→{1,2,3,14,16,39,49,53,55}

经过步骤S101,S102和S103后,可以得到基于重复数据删除架构的倒排索引表示:

A→{1,2,3}

B→{21,39,40,49}

l’1→{A,14,20,B,51,55}

l’2→{A,9,10,11,14,B,55}

l’3→{A,14,16,39,49,53,55}

首先对倒排列表l’1,l’2和l’3中的文档序号进行差值处理,具体规则是:1)每个倒排列表中的第一个文档序号保持不变;2)对于剩余的每个文档序号,如果前一个相邻元素是文档序号则减去它与前一相邻元素;3)或当前一个相邻元素是模式序号则减去它与这个模式序号对应的序列模式中最大文档序号。因此我们可以得到处理后的倒排列表序列:

l”1→{A,11,6,B,2,4}

l”2→{A,6,1,1,3,B,6}

l”3→{A,11,2,23,10,4,2}

然后我们用整数二元组描述倒排列表内的每个模式序号,二元组的第一个值是模式序号(当此模式序号为列表内的第一个模式序号时)或模式序号与和它最近的前一个模式序号的差值(当此模式序号非列表内的第一个模式序号时)。二元组的第二个值是列表中下一个模式序号与此模式序号间的位置偏移量(如果此模式序号是列表内的最后一个模式序号,则此值为0)。根据A和B序列内容的字典序大小,我们按升序分别为A、B分配编号1和2。此时上述的倒排列表序列可以描述为:

l”1→{(1,3),11,6,(1,0),2,4}

l”2→{(1,5),6,1,1,3,(1,0),6}

l”3→{(1,0),11,2,23,10,4,2}

对于存在模式序号的倒排列表,我们需要额外存储一个整数用以指示第一个模式序号在倒排列表中的位置偏移量。对于上述示例,每个倒排列表的第一个模式序号都是A且都是列表内的首元素,因此偏移量统一为1。此外,还需要对序列模式中的文档序号进行差值处理,即除第一个文档序号保持不变外,剩余元素均减去前一个相邻元素。最终的倒排索引可以描述为:

A→{1,1,1}

B→{21,18,1,9}

l”1→{(1,3),11,6,(1,0),2,4}

l”2→{(1,5),6,1,1,3,(1,0),6}

l”3→{(1,0),11,2,23,10,4,2}。

实施例2

我们在TREC GOV2数据集上对比了各种形式的索引编码后每个文档序号所需的比特数以及对应的解压速度,其中EF代表基于最优分段策略和Elias-Fano编码的倒排索引表示方法;TD表示基于传统的d-gap的倒排索引,R表示基于重复数据删除架构的索引表示形式(I和II表示所采用的重复序列识别策略,分别对应前文叙述的策略C1和策略C2)。对所用倒排索引数据集做如下说明:

(1)TREC GOV2为2004年从.gov域名抓取下来的数据集,共包含2500多万个网页;

(2)我们使用TREC 2009查询集作为查询测试集,共包含32244条查询,用于测试各种形式的索引针对该查询集的平均解压速度;

(3)URL表示根据网页地址对GOV2数据集进行重排后所得的数据集,TMF和IBDA是对GOV2数据集进行重排后所得的数据集。

表1

在表1中,我们对比了不同形式、不同重排策略下各倒排索引表示方法的实际压缩效果,其中R和TD方法均使用OptPForD编码方法。从实验结果可以看出,基于重复数据删除架构的索引通过上述编码,其压缩率要优于传统d-gap形式的索引,压缩率均可提高10%以上;与EF方法相比,R-I和R-II仍保持一定优势。此外,由于R-I能比R-II识别更多的序列模式,因此其压缩效果更好。

表2

表2给出了对应的解压速度对比结果。由于Elias-Fano编码中不涉及明显的解压还原操作,因此表中省略了对应的统计结果。从实验结果可以看出,基于重复数据删除架构的索引相比于传统的d-gap形式的索引更利于算数解码,其中在基于IBDA和TMF重排的倒排索引上,R方法能够取得明显的解压加速效果。而相比于R-I,由于R-II通过模式长度和首文档序号即可恢复出完整的序列模式,因此节省了大量访存操作,故其解压速度一般高于R-I的解压速度。

针对社区网络数据,我们在Facebook部分公开的关系数据集上对比了上述几种索引表示方法的实际压缩效果,各方法名称和含义与上述实验部分相同。这个数据集中包含约5100万个用户,并记录了用户间的订阅关系。我们将原始数据整理为倒排索引格式,并根据查询集统计了查询涉及数据的解压速度。

表3

表4

表3对比了原始顺序、对用户ID进行IBDA和TMF重排后,倒排索引的实际压缩效果。从中我们可以看到,结合IBDA和TMF重排策略,两种R方法在压缩效果上表现更好。其中R-I相对EF方法,仍能保持一定的优势。而相比传统的TD方法,R方法始终具备更高的压缩率。表4对比不同重排策略下,各方法的解压速度。从中我们可以看到,除原始顺序外,重排后的R方法比TD方法有约3.8%-17.1%的解压速度提升。

以上对本发明的倒排索引表示方法及系统进行了详细介绍,本发明中应用了具体个例对本发明的原理及实施方式进行阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1