CN102081659B - 倒排索引压缩的预处理方法 - Google Patents

倒排索引压缩的预处理方法 Download PDF

Info

Publication number
CN102081659B
CN102081659B CN2011100071709A CN201110007170A CN102081659B CN 102081659 B CN102081659 B CN 102081659B CN 2011100071709 A CN2011100071709 A CN 2011100071709A CN 201110007170 A CN201110007170 A CN 201110007170A CN 102081659 B CN102081659 B CN 102081659B
Authority
CN
China
Prior art keywords
deviation
integer
tabulation
overbar
designated
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN2011100071709A
Other languages
English (en)
Other versions
CN102081659A (zh
Inventor
敖耐勇
吴迪
张帆
刘晓光
王刚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nankai University
Original Assignee
Nankai University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nankai University filed Critical Nankai University
Priority to CN2011100071709A priority Critical patent/CN102081659B/zh
Publication of CN102081659A publication Critical patent/CN102081659A/zh
Application granted granted Critical
Publication of CN102081659B publication Critical patent/CN102081659B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

一种倒排索引压缩的预处理方法。所述的倒排索引压缩的预处理方法包括:对每个倒排列表,以docID的索引为横坐标、值为纵坐标作二维散点图,基于最小二乘法生成一条线性回归直线,使得图中所有点到该直线的竖直离差的平方和最小,得到与该倒排列表等价的竖直离差列表;对每个竖直离差列表,将所有竖直离差向上取整,得到与该竖直离差列表等价的整数离差列表;对每个整数离差列表,求出最小值,同时将所有整数离差减去这个最小值,得到与该整数离差列表等价的非负整数离差列表。基于本发明的压缩算法具有较高的压缩比,提高了并行解压效率,可以更好地与集合归并方法结合。

Description

倒排索引压缩的预处理方法
【技术领域】
本发明涉及倒排索引压缩领域,特别是涉及倒排索引压缩的预处理方法。
【背景技术】
全文搜索引擎中使用最广泛的数据结构是倒排索引。倒排索引包含两个主要部分:字典和倒排列表。其中字典为关键词和倒排列表之间建立一一对应关系,而一个关键词的倒排列表由一系列称为张贴的基本单元组成。给定关键词,其张贴中可能含有该关键词出现的网页的文档标识符(称为docID)、频率和位置等信息,也可能只含有该关键词出现的网页的docID。在本发明中,我们假设每个倒排列表由一系列docID组成。
全文搜索引擎不断接收用户查询请求,对查询请求进行分词得到若干关键词,然后通过倒排索引中的字典找到与所有关键词对应的倒排列表,最后对它们进行集合归并,并将归并结果按某种方式返回给用户。随着互联网技术的迅猛发展,互联网上的网页越来越多,倒排列表越来越长,其中的docID值也越来越大,使得倒排索引集合越来越大。主流搜索引擎通常将倒排索引压缩保存(主要是压缩其中的倒排列表),以减少存储空间,更好地利用传输带宽,降低系统I/O压力。
参阅图1,示出了倒排索引压缩流程,具体步骤如下所述:
步骤S101、读取计算机存储器中待压缩的倒排索引。
步骤S102、对倒排索引,使用某种方法进行压缩。
步骤S 103、将压缩后的数据存入计算机存储器。
倒排列表中的docID值是非负整数,通常较大。为了达到理想的压缩比,我们必须对倒排列表进行预处理,将其转化成等价的包含较小元素的列表,然后对上述列表进行压缩。倒排列表中的docID值呈升序,相邻docID的差值(称为d-gap)非负,且相对于docID值较小。现有的倒排索引压缩方法都是基于压缩等价的d-gap列表,以达到理想的压缩比。
参阅图2,示出了现有的倒排索引压缩方法的预处理方法(称为d-gap预处理方法)的流程,具体步骤如下所述:
步骤S201、对每个倒排列表,求相邻docID的差值,得到与该倒排列表等价的d-gap列表。
对倒排索引预处理后,可以采用任意压缩方法对与倒排列表等价的列表进行压缩。
参阅图3,示出了PForDelta(简称为PFD)方法的压缩流程,具体步骤如下所述:
步骤S301、将待压缩列表划分成等长的段,对每段选取最小的整数b,其中b是0与docID位宽之间的非负整数,使段内大于等于2b的元素的比例少于预设值。段长作为参数可调,为了达到最好的压缩比,一般取为2的幂,如128、256等。我们把大于等于2b的那部分元素称为异常点,异常点的比例的上限作为预设值可调,如可设为10%。
步骤S302、对每段以b位存储每个小于2b的元素。
步骤S303、对每段以b位存储相邻异常点的偏移。这相当于将异常点以链表的方式组织起来了。
步骤S304、对每段压缩所有异常点的值。这里可以简单地以docID位宽存储异常点的值,也可以使用压缩方法(如S16)对异常点进一步压缩。
PFD方法中,当相邻异常点的偏移大于等于2b时,它们之间的某些元素(小于2b)要强制变为异常点,这使得压缩比下降。为了提高压缩比,可以将异常点分成低b位和高若干位两部分,低b位与非异常点一起存储,高若干位以及相邻异常点的偏移单独处理,这种改进方法称为NewPFD方法。
显然压缩比是倒排索引压缩方法好坏的一个考量指标;另外,压缩只需要离线一次完成即可,而解压是在线频繁被调用的,因此解压速度是另外一个考量指标。PFD方法可以达到非常好的压缩比,但是将异常点组织成链表的方式使得并行解压效率低下;所有基于d-gap预处理方法的压缩方法,解压过程中都需要对d-gap列表求前缀和来恢复docID,不允许随机访问docID值(因为它依赖于它的前驱的值),这使得并行解压效率低下,且不适合与集合归并方法结合。
【发明内容】
本发明的目的是针对现有的基于d-gap预处理方法的倒排索引压缩方法的并行解压效率低下、不适合与集合归并方法结合的不足,提供一种新型的基于线性回归的倒排索引压缩的预处理方法。
本发明提供的倒排索引压缩的预处理方法,包括:
步骤1、对每个倒排列表,以docID的索引xi为横坐标、值yi为纵坐标作二维散点图,xi、yi都是非负整数,其中i=1,...,n,n为正整数,基于最小二乘法生成一条线性回归直线y=f(x)=α+βx, β = Σ i = 1 n ( x i - x ‾ ) ( y i - y ‾ ) / Σ i = 1 n ( x i - x ‾ ) 2 , α = y ‾ - β x ‾ , 其中 x ‾ = 1 n Σ i = 1 n x i , y ‾ = 1 n Σ i = 1 n y i , 使得图中所有点(xi,yi)到该直线的竖直离差yi-f(xi)的平方和
Figure GSB00000809671600025
最小,得到与该倒排列表等价的竖直离差列表;
步骤2、对每个竖直离差列表,将所有竖直离差yi-f(xi)向上取整记为
Figure GSB00000809671600026
得到与该竖直离差列表等价的整数离差列表;
步骤3、对每个整数离差列表,求出最小值记为
Figure GSB00000809671600027
同时将所有整数离差
Figure GSB00000809671600028
减去这个最小值记为
Figure GSB00000809671600029
得到与该整数离差列表等价的非负整数离差列表。
此外,步骤(3)中对每个整数离差列表非负化还可以是:对每个整数离差列表,若整数离差则将其左移一位记为
Figure GSB00000809671600032
若整数离差
Figure GSB00000809671600033
则将其绝对值左移一位并将最低位置为1记为
Figure GSB00000809671600034
得到与该整数离差列表等价的非负整数离差列表。
本发明提供的倒排索引压缩的预处理方法,还包括:
步骤1、对每个倒排列表,以docID的索引xi为横坐标、值yi为纵坐标作二维散点图,xi、yi都是非负整数,其中i=1,...,n,n为正整数,基于最小二乘法生成一条线性回归直线y=f(x)=α+βx, β = Σ i = 1 n ( x i - x ‾ ) ( y i - y ‾ ) / Σ i = 1 n ( x i - x ‾ ) 2 , α = y ‾ - β x ‾ , 其中 x ‾ = 1 n Σ i = 1 n x i , y ‾ = 1 n Σ i = 1 n y i , 使得图中所有点(xi,yi)到该直线的竖直离差yi-f(xi)的平方和最小,得到与该倒排列表等价的竖直离差列表;
步骤2、将每个竖直离差列表划分成等长的段;
步骤3、对每个竖直离差列表的每段,将所有竖直离差yi-f(xi)向上取整记为
Figure GSB000008096716000310
得到与该竖直离差列表等价的整数离差列表;
步骤4、对每个整数离差列表的每段,求出最小值记为
Figure GSB000008096716000311
同时将所有整数离差
Figure GSB000008096716000312
减去这个最小值记为
Figure GSB000008096716000313
得到与该整数离差列表等价的非负整数离差列表。
此外,步骤(4)中对每个整数离差列表非负化还可以是:对每个整数离差列表的每段,若整数离差
Figure GSB000008096716000314
则将其左移一位记为
Figure GSB000008096716000315
若整数离差则将其绝对值左移一位并将最低位置为1记为
Figure GSB000008096716000317
得到与该整数离差列表等价的非负整数离差列表。
本发明提供的倒排索引压缩的预处理方法,还包括:
步骤1、将每个倒排列表划分成等长的段;
步骤2、对每个倒排列表的每段,以docID的索引xi为横坐标、值yi为纵坐标作二维散点图,xi、yi都是非负整数,其中i=1,...,n,n为正整数,基于最小二乘法生成一条线性回归直线y=f(x)=α+βx, β = Σ i = 1 n ( x i - x ‾ ) ( y i - y ‾ ) / Σ i = 1 n ( x i - x ‾ ) 2 , α = y ‾ - β x ‾ , 其中
Figure GSB000008096716000320
使得图中所有点(xi,yi)到该直线的竖直离差yi-f(xi)的平方和
Figure GSB000008096716000322
最小,得到与该倒排列表等价的竖直离差列表;
步骤3、对每个竖直离差列表的每段,将所有竖直离差yi-f(xi)向上取整记为
Figure GSB00000809671600041
得到与该竖直离差列表等价的整数离差列表;
步骤4、对每个整数离差列表的每段,求出最小值记为
Figure GSB00000809671600042
同时将所有整数离差
Figure GSB00000809671600043
减去这个最小值记为
Figure GSB00000809671600044
得到与该整数离差列表等价的非负整数离差列表。
此外,步骤(4)中对每个整数离差列表非负化还可以是:对每个整数离差列表的每段,若整数离差
Figure GSB00000809671600045
则将其左移一位记为
Figure GSB00000809671600046
若整数离差
Figure GSB00000809671600047
则将其绝对值左移一位并将最低位置为1记为
Figure GSB00000809671600048
得到与该整数离差列表等价的非负整数离差列表。
本发明提供的倒排索引压缩的预处理方法,还包括:
步骤1、根据docID的高h位将每个倒排列表划分成2h个Hash段,其中h是0与docID位宽之间的非负整数;
步骤2、对每个倒排列表的每个Hash段,以docID的索引xi为横坐标、值yi为纵坐标作二维散点图,xi、yi都是非负整数,其中i=1,...,n,n为正整数,基于最小二乘法生成一条线性回归直线y=f(x)=α+βx, β = Σ i = 1 n ( x i - x ‾ ) ( y i - y ‾ ) / Σ i = 1 n ( x i - x ‾ ) 2 , α = y ‾ - β x ‾ , 其中
Figure GSB000008096716000412
使得图中所有点(xi,yi)到该直线的竖直离差yi-f(xi)的平方和
Figure GSB000008096716000413
最小,得到与该倒排列表等价的竖直离差列表;
步骤3、对每个竖直离差列表的每个Hash段,将所有竖直离差yi-f(xi)向上取整记为
Figure GSB000008096716000414
得到与该竖直离差列表等价的整数离差列表;
步骤4、对每个整数离差列表的每个Hash段,求出最小值记为同时将所有整数离差
Figure GSB000008096716000416
减去这个最小值记为
Figure GSB000008096716000417
得到与该整数离差列表等价的非负整数离差列表。
此外,步骤(4)中对每个整数离差列表非负化还可以是:对每个整数离差列表的每个Hash段,若整数离差
Figure GSB000008096716000418
则将其左移一位记为若整数离差
Figure GSB000008096716000420
则将其绝对值左移一位并将最低位置为1记为
Figure GSB000008096716000421
得到与该整数离差列表等价的非负整数离差列表。
本发明的优点和有益效果:
基于线性回归预处理方法的倒排索引压缩方法,并行解压效率高,允许对docID随机访问,比现有的基于d-gap预处理方法的倒排索引压缩方法更灵活,能够更好地与集合归并方法结合起来。
【附图说明】
图1为倒排索引压缩流程图。
图2为现有的倒排索引压缩的预处理方法流程图。
图3为PForDelta压缩方法的压缩流程图。
图4为本发明的倒排索引压缩的预处理方法的第一实施例的流程图。
图5为本发明的倒排索引压缩的预处理方法的第二实施例的流程图。
图6为本发明的倒排索引压缩的预处理方法的第三实施例的流程图。
图7为本发明的倒排索引压缩的预处理方法的第四实施例的流程图。
图8为本发明的倒排索引压缩的预处理方法的第五实施例的流程图。
图9为本发明的压缩方法的压缩流程图。
图10为本发明的压缩方法的GPU并行解压流程图。
图11为本发明预处理方法对应的压缩方法及现有压缩方法的压缩比图。
图12为本发明预处理方法对应的压缩方法及现有压缩方法的GPU并行解压速度图。
【具体实施方式】
为便于理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明作进一步的详细说明。
现有的基于d-gap预处理方法的倒排索引压缩方法具有非常好的压缩比,但解压时不支持对docID的随机访问(因为依赖于其前驱的值),为了恢复倒排列表我们需要对相应的d-gap列表求前缀和,这使得并行解压效率低下,而且不能很好地与集合归并方法结合起来。
对每个倒排列表,以docID的索引xi为横坐标、值yi为纵坐标作二维散点图,我们发现散点图近似为直线,这说明自变量xi与因变量yi之间的相关系数很接近1,也就是说倒排列表中的docID呈线性增长,倒排索引具有良好的线性特征,可以用一条直线来近似地描述倒排列表。
对每个倒排列表,根据最小二乘法生成一条线性回归直线y=f(x)=α+βx, β = Σ i = 1 n ( x i - x ‾ ) ( y i - y ‾ ) / Σ i = 1 n ( x i - x ‾ ) 2 , α = y ‾ - β x ‾ , 其中 x ‾ = 1 n Σ i = 1 n x i , y ‾ = 1 n Σ i = 1 n y i , 这条直线最好地描述了我们的倒排列表,“最好地”意思是指所有点(xi,yi)到该直线的竖直离差yi-f(xi)的平方和
Figure GSB00000809671600061
是最小的。然后,给定任意的第xi个docID的竖直离差δ(i),我们可以计算出docID值为f(i)+δ(i);也就是说,倒排列表和对应的竖直离差列表等价,并且docID值只依赖于其索引xi,与其前驱docID无关,也就是说我们可以通过索引xi随机访问docID。因为倒排索引呈现良好的线性特征,所以竖直离差相对于docID值较小,因此我们可以先对倒排列表进行线性回归预处理,然后对等价的竖直离差列表进行压缩,来达到不错的压缩比和更高的并行解压效率。然而竖直离差可能是小数或负数,因此必须先将其转化成等价的非负整数,然后才能进行压缩。
实施例1
参阅图4,示出本发明的倒排索引压缩的预处理方法的第一实施例,具体步骤如下所述:
步骤S401、对每个倒排列表,以docID的索引xi为横坐标、值yi为纵坐标作二维散点图,xi、yi都是非负整数,其中i=1,...,n,n为正整数,基于最小二乘法生成一条线性回归直线y=f(x)=α+βx, β = Σ i = 1 n ( x i - x ‾ ) ( y i - y ‾ ) / Σ i = 1 n ( x i - x ‾ ) 2 , α = y ‾ - β x ‾ , 其中
Figure GSB00000809671600064
Figure GSB00000809671600065
使得图中所有点(xi,yi)到该直线的竖直离差yi-f(xi)的平方和
Figure GSB00000809671600066
最小,得到与该倒排列表等价的竖直离差列表。这个过程称为线性回归。显然,只需要将斜率、截距和竖直离差列表离线计算出来并保存到文件,在线解压时就可以根据它们计算得到相应的倒排列表,也就是说,倒排列表与相应的竖直离差列表等价。
步骤S402、对每个竖直离差列表,将所有竖直离差yi-f(xi)向上取整记为
Figure GSB00000809671600067
得到与该竖直离差列表等价的整数离差列表。这个过程称为离差整数化。在C语言以及大部分其他语言中,当浮点数被赋值给整型数时,小数部分会被丢弃。因此将浮点数
Figure GSB00000809671600068
赋值给docID时,docID值为yi;例如,f(xi)=4.4,yi-f(xi)=5.6,yi=10,虽然
Figure GSB00000809671600069
但是当将10.4赋值给docIDyi时,小数部分0.4会被丢弃掉,得到yi=10。因此
Figure GSB000008096716000610
与yi-f(xi)等价。
步骤S403、对每个整数离差列表,求出最小值记为
Figure GSB000008096716000611
同时将所有整数离差
Figure GSB000008096716000612
减去这个最小值记为
Figure GSB000008096716000613
得到与该整数离差列表等价的非负整数离差列表。这个过程称为离差非负化。显然且与
Figure GSB000008096716000615
等价。
为了更好理解上述方法的思路以及效果,以下面例子详细介绍处理过程,说明如下:
(1)简单起见,假设待压缩的倒排列表只含有8个docID(如表1所示,实际的倒排列表可能非常长),后边的例子都是针对这个倒排列表。
(2)虽然在实际处理过程中,本发明的所有预处理方法都应该通过程序实现的,但因为示例中的倒排列表很短,因此在下面我们将主要借助excel来简明扼要地进行说明。
如表1所示,具体计算预处理过程如下:
(1)对给定的倒排列表线性回归,通过excel两个内置函数求斜率和截距:β=SLOPE(known_y′s,known_x′s),α=INTERCEPT(known_y′s,known_x′s),然后根据yi-f(xi)=yi-βxi-α求竖直离差(保留到小数点后两位)。
(2)利用excel内置函数INT(number)求整数离差。
(3)利用excel内置函数MIN(number1,[number2],...)求整数离差最小值(表中带星号的数字表示最小整数离差),根据此值求非负整数离差列表。
可以看到相对原始倒排列表,上述预处理方法得到的等价的非负整数离差列表中的元素值明显更小。
表1.实施例1示例
Figure GSB00000809671600071
我们还可以将离差的符号位循环左移到最低位的方法来实现离差非负化。
实施例2
参阅图5,示出本发明的倒排索引压缩的预处理方法的第二实施例,具体步骤如下所述:
步骤S501、对每个倒排列表,以docID的索引xi为横坐标、值yi为纵坐标作二维散点图,xi、yi都是非负整数,其中i=1,...,n,n为正整数,基于最小二乘法生成一条线性回归直线y=f(x)=α+βx, β = Σ i = 1 n ( x i - x ‾ ) ( y i - y ‾ ) / Σ i = 1 n ( x i - x ‾ ) 2 , α = y ‾ - β x ‾ , 其中
Figure GSB00000809671600075
使得图中所有点(xi,yi)到该直线的竖直离差yi-f(xi)的平方和
Figure GSB00000809671600081
最小,得到与该倒排列表等价的竖直离差列表。
步骤S502、对每个竖直离差列表,将所有竖直离差yi-f(xi)向上取整记为
Figure GSB00000809671600082
得到与该竖直离差列表等价的整数离差列表。
步骤S503、对每个整数离差列表,若整数离差
Figure GSB00000809671600083
则将其左移一位记为
Figure GSB00000809671600084
若整数离差则将其绝对值左移一位并将最低位置为1记为
Figure GSB00000809671600086
得到与该整数离差列表等价的非负整数离差列表。显然,对于任意整数离差,其符号可以由对应的非负整数离差的最低有效位确定(0表示负、1表示正),其值可以由对应的非负整数离差除最低有效位后的高若干位确定,也就是说,整数离差列表和对应的非负整数列表等价。
如表2所示,在对整数离差非负化时,如果整数大于等于0,则直接将其左移一位,效果是乘以2;否则,将其绝对值左移一位并将最低位置为1,效果是取反后乘以2再加上1。
可以看到相对原始倒排列表,上述预处理方法得到的等价的非负整数离差列表中的元素值明显更小。
表2.实施例2示例
Figure GSB00000809671600087
实施例1需要记录更多的附加信息(整数离差最小值),实施例2在解压的时候需要附加的判断(根据最低位判断正负),因此实施例1的压缩比较实施例2的更差些,而解压速度会更好些,我们可以根据实际数据集做最优选择。
我们把上述两种预处理方法统称为Linear Regression Compression(LRC)预处理方法,相应的压缩方法称为LRC压缩方法。
LRC预处理方法中,离差非负化的对象是整个整数离差列表,这使得最终的非负整数离差列表中元素的值偏大。显然,我们可以在线性回归后将竖直离差列表划分成等长的段,然后对每段分别进行离差整数化和离差非负化,以进一步减小非负整数离差中元素的值。
实施例3
参阅图6,示出本发明的倒排索引压缩的预处理方法的第三实施例,具体步骤如下所述:
步骤S601、对每个倒排列表,以docID的索引xi为横坐标、值yi为纵坐标作二维散点图,xi、yi都是非负整数,其中i=1,...,n,n为正整数,基于最小二乘法生成一条线性回归直线y=f(x)=α+βx, β = Σ i = 1 n ( x i - x ‾ ) ( y i - y ‾ ) / Σ i = 1 n ( x i - x ‾ ) 2 , α = y ‾ - β x ‾ , 其中
Figure GSB00000809671600094
使得图中所有点(xi,yi)到该直线的竖直离差yi-f(xi)的平方和
Figure GSB00000809671600095
最小,得到与该倒排列表等价的竖直离差列表。
步骤S602、将每个竖直离差列表划分成等长的段。这里为了达到更好的压缩比,段长s一般取为2的幂,如128、256。
步骤S603、对每个竖直离差列表的每段,将所有竖直离差yi-f(xi)向上取整记为
Figure GSB00000809671600096
得到与该竖直离差列表等价的整数离差列表。实际上,分段前后离差整数化所得的整数离差没有改变。
步骤S604、对每个整数离差列表的每段,进行离差非负化,得到与该整数离差列表等价的非负整数离差列表。这里,我们可以在段内采用实施例1和2所述离差非负化方法中的任意一种。在后面的示例中,我们将选择实施例1所述离差非负化方法进行介绍。
我们把这种预处理方法称为Linear Regression Compression with Segmentation(LRCSeg)预处理方法,相应的压缩方法称为LRCSeg压缩方法。
如表3所示,线性回归之后,竖直离差列表被划分成两段,然后对每段分别进行离差非负化,可以看到所得整数离差列表与表1和表2一样;然后对等价的整数离差列表中每段,分别求最小值,再根据求非负整数离差,可以看到非负整数离差列表第一段与表1和表2相应部分一样,而第二段明显更小了。
可以看到相对LRC预处理方法,LRCSeg预处理方法得到的等价的非负整数离差列表中的元素值进一步减小了。
表3.实施例3示例
Figure GSB00000809671600097
显然,倒排列表在局部呈现出的线性特征肯定比整体的更好,因此我们可以通过先将对倒排列表分段,然后对每段分别进行线性回归,将倒排列表转化成与其等价的列表,进一步减小等价的非负整数离差列表中元素的值。
实施例4
参阅图7,示出本发明的倒排索引压缩的预处理方法的第四实施例,具体步骤如下所述:
步骤S701、将每个倒排列表划分成等长的段。这里为了达到更好的压缩比,段长s一般取为2的幂,如128、256。
步骤S702、对每个倒排列表的每段,以docID的段内索引xi为横坐标、值yi为纵坐标作二维散点图,xi、yi都是非负整数,其中i=1,...,n,n为正整数,基于最小二乘法生成一条线性回归直线y=f(x)=α+βx, β = Σ i = 1 n ( x i - x ‾ ) ( y i - y ‾ ) / Σ i = 1 n ( x i - x ‾ ) 2 , α = y ‾ - β x ‾ , 其中
Figure GSB00000809671600104
使得图中所有点(xi,yi)到该直线的竖直离差yi-f(xi)的平方和
Figure GSB00000809671600105
最小,得到与该倒排列表等价的竖直离差列表。这里,段内第一个元素的索引为0,随后元素的索引顺序递增。对于倒排列表的每段,我们都有一组回归信息,包括斜率β和截距α。
步骤S703、对每个竖直离差列表的每段,将所有竖直离差yi-f(xi)向上取整记为
Figure GSB00000809671600106
得到与该竖直离差列表等价的整数离差列表。
步骤S704、对每个整数离差列表的每段,进行离差非负化,得到与该整数离差列表等价的非负整数离差列表。
我们把这种预处理方法称为Segmentation and Linear Regression Compression(SegLRC)预处理方法,相应的压缩方法称为SegLRC压缩方法。
如表4所示,线性回归之前将倒排列表划分成两段,然后在每段内分别进行线性回归、离差整数化和离差非负化。
可以看到相对LRCSeg预处理方法,SegLRC预处理方法得到的等价的非负整数离差列表中元素值进一步减小了。
表4.实施例4
Figure GSB00000809671600107
Figure GSB00000809671600111
通过Hash可以将倒排列表划分成长短不一的Hash段,对每个Hash段分别进行线性回归我们可以将倒排列表转化成与其等价的列表。
实施例5
参阅图8,示出本发明的倒排索引压缩的预处理方法的第五实施例,具体步骤如下所述:
步骤S801、根据docID的高h位将每个倒排列表划分成2h个Hash段,其中h是0与docID位宽之间的非负整数。这里,划分出来的Hash段可以很长(整个倒排列表为一段),也可以很小(甚至可以是0)。
步骤S802、对每个倒排列表的每个Hash段,以docID的段内索引xi为横坐标、值yi为纵坐标作二维散点图,xi、yi都是非负整数,其中i=1,...,n,n为正整数,基于最小二乘法生成一条线性回归直线y=f(x)=α+βx,
Figure GSB00000809671600112
Figure GSB00000809671600113
其中 使得图中所有点(xi,yi)到该直线的竖直离差yi-f(xi)的平方和
Figure GSB00000809671600116
最小,得到与该倒排列表等价的竖直离差列表。
步骤S803、对每个竖直离差列表的每个Hash段,将所有竖直离差yi-f(xi)向上取整记为
Figure GSB00000809671600117
得到与该竖直离差列表等价的整数离差列表。
步骤S804、对每个整数离差列表的每个Hash段,进行离差非负化,得到与该整数离差列表等价的非负整数离差列表。
我们把这种预处理方法称为Hash Segmentation and Linear Regression Compression(HS_SegLRC)预处理方法,相应的压缩方法称为HS_SegLRC压缩方法。
如表5所示,假设docID位宽为32,也就是说倒排列表中每个docID以32bit来存储。根据docID的高27位,可以将给定的倒排列表划分3段,期望段长为s=232-27=25=32,然后对每个Hash段分别进行线性回归、离差整数化和离差非负化。
可以看到HS_SegLRC预处理方法得到的等价非负整数离差列表中的元素值也很小。
表5.实施例5
Figure GSB00000809671600118
Figure GSB00000809671600121
在对倒排列表进行线性回归预处理后,我们可以采用任意整数压缩方法对等价的非负整数离差列表进行压缩(如PFD方法)。PFD方法可以达到非常好的压缩比,但是将异常点组织成链表的方式使得并行解压效率低下,这是因为异常点被组织成链表的方式保存了。我们可以直接保存异常点的索引,而不是其偏移,来提高并行解压效率。
实施例6
图9示出了本发明的压缩方法的压缩流程图,具体步骤如下所述:
步骤S901、将经过预处理得到的倒排列表的等价列表划分成段,对每段选取最小的整数b(0≤b≤32,假设docID位宽为32),使段内大于等于2b的元素比例少于预设值。这里的段划分方法应该与预处理过程的段划分方法(若存在)保持一致。
步骤S902、对每段以b位存储每个小于2b的元素及每个异常点的低b位。对于段内每个小于2b的元素,显然我们可以用b位来存储;对于段内每个异常点,我们把除去低b位后的高位部分称为高溢出位,我们用b位存储其低b位,而高溢出位另作处理。
步骤S903、对每段以等位宽存储每个异常点的段内索引。这里,段内第一个元素的段内索引为0,依此类推可以得到其他元素的段内索引。显然,段内最后一个异常点的段内索引值最大,因此我们可以取其位宽作为共同位宽,来存储段内每个异常点的段内索引。
步骤S904、对每段以等位宽存储每个异常点的高溢出位。对每段,我们可以取所有异常点中的最大值的位宽减去b作为共同位宽,来存储每个异常点的高溢出位。
我们把相应的压缩方法称为Parallel PForDelta(ParaPFD)压缩方法
为了更好的理解ParaPFD压缩方法的思路以及效果,以下面的例子详细地介绍压缩以及GPU并行解压过程。
简单起见,我们假设等价列表中某段G=<g0,g1,g2,...,gs-2,gs-1>,其中s是段长,为正整数,异常点个数为en。G被分成三部分分别进行压缩:
(1)<g0,g1,g2,...,gs-2,gs-1>的低b位,存入等宽位槽<l0,l1,l2,...,ls-2,ls-1>;
(2)所有异常点的段内索引,存入等宽位槽<i0,i1,...,ien-1>;
(3)所有异常点的高溢出位,存入等宽位槽<h0,h1,...,hen-1>。
其中每部分位槽的宽度分别为:
(1)b
Figure GSB00000809671600131
最后,将4个参数b、ib、hb和en捆绑在一起,作为一个word保存起来。
在GPU上并行解压时,假设一个GPU线程块对应一段,线程块的一个线程对应段内的一个元素,并且在解压前预先在GPU shared memory中分配数组g,其大小为s。显然,若gi<2b,则gi=li;若gi≥2b,假设它是段内第j个异常点,则
Figure GSB00000809671600132
参阅图10,示出本发明的压缩方法的GPU解压流程,具体步骤如下所述:
步骤S1001、线程块的所有线程读取位宽信息头,计算位宽参数b、ib、hb和异常点个数en;
步骤S1002、利用位宽参数b,线程块的所有线程并行解压<l0,l1,l2,...,ls-2,ls-1>,存储到数组g中;
步骤S1003、利用位宽参数ib,线程块的前en个线程并行解压<i0,i1,...,ien-1>;
步骤S1004、利用位宽参数hb,线程块的前en个线程并行解压<h0,h1,...,hen-1>,并计算第j个异常点的值g[ij]=g[ij]|(hj<<b);
步骤S1001需要访问一次GPU global memory,步骤S1002、S1003和S1004各需要至多两次global memory访问,整个解压过程至多需要访问global memory七次;而PFD方法在GPU上解压时,异常点的解压不能并行执行,访问global memory次数与异常点数量基本一致,当异常点个数很多时,访问global memory次数也相应地增多。因此较PFD压缩方法,本发明的ParaPFD压缩方法具有更高的并行解压效率。
下面给出在TREC GOV倒排索引数据集上,上述压缩方法的压缩比和GPU并行解压速度图。
参阅图11,示出了本发明预处理方法对应的压缩方法以及现有压缩方法的压缩比图,说明如下:
(1)PFD、NewPFD和ParaPFD表示基于d-gap预处理方法;LRC、LRCSeg、SegLRC和HS256_SegLRC表示基于相应的线性回归预处理方法,并且压缩过程采用ParaPFD方法进行压缩。
(2)横坐标表示异常点的比例上限,纵坐标表示压缩比,压缩比是指原始倒排索引大小与压缩的数据大小,这里压缩的数据大小是指压缩的倒排索引大小与附加信息之和。
(3)HS256_SegLRC表示期望段长为256,也就是根据docID的高24为划分Hash段(假设docID位宽为32)。
可以看到:
(1)最好的压缩比是在PFD、NewPFD和ParaPFD上得到的;而LRCSeg、SegLRC和HS256_SegLRC的压缩比也是不错的。
(2)除了LRC,其他方法的压缩比都是先增加然后减少,这说明太少或太多异常点会影响压缩效果。
(3)LRC中压缩比几乎不变,这说明相应的非负整数离差列表中元素值很均匀,这也是采用分段策略后(LRCSeg和SegLRC)压缩效果显著提高的原因。
参阅图12,示出了本发明预处理方法对应的压缩方法以及现有压缩方法的GPU并行解压速度图,说明如下:
(1)纵坐标表示解压速度,指单位时间解压的docID数。
可以看到:
(1)最好的解压速度是在基于线性回归预处理方法的压缩方法上(LRC、LRCSeg、SegLRC和HS256_SegLRC)得到的。
(2)PFD和NewPFD的解压速度随异常点数增加急剧下降,而ParaPFD以及基于线性回归预处理方法的压缩方法的解压速度基本保持不变。
以上对本发明的倒排索引压缩方法和基于压缩的集合归并方法,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (8)

1.一种倒排索引压缩的预处理方法,其特征在于,包括:
(1)对每个倒排列表,以docID的索引xi为横坐标、值yi为纵坐标作二维散点图,其中docID为关键词出现的网页的文档标识符,xi、yi都是非负整数,其中i=1,...,n,n为正整数,基于最小二乘法生成一条线性回归直线y=f(x)=α+βx, &beta; = &Sigma; i = 1 n ( x i - x &OverBar; ) ( y i - y &OverBar; ) / &Sigma; i = 1 n ( x i - x &OverBar; ) 2 , &alpha; = y &OverBar; - &beta; x &OverBar; , 其中 x &OverBar; = 1 n &Sigma; i = 1 n x i , y &OverBar; = 1 n &Sigma; i = 1 n y i , 使得图中所有点(xi,yi)到该直线的竖直离差yi-f(xi)的平方和
Figure FSB00000833275100014
最小,得到与该倒排列表等价的竖直离差列表;
(2)对每个竖直离差列表,将所有竖直离差yi-f(xi)向上取整记为
Figure FSB00000833275100015
得到与该竖直离差列表等价的整数离差列表;
(3)对每个整数离差列表,求出最小值记为
Figure FSB00000833275100016
同时将所有整数离差
Figure FSB00000833275100017
减去这个最小值记为
Figure FSB00000833275100018
得到与该整数离差列表等价的非负整数离差列表。
2.如权利要求1所述的方法,其特征在于,步骤(3)中对每个整数离差列表非负化还可以是:
对每个整数离差列表,若整数离差
Figure FSB00000833275100019
则将其左移一位记为
Figure FSB000008332751000110
若整数离差
Figure FSB000008332751000111
则将其绝对值左移一位并将最低位置为1记为得到与该整数离差列表等价的非负整数离差列表。
3.一种倒排索引压缩的预处理方法,其特征在于,包括:
(1)对每个倒排列表,以docID的索引xi为横坐标、值yi为纵坐标作二维散点图,其中docID为关键词出现的网页的文档标识符,xi、yi都是非负整数,其中i=1,...,n,n为正整数,基于最小二乘法生成一条线性回归直线y=f(x)=α+βx, &beta; = &Sigma; i = 1 n ( x i - x &OverBar; ) ( y i - y &OverBar; ) / &Sigma; i = 1 n ( x i - x &OverBar; ) 2 , &alpha; = y &OverBar; - &beta; x &OverBar; , 其中 x &OverBar; = 1 n &Sigma; i = 1 n x i , y &OverBar; = 1 n &Sigma; i = 1 n y i , 使得图中所有点(xi,yi)到该直线的竖直离差yi-f(xi)的平方和最小,得到与该倒排列表等价的竖直离差列表;
(2)将每个竖直离差列表划分成等长的段;
(3)对每个竖直离差列表的每段,将所有竖直离差yi-f(xi)向上取整记为
Figure FSB00000833275100021
得到与该竖直离差列表等价的整数离差列表;
(4)对每个整数离差列表的每段,求出最小值记为
Figure FSB00000833275100022
同时将所有整数离差
Figure FSB00000833275100023
减去这个最小值记为
Figure FSB00000833275100024
得到与该整数离差列表等价的非负整数离差列表。
4.如权利要求3所述的方法,其特征在于,步骤(4)中对每个整数离差列表非负化还可以是:
对每个整数离差列表的每段,若整数离差
Figure FSB00000833275100025
则将其左移一位记为
Figure FSB00000833275100026
若整数离差
Figure FSB00000833275100027
则将其绝对值左移一位并将最低位置为1记为
Figure FSB00000833275100028
得到与该整数离差列表等价的非负整数离差列表。
5.一种倒排索引压缩的预处理方法,其特征在于,包括:
(1)将每个倒排列表划分成等长的段;
(2)对每个倒排列表的每段,以docID的段内索引xi为横坐标、值yi为纵坐标作二维散点图,其中docID为关键词出现的网页的文档标识符,xi、yi都是非负整数,其中i=1,...,n,n为正整数,基于最小二乘法生成一条线性回归直线y=f(x)=α+βx, &beta; = &Sigma; i = 1 n ( x i - x &OverBar; ) ( y i - y &OverBar; ) / &Sigma; i = 1 n ( x i - x &OverBar; ) 2 , &alpha; = y &OverBar; - &beta; x &OverBar; , 其中 x &OverBar; = 1 n &Sigma; i = 1 n x i , y &OverBar; = 1 n &Sigma; i = 1 n y i , 使得图中所有点(xi,yi)到该直线的竖直离差yi-f(xi)的平方和
Figure FSB000008332751000213
最小,得到与该倒排列表等价的竖直离差列表;
(3)对每个竖直离差列表的每段,将所有竖直离差yi-f(xi)向上取整记为
Figure FSB000008332751000214
得到与该竖直离差列表等价的整数离差列表;
(4)对每个整数离差列表的每段,求出最小值记为同时将所有整数离差
Figure FSB000008332751000216
减去这个最小值记为
Figure FSB000008332751000217
得到与该整数离差列表等价的非负整数离差列表。
6.如权利要求5所述的方法,其特征在于,步骤(4)中对每个整数离差列表非负化还可以是:
对每个整数离差列表的每段,若整数离差
Figure FSB000008332751000218
则将其左移一位记为若整数离差
Figure FSB000008332751000220
则将其绝对值左移一位并将最低位置为1记为
Figure FSB000008332751000221
得到与该整数离差列表等价的非负整数离差列表。
7.一种倒排索引压缩的预处理方法,其特征在于,包括:
(1)根据docID的高h位将每个倒排列表划分成2h个Hash段,其中docID为关键词出现的网页的文档标识符,h是0与docID位宽之间的非负整数;
(2)对每个倒排列表的每个Hash段,以docID的段内索引xi为横坐标、值yi为纵坐标作二维散点图,xi、yi都是非负整数,其中i=1,...,n,n为正整数,基于最小二乘法生成一条线性回归直线y=f(x)=α+βx, &beta; = &Sigma; i = 1 n ( x i - x &OverBar; ) ( y i - y &OverBar; ) / &Sigma; i = 1 n ( x i - x &OverBar; ) 2 , &alpha; = y &OverBar; - &beta; x &OverBar; , 其中 x &OverBar; = 1 n &Sigma; i = 1 n x i , y &OverBar; = 1 n &Sigma; i = 1 n y i , 使得图中所有点(xi,yi)到该直线的竖直离差yi-f(xi)的平方和
Figure FSB00000833275100035
最小,得到与该倒排列表等价的竖直离差列表;
(3)对每个竖直离差列表的每个Hash段,将所有竖直离差yi-f(xi)向上取整记为
Figure FSB00000833275100036
得到与该竖直离差列表等价的整数离差列表;
(4)对每个整数离差列表的每个Hash段,求出最小值记为
Figure FSB00000833275100037
同时将所有整数离差
Figure FSB00000833275100038
减去这个最小值记为
Figure FSB00000833275100039
得到与该整数离差列表等价的非负整数离差列表。
8.如权利要求7所述的方法,其特征在于,步骤(4)中对每个整数离差列表非负化还可以是:
对每个整数离差列表的每个Hash段,若整数离差
Figure FSB000008332751000310
则将其左移一位记为
Figure FSB000008332751000311
若整数离差
Figure FSB000008332751000312
则将其绝对值左移一位并将最低位置为1记为得到与该整数离差列表等价的非负整数离差列表。
CN2011100071709A 2011-01-14 2011-01-14 倒排索引压缩的预处理方法 Active CN102081659B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2011100071709A CN102081659B (zh) 2011-01-14 2011-01-14 倒排索引压缩的预处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2011100071709A CN102081659B (zh) 2011-01-14 2011-01-14 倒排索引压缩的预处理方法

Publications (2)

Publication Number Publication Date
CN102081659A CN102081659A (zh) 2011-06-01
CN102081659B true CN102081659B (zh) 2012-08-22

Family

ID=44087622

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2011100071709A Active CN102081659B (zh) 2011-01-14 2011-01-14 倒排索引压缩的预处理方法

Country Status (1)

Country Link
CN (1) CN102081659B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102708187B (zh) * 2012-05-14 2014-04-30 成都信息工程学院 基于Hbase数据库的倒排索引混合压缩及解压方法
CN102929988B (zh) * 2012-10-19 2015-07-08 中国科学院计算技术研究所 用于对倒排索引进行压缩的文档序号重排方法及其系统
CN104901703B (zh) * 2015-04-08 2018-04-03 河海大学 一种整数序列快速压缩存储算法
CN109101504B (zh) * 2017-06-20 2023-09-19 恒为科技(上海)股份有限公司 一种日志压缩和索引方法
CN111897982B (zh) * 2020-06-17 2023-03-14 昆明理工大学 一种医学ct图像存储与检索方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7356527B2 (en) * 2001-12-19 2008-04-08 International Business Machines Corporation Lossy index compression
CN101339560B (zh) * 2008-08-11 2011-08-31 北京搜狗科技发展有限公司 一种搜索系列性数据的方法、装置及一种搜索引擎系统
CN101676899A (zh) * 2008-09-18 2010-03-24 上海宝信软件股份有限公司 海量数据库记录的归档和查询方法
CN101826075A (zh) * 2009-03-06 2010-09-08 刘金莉 一种基于语言模型的排序算法
CN101901213A (zh) * 2010-07-29 2010-12-01 哈尔滨工业大学 一种基于实例动态泛化的共指消解方法

Also Published As

Publication number Publication date
CN102081659A (zh) 2011-06-01

Similar Documents

Publication Publication Date Title
Crowley et al. Moonshine: Distilling with cheap convolutions
CN102081659B (zh) 倒排索引压缩的预处理方法
CN111062472B (zh) 一种基于结构化剪枝的稀疏神经网络加速器及其加速方法
CN103207904B (zh) 搜索结果的提供方法及搜索引擎
CN106846235B (zh) 一种利用NVIDIA Kepler GPU汇编指令加速的卷积优化方法及系统
CN112668708B (zh) 一种提高数据利用率的卷积运算装置
CN104246765A (zh) 图像检索装置、图像检索方法、程序以及计算机可读取的存储介质
CN108416427A (zh) 卷积核堆积数据流、压缩编码以及深度学习算法
CN109409514A (zh) 卷积神经网络的定点运算方法、装置、设备和存储介质
Kim et al. A kernel decomposition architecture for binary-weight convolutional neural networks
CN103345496A (zh) 多媒体信息检索方法和系统
CN104221015A (zh) 图像检索装置、图像检索方法、程序以及计算机可读取的存储介质
CN112286864B (zh) 加速可重构处理器运行的稀疏化数据处理方法及系统
CN106202224B (zh) 搜索处理方法及装置
Cevahir et al. Site-based partitioning and repartitioning techniques for parallel pagerank computation
CN104484234A (zh) 一种基于gpu的多波前潮流计算方法和系统
KR101929847B1 (ko) 희소행렬 연산 방법과 장치
CN104462689A (zh) 线性最近邻量子电路生成器
CN104933143A (zh) 获取推荐对象的方法及装置
CN103455518A (zh) 一种数据处理方法及装置
CN102063525B (zh) 一种实用的多学科设计优化模型自动生成方法
CN104462080A (zh) 针对检索结果进行分组统计的索引结构创建方法和系统
CN104794237A (zh) 网页信息处理方法及装置
CN104572588A (zh) 矩阵求逆处理方法和装置
CN102799750A (zh) 几何体表面三角形剖分的公共边和非公共边快速生成方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant