zoukankan      html  css  js  c++  java
  • 《信息检索导论》第五章总结


    一、索引压缩概述


    使用压缩的目的:

    (1)因为我们想要把尽量多的数据放入内存,因此压缩能够达到这个目的;

    (2)从磁盘到内存的传输时间会缩短;

    压缩分类:

    (1)无损压缩:压缩后的数据能还原全部信息;

    (2)有损压缩:压缩后会丢失一些信息;

    如果有损压缩后丢失的信息用户并不关心,则有损压缩也是可以接受的;


    二、Heaps定律


    通过整个文档集词条数来估计词项数目;

    主要思想:随着文档集增加,词项数目会增加,并且没有上限;

    M=kT^b;


    三、Zipf定律


    通过词项在文档集中的词频排名来估计词项之间的词频比例;

    如果词项A出现次数排名第一,词项B出现次数排名第二,词项C出现次数排名第三,则A出现次数是B出现次数的两倍,则A出现次数是C出现次数的1/3;


    四、词典压缩


    虽然与倒排记录表相比,词典的空间很小,但是为了能够把词典全部都放在内存中,我们必须要对其进行压缩;


    1.词项定长存储


    固定词项分配大小为20B;

    需要空间:M*(20+4+4)=M*28;

    缺点:

    (1)大部分单词都少于20B,浪费空间;

    (2)对于某几个大于20B的单词也不能存储;


    2.词项作为一个字符串


    将每个词项合并,并组成一个长字符串;

    对于每个词项增加一个指针;

    需要空间:M*(8+4+4+3)=M*19;

    相比之前,减少了1/3;

     

    3.按块存储


     将词典分组,分成n块,并且只有每个块的第一个词项有指针指向长字符串;

     在长字符串的每个词项前面添加一个词项长度;

     


    如果每个块大小为4,则每个块可以减少3个指针,加上4个字节表示4个词项的长度;

    因此需要空间:M(4+4+8)+M/4*3-M=M(16-1/4);

    相比之前又减少了15M/4;

    但是每个块越大,压缩率越大,则查询的时间就越长;

    因为一开始先通过二分搜索查找到词项所在块的入口,然后线性搜索找到词项;

    二叉树高度计算方法:

    已知n个结点,这些节点构成的二叉树的高度为:

     

    如果给定高度为n,则满二叉树的节点个数为

     


    4.前端编码


    对于3的改进方法是对于长字符串的编排进行改进;

    我们可以提取公共前缀;

    比如原来8automate9automatic,可以变成automat*1e.2ic;

    此方法能够减少存储空间;


    五、posting压缩


    一般来说词项出现频率高,则posting连续两个docID不会相差(gap)太远,比如:

    the --->   10000    10001    10002;

    如果我们通过记录两docID的间距,则会大大减少存储的空间;

    the --->    10000    1    1;

    压缩率越高,解压缩时间就越长;

    1.VB编码

    规则:

    (1)编码结果是整数个字节;

    (2)每个字节的第一位是延续位,如果为1,则表示是最后一个字节,否则,则表示不是最后一个字节;

    (3)每个字节的其他7位为正常编码位;

    举例:

    3    --->    1 0000011;

    注意:可变字节编码的解码消耗比起可变位编码消耗要低得多;

    一个字节用VB编码的最大间距是127;2^7-1;因为如果需要编码,则说明此数肯定不是0,因此从1开始;

    2.一元编码

    如果为数n,则n个1后面添一个0;

    举例:5  --->    111110

    3.gamma编码

    规则:

    (1)不记录最高位的1;比如12    --->    100;

    (2)编码分为长度和偏移(长度指的是偏移的长度)

    (3)长度采用一元编码,根据偏移的长度进行编码;

    (4)偏移采用(1)的编码;

    举例:12    --->   1110(长度),100(偏移);

    编码长度:2log(G)+1;

    总结:gamma编码能够压缩成原始posting的1/4,即如果原来posting为400M,则现在gamma编码后只需要100M即可;

    注意:

    (1)gamma编码永远是基数位;

    (2)前缀无关即解码结果唯一性;

    4.最优编码长度

    如果数G,则最优编码为log(G);

    举例:如果为12,则最优编码为4;

    5.Universal code

    和最优编码长度只相差常数个倍数的编码方式,gamma就是一个universal code;


    作者:xiazdong
    出处:http://blog.xiazdong.info
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
  • 相关阅读:
    Civil 3D 二次开发 创建Civil 3D 对象—— 01 —— 创建几何空间点
    Civil 3D 二次开发 创建Civil 3D 对象—— 00 ——
    Civil 3D 二次开发 创建AutoCAD对象—— 01 —— 创建直线
    Civil 3D 二次开发 新建CLR项目出现错误C2143
    Civil 3D 二次开发 创建AutoCAD对象—— 00 ——
    了解AutoCAD对象层次结构 —— 6 ——块表记录
    datepicker97使用
    使用angular 外接 templateUrl,使用ng-include
    angularJs 遮罩
    网上找的有关css兼容问题
  • 原文地址:https://www.cnblogs.com/xiazdong/p/3058355.html
Copyright © 2011-2022 走看看