信息检索期末复习

1. 绪论

*信息检索是什么?

给定用户需求返回满足该需求信息的一门学科。通常涉及信息的获取、存储、组织和访问。

从大规模非结构化数据(通常是文本)的集合(通常保存在计算机上)中找出满足用户信息需求的资料(通常是文档)的过程。

2. 词汇表和倒排记录表

倒排索引如何存储?

磁盘上顺序存储便于快速读取。内存中采用链表或者变长数组。需要在存储空间和插入代价之间平衡。

倒排索引如何排序,为什么要排序?

按词项排序,然后每个词项按DOCID排序。排序是为了在线性时间内对两个倒排记录表完成合并(排序后可以双指针扫描)。

倒排索引的组成?

  1. 词典
  2. 倒排记录表
  3. 词典指向倒排表的指针

倒排索引的构建过程?每个步骤的作用?

  1. 待索引文档转化为词条流(Tokenizer词条化工具,作用:分词)
  2. 词条流转化为修改后的词条(语言分析工具,作用:契合用户输入习惯)
  3. 生成倒排索引(加速查询)

image-20220102164738669

词条和词项的区别?

词条经过归一化后的结果就是词项,词项是要被索引的对象。归一化的方法包括大小写转换、同义词词典、soundex、词形合并、词干还原等。

文档和查询的同义词需要归一化成同一形式。

为什么要归一化(不太确定)

  1. 减少词项个数和词典大小
  2. 合并类似的词项
  3. 契合用户输入形式和习惯

跳表的优势和局限性?

跳表指针可以加速合并和查询效率,考虑在链表上每隔$\sqrt N$加一个跳表指针之后的场景,可以跳过不可能的检索结果。

局限性在于如果倒排记录表不能放入内存(例如每次读跳表都要进行一次磁盘I/O),跳表的I/O开销可能远远超过其带来的优势。

3. 词典及容错式检索

*短语查询需要怎么转变,使得倒排索引支持短语查询?

  1. 双词索引

    对每两个连续的词组成词对进行索引,将更长的短语查询分解为若干个双词。扩展方式:词性标注

    缺点:会出现伪正例(需要二次验证文档是否满足),导致词典和词项数目剧增

    image-20220102164403698

  2. 带位置信息索引

    在倒排记录表中,对每个词项在每篇文档中的每个位置进行存储

    将输入的短语查询在文档的层次上进一步合并(即考虑位置是否匹配)

    扩展:位置索引可以解决邻近式查询,所以是更常用的方法(实际检索系统的标配)

关于倒排索引的索引结构,对比一下哈希表和树

这取决于词项数目是固定还是持续增长、词项的相对访问频率和词项的数目。

哈希表优点:查询时间是常数,缺点:无法处理词项微小变形,不支持前缀(区间)搜索,如果词汇表持续增长,需要定期对所有词项重新哈希(否则由于哈希冲突,效率会越来越慢)。

树优点:可以支持前缀查询 缺点:速度略低于哈希表,维护平衡的开销很大

*二级索引结构用什么数据结构?

二级索引指k-gram索引中,对每个k-gram再建一个倒排索引,该倒排索引词典部分是所有的k-gram,记录表部分是对应k-gram的所有词项。

那么可以知道这个词典大小比较小且有固定的上界(词项大小上界为$26^k$​),词典大小不会持续增加,且词项的相对访问频率会比较高,显然比较适合使用哈希表构建二级索引。

如何进行通配符查询?

轮排索引。构建索引时,将每个词项末尾加入特殊符号$,然后将词项旋转多次,将每次旋转后的结果都加入词典,即B树中。

查询时,将通配符旋转至右部,在B树上进行前缀查询。

对于存在两个或以上通配符(除了*X*这种形式只需要查询X*),需要对查询结果二次验证。

比较词项纠正的两种方法

两种方法:词独立法和上下文敏感法。

词独立法只检查每个单词本身的拼写错误,如果某个单词拼错成另一个单词则无法检测。

上下文敏感法则考虑了周围的单词。

编辑距离怎么算?

常见的有Levenshtein距离,包括插入、删除、替换。

Damerau-Levenshtein距离还包括两个字符交换。

计算编辑距离可以利用权重(替换代价),因为键盘输入的错误率不同。

*Soundex怎么做?

  1. 保留首字母
  2. 按照一定规则将字母转化为数字
  3. 将连续出现的字符转为一个(这里说的字符应该是转化后的数字,即剔除连续的数字)
  4. 剔除0,尾部补0至3位,返回首字母+前三位数字

4. 索引构建

简单对比BSBI和SPIMI算法?

BSBI会在内存中维护一个全局词典,局部索引为TermID及其倒排记录表,按字典顺序排序。

SPIMII建立局部词典,不需要全局词典,将局部索引合并后再生成全局词典。

5. 索引压缩

有哪些关于词项、词频的经典定律?

Heaps定律:词项大小M是文档集T的一个函数,M与$\sqrt T$基本呈正比,$M\propto \sqrt T$

Zipf定律:第i常见的词频$cf_i$与$1/i$成正比,即$cf_i\propto\frac{1}{i}$​(另一种解释:二八定律)

*词典压缩有哪些方法?

  1. 将所有词项压缩成一个字符串,用词项指针指向每个词项在字符串中的对应位置。

    定长方式的缺陷:一是短词项也要分配足够空间,会造成浪费,二是不能处理长度大于分配空间的词项。

  2. 按块存储:减少词项指针数量,节约空间,但词项查找速度稍慢

    同时需要在字符串中记录每个词项的长度,导致字符串稍长。

  3. 前端编码:将每个块的公共前缀进行压缩

    image-20220102174821673

倒排索引和词典压缩哪个重要性更高?

倒排索引。因为量级远远大于词典。

*倒排索引压缩有哪些压缩方法?

  1. 间隔编码:每个倒排记录表中的docID记录间隔(除了第一个)

    问题:会导致罕见词和常见词的间隔大小差别太大。

  2. 变长编码:对于小间隔采用短编码,长间隔采用长编码。

    方法:将原数字的二进制表示7位拆分,在最高位加一位表示延续位置,0表示未结束,1表示结束

    image-20220102175641503

  3. $\gamma$​编码:把每个数用长度和偏移表示,偏移为该数去掉最高位后的1剩下的部分,长度为偏移的长度一元编码后的结果

    image-20220102175812215

6. 文档评分、词项权重计算及向量空间模型

为什么需要对搜索结果排序?

因为用户通常只愿意浏览极少的搜索结果。

*布尔模型的优劣?

优点:对于需求和文档集性质非常了解的专家来说,布尔模型效果比较好。

缺点:需要大量训练才能撰写布尔查询,且往往搜索结果过少或过多,需要大量技巧才能得到合适规模结果的查询。

*词袋模型是什么?有什么典型的词袋检索模型?

词袋模型,指不考虑词在文档中出现顺序的模型。

典型词袋检索模型:tf-idf,one-hot

*为什么说idf只会影响至少包含两个词项的查询结果?

当只有一个词项时,该词项的idf值$idf_t=\log_{10}\frac{N}{df_t}$在每个文档中都一样,相当于每个文档的结果计算中乘了一个常数,不会对文档之间结果的大小关系产生任何影响。

词项频率tf、文档频率df、文档集频率cf的定义?

image-20211228101207626

df和cf会一起增加。tf和cf会一起增加。tf和df没有直接关系。

为什么通常cf比df更适合权重计算?

某些特定词项会在特定文档中以非常高的频率出现,这导致该词项的cf值很高,但这不意味着应该减少该词项的权重。因为这种词反而对特定文档而言识别度很高,应该有更高的权重。

向量空间模型表达的物理意义?

  1. 可以将查询也做同样处理,转化为高维向量。

  2. 转化为向量后,可以定义文档之间的相似度,于是可以回答给定若干篇文档,哪两篇最相关的问题。

为什么文档相似性常用夹角而不是绝对距离?

假想实验:在文档D复制一份加在自身末尾得到D’,显然语义上D和D’有相同的内容。

两者的夹角为0,但绝对距离可能会很大。

7. 完整搜索系统中的评分计算

*文档的长短对于向量空间模型下有什么影响?通过什么方法消除这种差异?

由余弦相似度计算公式$cos\theta=\frac{a\cdot b}{|a|\cdot|b|}$,可知当$a\cdot b$值相等时,短文档的分母小于长文档,导致短文档的余弦相似度明显大于长文档。

为了消除这种差异,会选择一个平衡点(pivot),对余弦归一化操作进行线性调整(回转长度归一化)。

image-20211228101839197

为什么需要扩展倒排索引(如加入词频)?

需要在倒排索引中加入词项的文档频率df和在每个文档中的词项频率tf。

因为词项t在文档d中的tf-idf权重$w_{t,d}=(1+\log tf_{t,d})\log\frac{N}{df_t}$需要用到这两个属性,直接在倒排索引中记录可以加快计算速度。

加速topK检索的方法有哪些?

  1. 快速计算余弦

    不考虑查询词项的权重$w_{t,d}$,假设每个查询词项的词频tf为1

  2. 不对所有结果排序,用堆维护topK

  3. 不计算所有文档的得分

    • 仅考虑包含高idf查询词项的文档
    • 仅考虑包含多个词项的文档
    • 预计算每个词项tf最高的r篇作为胜者表
    • 根据权威度(文档本身属性)
    • 高端表和低端表
    • 簇剪枝

8. 检索评价

检索指标有哪些?物理意义分别是什么?

效率:时间开销、空间开销、响应速度

效果:正确率(返回文档中相关文档个数)、召回率(所有相关文档返回了多少)、相关文档是否靠前

其他指标:覆盖率、访问量、数据更新速度

正确率,召回率的定义和计算?

image-20220103104135459

正确率:RR/(RR+RN)

召回率:RR/(RR+NR)

*计算正确率,召回率分别有哪些不足或难点?

不足:都没有考虑排序的先后关系。

难点:召回率计算很困难,因为文档很大,无法对每个查询标记所有相关文档,需要用其他方法度量召回率,如pooling方法

pooling方法:对多个检索系统的TopN个结果组成的集合进行人工标注,标注出的相关文档作为整个相关文档集合。

调和平均F值有什么好处?

$F=\frac{2PR}{P+R}$

如果用算术平均值,那么一个返回全部文档的搜索结果F值就不低于50%,这过高了。

调和平均值使得,无论P或R过低都能表现在F值上,相较于最小值,F值更平滑,即可以把F值看成平滑的最小值函数

精确率(Accuracy)如何计算?为什么通常不使用精确率?

精确率$accuracy=(RR+NN)/(RR+NN+NR+RN)$

由于不相关文档数远大于相关文档数,一个什么都不返回(把所有文档标记为不相关)的搜索结果,可以达到非常高的精确率,这不合理。

引入序是什么?

检索结果按一定顺序排列,在用户观察过程中,召回率不断增加,因此可以求出在不同召回率上对应的正确率,然后描出图像

在上面的曲线对应的系统结果更好

*P-R曲线怎么画?

先按顺序求出结果中每个相关文档所在的P、R值,对10%,…100%的召回率点进行插值。

对于t%,如果不存在该召回率点,则定义t%的正确率为从t%到100%(>=t%)中最大的正确率值。

image-20220103110000885

*平均正确率AP是什么?插值和未插值的区别是什么?

未插值AP

image-20220103110147900

插值AP

image-20220103110218253

Precision@N如何计算?为什么该指标有效?

在第N个位置上的正确率。

因为用户通常只关注前一/二页的结果。

*Macro Average和Micro Average分别如何计算?

image-20220103110504158

image-20211228102832972

*MAP是什么?

对所有查询的AP求宏平均。

覆盖率和出新率分别是什么?如何计算?

假定用户已知的相关文档集合为U,检索结果和U的交集为Ru,则可以定义覆盖率(Coverage) C=|Ru|/|U|, 表示系统找到的用户已知的相关文档比例。

假定检索结果中返回一些用户以前未知的相关文档Rk, 则可以定义出新率(Novelty Ratio) N=|Rk|/(|Ru|+|Rk|), 表示系统返回的新相关文档的比例。

NDCG是什么?如何计算?

每个文档有一个相关等级$rel_i$,计算$DCG=\sum\limits_irel_i/\log_2(i+1)$,理想情况下$IDCG$为$rel_i$从大到小排序后的计算结果

$NDCG=\frac{DCG}{IDCG}$

另一种计算方式是加大相关性的权重,由$rel_i$增加到$2^{rel_i}$

9. 相关反馈

*提高召回率有哪些方法?从局部方法和全局方法两个角度考虑。(填空题)

局部方法:对用户查询进行局部的即时分析,主要方法是相关反馈

全局方法:进行一次性的全局分析,生成同/近义词词典,主要方法是利用该词典进行查询扩展

*相关反馈分成哪三种?分别简述。(简答题)

  1. 显式相关反馈:用户显式参加交互过程

    优点:准确度较高

    缺点:用户通常不愿意提供显式相关反馈

  2. 隐式相关反馈:系统根据用户行为推测相关性

    常见的用户行为包括:鼠标键盘操作(点击、停留、翻页)、用户眼珠动作(拉近、拉远、凝视、往某个方向转)等等

    优点:省去了用户显式参与的过程

    缺点:判定结果不一定准确,对行为分析有较高要求,且有时需要额外设备

  3. 伪相关反馈:系统直接假设返回文档前k篇为相关文档

    优点:不用考虑用户因素,在实验中的平均效果不错

    缺点:对某些查询效果很差,准确率难以保证,可能导致查询漂移。

*Rocchio相关反馈的原理是什么?如何画图表示?

分别找到相关文档和不相关文档的质心,对相关文档的质心进行偏移,偏移向量为相关向量与不相关向量之差。

image-20220103123710223

Rocchio的物理意义

即将相关文档的质心移动一个量,该量为相关文档质心和不相关文档的差异量。

为什么向量要偏移?如果不偏移会怎么样?

偏移是为了使得新查询向相关文档靠拢并远离不相关文档。

如果不偏移,区分效果将变差。

为什么通常更看重正反馈而不是负反馈?

通常不相关文档的数目远远大于相关文档,很难对所有不相关文档进行标记,不相关的情况可能很复杂,但相关的情况比较简单。

换言之,相关文档数量较少,意义明确。不相关文档数量过多,意义不明确。

*搜索引擎是否使用相关反馈?

会使用,但需要分情况讨论。

由于用户通常不会显式参加交互过程,所以搜索引擎通常无法使用显式相关反馈。但搜索引擎可以使用隐式相关反馈,通过用户的点击,浏览行为,或者眼动轨迹之类的数据推断结果的相关性,基于这些相关性进行相关反馈。

搜索引擎也可以使用伪相关反馈。

相关反馈存在哪些问题?

  1. 相关反馈开销很大,因为根据相关反馈生成的新查询往往很长,而处理长查询的开销很大。

  2. 用户不愿意提供显式相关反馈

  3. 结果的可解释性较差,有时无法理解为什么相关反馈后的查询会返回特定文档

10. 概率模型

贝叶斯公式和使用?

$P(A_j|B)=\frac{P(A_jB)}{P(B)}=\frac{P(A_j)P(B|A_j)}{\sum\limits_i P(A_i)P(B|A_i)}$

*概率检索模型定义是什么?

检索系统对用户查询的理解是非确定的 (uncertain),对返回结果的猜测也是非确定的。

概率检索模型是通过概率的方法将查询和文档联系起来:

定义3个随机变量$R,Q,D$:

相关度$R=\{0,1\}$,查询 $Q=\{q1,q2,…\}$,文档$D=\{d1,d2,…\}$,则可以通过计算条件概率$P(R=1|Q=q,D=d)$来度量文档和查询的相关度。

概率模型包括一系列模型,如Logistic Regression(回归)模型及最经典的二值独立概率模型BIM、BM25模型等等(还有贝叶斯网络模型)。

*Logistic回归模型基本思想?

为了求$Q$和$D$相关的概率$P(R=1|Q,D)$,通过定义多个特征函数$f_i (Q,D)$,认为$P(R=1|Q,D)$是这些函数的组合。

*生成式模型是什么?

生成式模型对后验概率建模,从统计的角度表示数据的分布情况,能够反映同类数据本身的相似度。

优点:信息比判别模型丰富,研究单类问题比判别模型灵活,可以进行增量学习,能用于数据不完整的情况。

缺点:学习和计算过程比较复杂

常见模型:naive bayes、GMM、HMM、马尔可夫随机场

*二值独立模型BIM是什么?

BIM模型通过Bayes公式对所求条件概率$P(R=1|Q,D)$展开进行计算。BIM是一种生成式(generative)模型。

两个假设:

  1. 二元假设

    一篇文章在由特征表示时,以特征“出现”和“不出现”两种情况表示。

  2. 词汇独立性假设

    文档里出现的单词或词语之间没有任何关联。由于词汇之间没有关联,可以将文档概率转化为每个词汇概率的乘积。

image-20220103135408887

*如何基于BIM计算文档相关性?

image-20220103135624186

生成式模型对文档检索的物理意义?

可以增量式学习,适合大量数据的文档检索。

假设了各个变量之间相互独立,易于建模。

11. 文本分类

文本分类过程是怎样的?

image-20220103140038925