L大语言模型从理论到实践
阅读 PDF ↗
CHAPTER 12

信息检索

检索系统需要在规模庞大且不断变化的语料中,找到与当前信息需求有关、可访问并且版本有效的材料。词语是否相同、向量是否接近、排名是否靠前,分别只是相关性的不同近似。系统必须同时回答两个问题:怎样表示并排序候选,以及怎样在有限时间和内存内找到它们。

信息检索(Information Retrieval,IR)输出的是有序材料集合。本章讨论词法评分、表示学习、近似索引与检索评估;下游如何将材料组织为生成上下文、如何核对回答与引用,属于检索增强生成的架构问题。高召回可以提供必要材料,却不自动证明答案正确。

12.1检索对象及语料结构

文档、片段及相关性

令查询为 \(q\),检索对象集合为 \(\mathcal D\),相关性等级为 \(r(q,d)\)。这里的对象 \(d\) 可以是整篇文档、段落或表格片段,必须与标注和评估一致。一个系统用片段排序、另一个系统按文档统计命中时,直接比较数字可能掩盖重复片段占据前列的问题。

语义切分(Semantic Chunking)依据标题、段落、句子、代码或表格结构形成边界,再结合长度限制组织片段。较短片段有利于定位,但可能丢失否定条件、表头和适用范围;较长片段提供上下文,却可能稀释主题并增加编码成本。重叠窗口减少边界遗漏,也增加重复和索引体积,因此应同时计量召回与重复率。

解析阶段应保留标题层级、页码或源偏移、版本、生效时间、语言与访问条件。表格单元脱离表头常失去意义,扫描文档的文字识别错误又会影响精确词匹配。语料质量问题不能一律通过更复杂的编码器补救。原始文档、派生片段与索引条目之间的血缘关系,遵循第18章《训练数据工程基础》所述原则。

表 12.1 主要符号与形状。

符号 含义
\(N,n_t,f(t,d)\) 检索对象总数、包含词项 \(t\) 的对象数、对象内词频
\(|d|,\bar\ell\) 对象的分析器词项长度与平均长度
\(k_1,b\) BM25 饱和参数与长度归一化参数
\(u,v_d\in\Real^h\) 查询与文档的 \(h\) 维表示
\(\tau,s(q,d)\) 对比学习温度与检索分数
\(K,R_q^{(K)},G_q\) 截断长度、前 \(K\) 个结果、相关对象集合
\(M,m,c\) 图邻接预算、PQ 子空间数、RRF 平滑常数

词法分析及匹配对象

词项(Term)是检索分析器生成的匹配单位,不一定等于语言模型词元。中文分词、大小写、字符规范化、数字编号、同义词与停用词规则都会改变词项集合。查询与文档应使用兼容的分析规则;变更规则一般需要重新构建相应索引。

过度规范化可能破坏型号、错误码和带连字符的标识。对精确编号和普通自然语言,可以使用不同字段及匹配策略,而非强迫所有内容共享同一种切分。字段权重也应作为评分配置,不能在解释分数时忽略。

12.2倒排索引及概率排序

词项候选定位

倒排索引(Inverted Index)为每个词项保存包含它的对象列表,即倒排列表(Posting List)。每个条目可含文档标识、词频、位置和字段信息。查询不再扫描全部文本,而是读取命中词项的列表,合并候选并计算分数。词项位置可支持短语与邻近关系,只有文档标识和词频则不能直接恢复这些约束。

设查询词项集合为 \(T_q\),若完整遍历相关列表,处理量与 \(\sum_{t\in T_q}|P_t|\) 有关;常见高频词会产生长列表。跳跃结构和基于分数上界的剪枝可以减少计算,但必须使用有效上界,才能保持指定评分下的精确前 \(K\) 名。压缩列表减少内存与读取量,也增加解码代价。

概率动机及独立性近似

概率排序思想是在给定查询和固定损失条件下,优先返回相关概率更高的对象。为说明稀有词为何重要,考虑二元相关变量 \(R\) 和词项出现指标 \(x_t\in\{0,1\}\)。假设给定 \(R\) 后词项条件独立,记 \(p_t=P(x_t=1\mid R=1)\)\(u_t=P(x_t=1\mid R=0)\),则贝叶斯对数比为

\begin{align} \log\frac{P(R=1\mid x)}{P(R=0\mid x)} ={}&\text{常数}+\sum_t\left[x_t\log\frac{p_t}{u_t}+(1-x_t)\log\frac{1-p_t}{1-u_t}\right]\tag{12.1}\\ ={}&\text{常数}+\sum_tx_t\log\frac{p_t(1-u_t)}{u_t(1-p_t)}. \tag{12.2}\end{align}

忽略与候选无关的常数后,词项提供可加的对数证据。缺少相关性标注时,对 \(p_t,u_t\) 作近似并使用文档频率估计,会得到与逆文档频率相关的权重。真实词项并不独立,此模型是排序近似;BM25 的词频与长度处理还引入进一步建模,不能只用上述二元公式一步推出全部 BM25(Robertson 和 Zaragoza 2009)

BM25 的饱和及长度归一化

最佳匹配评分(Best Matching 25,BM25)的一种常用形式为

\[ s(q,d)=\sum_{t\in T_q}\operatorname{IDF}(t) \frac{f(t,d)(k_1+1)}{f(t,d)+k_1(1-b+\frac{b|d|}{\bar\ell})}, \tag{12.3}\]

其中逆文档频率(Inverse Document Frequency,IDF)取非负变体

\[ \operatorname{IDF}(t)=\log\left(1+\frac{N-n_t+0.5}{n_t+0.5}\right). \tag{12.4}\]

本章用自然对数,并将查询重复词去重;其他实现可能保留查询词频因子、采用允许负值的 IDF 或按字段计算长度。公式版本必须固定,不能把不同实现的分数直接比较。

固定长度项 \(c_d=k_1(1-b+\frac{b|d|}{\bar\ell})>0\),令 \(g(f)=\frac{(k_1+1)f}{f+c_d}\),有

\[ g'(f)=\frac{(k_1+1)c_d}{(f+c_d)^2}>0,\qquad g''(f)=-\frac{2(k_1+1)c_d}{(f+c_d)^3}<0. \tag{12.5}\]

词频贡献递增但增益递减,且 \(f\to\infty\) 时趋于 \(k_1+1\)。在固定 \(f>0,b>0\) 时,长度增大提高分母,使分数下降;\(b=0\) 不作长度归一化,\(b=1\) 使用完整长度比例。它们校正篇幅带来的机会差异,却不意味着长文档内容必然不重要。

BM25 的数值解释

统计对象与评分对象一致,\(N>0,\bar\ell>0,k_1>0,0\le b\le1\)。长度使用同一分析器词项数,语料统计绑定一个索引快照。空对象不参与平均长度的异常除法,查询词项规则已固定。

双文档评分

\(N=100\),词项甲出现在 \(10\) 个对象,乙出现在 \(50\) 个对象。则 \(\operatorname{IDF}(\text{甲})=\log(1+\frac{90.5}{10.5})\approx2.2637\)\(\operatorname{IDF}(\text{乙})=\log2\approx0.6931\)。取 \(k_1=1.2,b=0.75,\bar\ell=100\)

文档 A 长 \(100\),甲、乙词频为 \((2,1)\),长度项为 \(1.2\),两个词频因子为 \(\frac{4.4}{3.2}=1.375\)\(\frac{2.2}{2.2}=1\),总分约为 \(2.2637\times1.375+0.6931=3.8057\)。文档 B 长 \(200\),词频为 \((3,2)\),长度项为 \(2.1\),因子为 \(\frac{6.6}{5.1}\approx1.2941\)\(\frac{4.4}{4.1}\approx1.0732\),总分约为 \(3.6735\)。B 词频更高,却因更长而排名稍低。

此分数是排序量,不是“答案存在概率”。语料增量会改变 \(N,n_t,\bar\ell\);同一个固定阈值在不同快照或不同字段上可能失去原意义。阈值应在目标任务的开发集上校准,并与无答案情况一起评估。

12.3双编码器及对比学习

独立编码实现离线索引

稠密检索(Dense Retrieval)使用低维连续表示进行匹配。双编码器(Dual Encoder)分别计算查询向量 \(u=f_\theta(q)\in\Real^h\) 和文档向量 \(v_d=g_\phi(d)\in\Real^h\),以 \(s(q,d)=u^{\mathsf T}v_d\) 等方式评分。文档向量可以离线生成,在线仅编码查询并搜索;稠密段落检索是这一设计的典型研究实例(Karpukhin 等 2020)

查询与文档编码器可以共享或不共享参数,还可能使用不同任务前缀。维度相同不保证空间兼容;两个独立版本的向量不能仅因为都是 \(h\) 维就混入同一个索引。归一化、池化、截断和编码模板均属于表示协议。

对比损失及梯度方向

给定查询 \(q_i\)、正例 \(d_i^+\) 和候选文档集合 \(\mathcal C_i\)对比学习(Contrastive Learning)可采用

\[ \mathcal L_i=-\log\frac{\exp(\frac{s(q_i,d_i^+)}{\tau})}{\sum_{d\in\mathcal C_i}\exp(\frac{s(q_i,d)}{\tau})},\qquad\tau>0. \tag{12.6}\]

令候选概率为 \(p_{ij}\)、正例指示为 \(y_{ij}\),则

\[ \frac{\partial\mathcal L_i}{\partial s_{ij}}=\frac{p_{ij}-y_{ij}}\tau, \qquad \nabla_{u_i}\mathcal L_i=\frac1\tau\left(\sum_jp_{ij}v_j-v_i^+\right). \tag{12.7}\]

梯度提高正例相对分数,并压低有较大当前概率的负例。温度改变概率集中度和梯度尺度,因此它不是无影响的显示参数。

例如三个候选的相似度除温度后为 \((\log4,\log2,0)\),第一项为正例,归一化概率与损失为

\[ p=(\frac{4}{7},\frac{2}{7},\frac{1}{7}),\qquad \ell=\log(\frac{7}{4})\approx0.5596. \tag{12.8}\]

对这些缩放后分数的梯度为 \((-\frac{3}{7},\frac{2}{7},\frac{1}{7})\),当前更像正例的第二项获得更大负向学习压力。该算例只计算损失,不代表训练效果。

负例构造及假负例

批内负例(In-Batch Negative)把其他查询对应文档用作当前查询负例,减少额外编码。难负例(Hard Negative)由词法或现有稠密检索器找出分数高但确实不相关的文档,可以形成更有区分度的学习信号。随机负例通常较容易,过度依赖某一种难例又可能使模型只适应当前检索器的错误。

假负例(False Negative)是真实相关却被标成负例的对象。开放语料中一题往往有多个支持文档,批内文档也可能相互相关;强行推开这些向量会损害召回。可以依据已知相关集合屏蔽冲突、使用多正例损失或对疑似负例复核,但不能把“未标为正”自动理解为“确实不相关”。多正例求和形式还应明确是希望任一正例得高分,还是所有正例都被拉近。

训练与评估应按查询家族、文档版本和必要时间边界隔离。文档原文可以作为开放检索库存在,相关性标注却不能泄漏进查询编码或示例选择。相似文本的近重复治理见第18章《训练数据工程基础》

12.4向量相似度及精确搜索

余弦、内积及欧氏距离

对非零向量 \(u,v\)余弦相似度(Cosine Similarity)为 \(\frac{u^{\mathsf T}v}{\|u\|_2\|v\|_2}\)最大内积搜索(Maximum Inner Product Search,MIPS)寻找内积最大的向量;欧氏距离(Euclidean Distance)满足

\[ \|u-v\|_2^2=\|u\|_2^2+\|v\|_2^2-2u^{\mathsf T}v. \tag{12.9}\]

当文档向量范数固定时,对固定查询最大内积与最小欧氏距离排名一致;若查询和文档均归一化为单位向量,则

\[ \|\bar u-\bar v\|_2^2=2-2\cos(u,v). \tag{12.10}\]

此时三种排名等价。零向量不能作单位归一化,应隔离或采用明确规则。

未归一化时,范数会改变结果。令 \(u=(1,0)\)\(v_1=(0.8,0.6)\)\(v_2=(2,2)\)。余弦分别为 \(0.8\)\(\frac{1}{\sqrt2}\approx0.7071\),余弦选择 \(v_1\);内积分别为 \(0.8\)\(2\),MIPS 选择 \(v_2\)。若训练的打分利用范数信息,部署时擅自归一化就改变了目标函数。

精确排名基线

精确最近邻搜索(Exact Nearest Neighbor Search)对所有向量计算指定度量。\(N\)\(h\) 维向量需要 \(O(Nh)\) 评分工作,存储原始单精度向量约 \(4Nh\) 字节,尚不含标识和元数据。矩阵批处理可利用高效硬件,但总扫描量仍随 \(N\) 增长。

精确搜索给出的是该表示和度量下的最近对象,并非相关性真值。可以将稠密系统误差分成表示误差与索引近似误差:若相关文档在精确前列也不存在,需要改进表示或语料;若精确搜索可以找到但近似索引遗漏,需要调整索引搜索。两者采用不同诊断证据。

12.5近似索引的两条路线

(选修)

HNSW 的分层图导航

近似最近邻搜索(Approximate Nearest Neighbor Search,ANN)牺牲部分精确邻居召回,以降低搜索成本。分层可导航小世界图(Hierarchical Navigable Small World,HNSW)为向量构建多层邻近图,高层包含较少节点,底层覆盖全部节点(Malkov 和 Yashunin 2018)。查询从稀疏高层快速靠近目标区域,再向下扩展候选;底层保留比贪心单路径更多的搜索状态。

图构建时的邻居预算 \(M\)、构建搜索宽度与查询搜索宽度影响内存、构建时间和召回。更多边通常提高可导航性,也增加邻接表内存;更宽查询探索更多节点,增加距离计算。启发式邻居选择需要保持方向多样性,若只连接同一局部密簇,图可能难以跨区域导航。

不能对任意数据分布承诺严格对数查询复杂度;实际工作量由图结构、度量、数据簇和过滤条件决定。增量插入使图结构受构建顺序与随机层级影响,删除或大量墓碑也可能降低导航质量。对高选择性权限过滤,需要考虑合法节点的可达性,不能把过滤后的召回退化归咎于编码器。

HNSW 的概念层级:高层导航与底层候选探索。示意连接不代表实际构建结果。
图 12.1 HNSW 的概念层级:高层导航与底层候选探索。示意连接不代表实际构建结果。

倒排文件及乘积量化

倒排文件向量索引(Inverted File Index,IVF)先用粗聚类把向量分到若干单元,再将每个单元中的向量标识组织为列表。查询选择有限个最接近的粗中心,只扫描对应列表。它与词法倒排都使用“键到列表”的组织,但键的含义不同:前者是向量单元,后者是词项。

访问更多单元提高候选覆盖,也增加扫描量。若最近向量被分到未访问单元,后续精确重排无法挽回遗漏。粗聚类若在过时或偏移的数据上训练,单元可能失衡,一些查询扫描大量向量而另一些查询漏掉边界邻居。

乘积量化(Product Quantization,PQ)把 \(h\) 维向量拆成 \(m\) 个子向量,每个子空间训练一个含 \(k\) 个中心的码本,用 \(m\) 个码字索引表示向量(Jégou, Douze, 和 Schmid 2011)。若 \(k=256\),每个子码占一字节,向量码为 \(m\) 字节,码本及原始精排向量的额外存储另计。

非对称距离计算(Asymmetric Distance Computation,ADC)保留查询为高精度,文档用码字中心近似:

\[ \|u-\widehat v\|_2^2=\sum_{j=1}^{m}\|u^{(j)}-c_{j,a_j}\|_2^2. \tag{12.11}\]

查询可先建立每个子空间的距离表,再对每条压缩向量查表求和。组合 IVF 与 PQ 时,还可对向量减去粗中心后的残差编码,查询距离必须计入同一个中心,不能把不同单元的残差当成同一原始坐标。

\(v=\widehat v+e\),反三角不等式给出 \(|\|u-v\|_2-\|u-\widehat v\|_2|\le\|e\|_2\)。平方距离误差满足

\[ \left|\|u-\widehat v\|_2^2-\|u-v\|_2^2\right| \le2\|u-v\|_2\|e\|_2+\|e\|_2^2. \tag{12.12}\]

小距离间隔的候选更易因近似误差交换名次。IVF 的单元漏检与 PQ 的距离失真是两种误差;扩大扫描单元不能直接消除后者,精排压缩候选也不能恢复前者。

索引资源的比较

HNSW 主要增加图导航结构,IVF 限制访问区域,PQ 压缩表示及距离计算。它们不是互斥产品标签,也可以组合。选择时应比较同一表示、同一授权语料和相同精确搜索参照下的 ANN 召回、尾时延、内存、构建成本与更新行为,而非只比较一次查询的平均耗时。

12.6混合检索及学习排序

分数融合的尺度问题

混合检索(Hybrid Retrieval)结合词法和稠密候选。前者对精确术语、数字标识和罕见字符串有明确匹配依据,后者能够利用训练得到的语义关系;但两者均有失败场景。简单分数和 \(\lambda s_{\mathrm{lex}}+(1-\lambda)s_{\mathrm{dense}}\) 只有在尺度处理明确后才有意义。BM25 与余弦的数值范围和分布不同,逐查询最小最大归一化又受异常候选和截断深度影响。

倒数排名融合(Reciprocal Rank Fusion,RRF)直接使用排名(Cormack, Clarke, 和 Büttcher 2009)

\[ s_{\mathrm{RRF}}(d)=\sum_{j:d\in R_j}\frac{w_j}{c+\operatorname{rank}_j(d)},\qquad c>0. \tag{12.13}\]

未进入某路截断列表的文档在该路贡献为零。\(c\) 控制顶部名次差异的影响,\(w_j\) 为预先确定的路权重。RRF 不需要跨路原分数可比,却丢失了分数间隔信息;两路高度重复或错误高度相关时,不保证优于单路。

取词法排名 \((A,B,C)\)、向量排名 \((B,D,A)\)\(c=10,w_j=1\)。得到

\begin{align} s(A)&=\frac{1}{11}+\frac{1}{13}\approx0.16783,\tag{12.14}\\ s(B)&=\frac{1}{12}+\frac{1}{11}\approx0.17424,\tag{12.15}\\ s(C)&=\frac{1}{13}\approx0.07692,\qquad s(D)=\frac{1}{12}\approx0.08333. \tag{12.16}\end{align}

融合顺序为 \(B,A,D,C\)。这里用 \(c=10\) 便于算例,不是通用最佳设置。相同文档的多个重复块若被当作独立对象,融合也不会自动识别其冗余,必须先明确对象身份与文档聚合规则。

重排及候选集上界

重排序(Reranking)在有限候选集上使用更精细的评分。交叉编码器(Cross Encoder)联合输入查询与文档,允许细粒度交互,代价是不能像双编码器那样为每篇文档独立预计算最终相关性。学习排序(Learning to Rank,LTR)可以组合词法分数、稠密分数、结构和其他合法特征。

例如已标注正负文档对可使用成对损失 \(\log(1+\exp[-(s^+-s^-)])\),推动正例高于负例。训练样本来自旧排序器时,需要注意曝光和位置偏差,点击也不等同于完全相关。无论重排器多强,若正确文档不在候选并集中,它都无法将其排到前列;应把召回深度与重排预算共同评价。

12.7权限、版本及增量更新

检索过滤约束

元数据过滤(Metadata Filtering)约束租户、文档类型、语言、生效时间与访问权限。一个授权查询的检索集合应是当前用户可访问的 \(\mathcal D_u\),不是全库评分后让生成器自行忽略秘密。查询时过滤、返回前再次授权检查和缓存隔离应共同保证撤销后的对象不被消费。

只取全库前 \(K\) 再删除无权结果,可能返回少于 \(K\) 条且漏掉合法相关对象。增加预取深度只能缓解,不提供严格召回保证。ANN 图导航还可能需要经过不符合过滤条件的节点,其标识与内容的内部使用边界应由可信检索服务定义;绝不能向调用方暴露未授权结果。高选择性过滤场景应单独测量授权集合上的召回与时延。

索引增量更新

每条索引对象应绑定稳定文档身份、源版本、片段边界、内容摘要、编码器版本、分析器和索引构建配置。文档编辑可能使后续切分边界整体变化,不能仅按旧片段序号覆盖而保留失效片段。编码器更新则通常要求重编码,并在完整新索引就绪后切换查询编码器与文档空间。

增量处理可记录变更日志,采用幂等写入和不可变版本。删除标记(Tombstone)可先阻止旧条目返回,后续通过物理压缩清理图节点、倒排条目、向量和存储。删除还需传播到片段缓存、检索缓存与派生索引;清理内容不等于自动消除所有统计或旧快照,需要分别规定保留边界。

索引快照(Index Snapshot)将语料版本、编码器、分析器、统计及物理索引绑定为一致消费单位。新版本采用原子可见切换,回滚时恢复匹配的查询配置。权限撤销属于即时约束时,不能因为回滚索引而重新授权已经撤销的内容。

离线语料组织与在线检索链路。生成回答不属于本图的检索职责。
图 12.2 离线语料组织与在线检索链路。生成回答不属于本图的检索职责。

算法12.1 具有版本边界的混合检索

输入:查询、已认证身份、一致索引快照、候选深度与排序配置。输出:有序可访问对象及来源。状态:合法过滤条件、各路候选、融合结果。

  1. 解析访问条件与时间范围,选择匹配的分析器和查询编码器;拒绝不兼容版本。

  2. 在授权过滤语义下分别执行词法与向量检索,记录真实候选深度及超时状态。

  3. 按稳定对象身份合并候选,使用预定分数融合或 RRF,按预算重排并处理同文档冗余。

  4. 返回前再次核对当前授权与删除状态,输出实际材料身份、版本、排序分数和诊断状态;资源预算耗尽时按预定规则结束。

不变量:返回内容经过授权,表示与索引版本一致,召回失败或回退不被伪装为正常完整结果。

12.8检索评价指标

覆盖、首条命中及分级排序

召回率(Recall)衡量相关集合被覆盖的比例:

\[ \operatorname{Recall@K}(q)=\frac{|G_q\cap R_q^{(K)}|}{|G_q|},\qquad |G_q|>0. \tag{12.17}\]

命中率(Hit Rate,Hit@K)则是 \(\mathbf1[G_q\cap R_q^{(K)}\ne\varnothing]\)。存在三篇相关文档、只取回一篇时,前者为 \(\frac{1}{3}\),后者为 \(1\);二者不能混称。没有相关对象的查询分母为零,应单独评价无答案检出或拒绝,而不是擅自记为满分。

平均倒数排名(Mean Reciprocal Rank,MRR)关注第一条相关结果。若其位置为 \(j_q\),单查询倒数排名为 \(\frac{1}{j_q}\),未在规定截断内命中则为零,再对查询平均。它不奖励第一条之后更多相关材料,因此与多证据任务的覆盖目标不同。

折损累计增益(Discounted Cumulative Gain,DCG)按等级与位置计算价值,归一化折损累计增益(Normalized Discounted Cumulative Gain,nDCG)用理想排序归一化。累积增益评价的基础见 Järvelin 与 Kekäläinen(Järvelin 和 Kekäläinen 2002)。本章明确采用一种常见变体:

\[ \operatorname{DCG@K}=\sum_{j=1}^{K}\frac{2^{r_j}-1}{\log_2(j+1)},\qquad \operatorname{nDCG@K}=\frac{\operatorname{DCG@K}}{\operatorname{IDCG@K}}. \tag{12.18}\]

理想分母由该查询全部已知相关对象按等级排序取前 \(K\) 得到,不能只重排系统已返回对象。若分母为零,应规定无增益查询的独立口径。1

同一结果的三种指标

某查询已知相关对象为 \(A,B,C\),等级分别为 \(3,2,1\),其余对象等级为零。系统前五名为 \((D,B,E,A,F)\),前四名相关等级为 \((0,2,0,3)\)。因此

\[ \operatorname{Recall@4}=\frac{2}{3},\quad \operatorname{Hit@4}=1,\quad \operatorname{RR@4}=\frac{1}{2.} \tag{12.19}\]

DCG 为 \(\frac{3}{\log_2 3}+\frac{7}{\log_2 5}\approx1.8928+3.0147=4.9075\)。理想等级为 \((3,2,1,0)\),IDCG 为 \(7+\frac{3}{\log_2 3}+\frac{1}{\log_2 4}\approx9.3928\),所以 nDCG@4 约为 \(0.5225\)。相关对象 A 虽然已召回,却位于第四位,折损反映其排名损失。

若第二个可回答查询的第一条相关结果在第三位,则两查询 MRR@4 为 \(\frac{\frac{1}{2}+\frac{1}{3}}{2}=\frac{5}{12}\approx0.4167\)。另有无答案查询时,应单列是否错误返回被当作证据的材料,而不混入上述需要相关集合的分母。这些是构造标注上的完整计算,不代表实际系统质量。

ANN 召回及相关性召回分开

给定精确向量前 \(K\) 集合 \(E_q^{(K)}\),可定义 ANN 召回为 \(\frac{|E_q^{(K)}\cap A_q^{(K)}|}{K}\),用于衡量近似索引对向量排名的保持。它与基于 \(G_q\) 的任务召回不同。一个索引可以完美复现不相关的向量排名,也可以因为近似扰动偶然取得更高任务分数;不能据此认为其表示一定更好。

标注不完整时,未标注文档不一定不相关,召回分母与 nDCG 理想排序均只反映当前已知集合。应保存标注来源,进行多路候选池复核,并按精确实体、语义改写、跨语言、长文档、时效、权限过滤和无答案查询等难例切片报告。宏平均让每个查询等权,按相关对象数加权则回答不同问题。

检索故障的定位顺序

先确认解析与权限范围,再检查相关材料是否进入精确候选,随后检查近似索引与融合是否遗漏,最后检查重排是否把有效材料移出前列。召回、排名与下游答案质量承担不同职责,不能用某一个总分代替全部链路证据。


  1. DCG 有线性与指数增益、不同折损位置等约定。比较报告前必须固定公式、相关等级含义和无相关查询处理,不能仅凭相同指标名称认定可比。↩︎

WORKBOOK / 习题

配套习题与解析

先独立作答,再展开参考解析。选修题保留原书标记。

习题 12.1

为带表格、版本日期和访问限制的文档设计片段记录,说明哪些上下文必须随片段保留。

展开参考解析

片段记录包含document_id、revision、chunk_id、页码/表行列、标题路径、有效日期、来源哈希、权限域和提取器版本。表格值还须携带表头、单位、脚注及适用对象,避免把“10”脱离“万元/季度”。引用定位须能复原原版本,撤权过滤发生在检索与返回两阶段;仅存文本向量不足以证明来源。

习题 12.2

从二元条件独立假设推导词项对数证据,并指出它与完整 BM25 公式之间还需要哪些建模选择。

展开参考解析

由Bayes及条件独立,后验对数赔率等于先验对数赔率加 \(\sum_t[x_t\log(\frac{p_t}{u_t})+(1-x_t)\log(\frac{1-p_t}{1-u_t})]\)。将与文档无关项合并后,出现词的系数是 \(\log[\frac{p_t(1-u_t)}{u_t(1-p_t)}]\)。BM25还需估计概率、平滑IDF、从二元出现推广到词频饱和,并引入长度归一化;这些不是上述独立假设自动推出的唯一形式。

习题 12.3

对式12.3计算词频因子的两个导数,分析 \(b=0\)\(b=1\) 的含义。

展开参考解析

\(K=k_1(1-b+\frac{b\ell}{\bar\ell})>0\),词频因子\(f(t)=\frac{(k_1+1)t}{t+K}\)。有 \(f'(t)=\frac{(k_1+1)K}{(t+K)^2}>0\)\(f''(t)=-\frac{2(k_1+1)K}{(t+K)^3}<0\),即递增且边际收益递减。若也考察长度,\(\frac{\partial f}{\partial\ell}=-\frac{(k_1+1)t k_1b}{[\bar\ell(t+K)^2]}\)。b为0不校正长度,b为1采用全长度比例;极短或极长文本的效果仍取决于词频与语料。

习题 12.4

改变评分例题中文档 B 的长度,求使其得分高于 A 的一个长度,并解释其他条件是否保持一致。

展开参考解析

在冻结\(N,n_t,\bar\ell=100\)的评分快照下,把B长度改成100,长度项变1.2;分数为 \(\log(\frac{101}{10.5})(\frac{6.6}{4.2})+\log2(\frac{4.4}{3.2})\approx4.5104>3.8058\)。可从B删除无关词使目标词频仍为\((3,2)\)。若真的修改整个语料并重建,平均长度等统计也会变;题目没有给其余文档,不能声称冻结统计与重建统计完全相同。

习题 12.5

推导对比损失对查询向量的梯度;如果某个高分负例其实相关,梯度会造成什么后果?

展开参考解析

点积分数\(s_j=u^Tv_j\)\(\mathcal L=-\frac{s_+}{\tau}+\log\sum_j e^{\frac{s_j}{\tau}}\),故 \(\nabla_u\mathcal L=\frac{\sum_jp_jv_j-v_+}{\tau}\)。高分假负例具有较大\(p_j\),梯度下降将查询推离它,损害真实相关邻域。应识别多正例、控制负例污染;不能仅以训练损失下降断言召回更好。

习题 12.6

构造两个未归一化文档向量,使内积、余弦和欧氏距离产生至少两种不同排名。

展开参考解析

取查询\(q=(1,0)\),文档\(a=(10,10),b=(0.9,0)\)。内积10与0.9使a优先;余弦\(\frac{1}{\sqrt2}\)与1使b优先;到q的距离分别\(\sqrt{181}\)与0.1也使b优先。若都单位化,余弦和内积等价且平方欧氏为\(2-2q^Td\),上述分歧依赖范数未统一。

习题 12.7选修

解释为什么 HNSW 增加查询探索宽度可能提高召回,却不能对所有过滤条件保证精确结果。

展开参考解析

更宽探索可访问更多候选、减少局部贪心遗漏,但有限预算和图连通性仍限制结果。权限过滤可能断开原图或消除近邻桥梁,先截断再过滤也可能返回不足K项。应与同权限集合内的精确搜索比较,必要时过滤感知搜索或小集合精确回退;探索宽度不是普适精确性证明。

习题 12.8选修

给定 \(h=768,m=48,k=256\),计算每条 PQ 码的字节数及全部子码本中心的元素数,不含原始精排向量。

展开参考解析

每子空间需\(\log_2 256=8\)位,48段共48字节。每子向量维数\(\frac{768}{48}=16\),全部码本有 \(48\times256\times16=196608\) 个中心元素;若每元素4字节,另为786432字节共享码本。每对象的原向量、ID和索引连接没有计入48字节。

习题 12.9选修

推导 PQ 距离误差界,并说明候选间距很小时为何容易改变排名。

展开参考解析

令重建误差\(e=\hat x-x\),平方距离差为 \(\|q-\hat x\|^2-\|q-x\|^2=-2(q-x)^Te+\|e\|^2\),绝对值不超过 \(2\|q-x\|\|e\|+\|e\|^2\)。若A和B各有误差界\(\epsilon_A,\epsilon_B\),原距离间隔大于二者和可保持排序,否则不能保证。非平方距离还满足反三角不等式界\(|\|q-\hat x\|-\|q-x\||\le\|e\|\)

习题 12.10

使用本章两路排名,分别取 \(c=1\)\(c=60\) 计算 RRF,比较顶部差异的影响。

展开参考解析

两路为\((A,B,C)\)\((B,D,A)\)。c为1时A为\(\frac{1}{2}+\frac{1}{4}=0.75\),B为\(\frac{1}{3}+\frac{1}{2}=\frac{5}{6}\),C为\(\frac{1}{4}\),D为\(\frac{1}{3}\);c为60时A为\(\frac{1}{61}+\frac{1}{63}\approx0.03227\),B为\(\frac{1}{62}+\frac{1}{61}\approx0.03252\),C为\(\frac{1}{63}\approx0.01587\),D为\(\frac{1}{62}\approx0.01613\)。均为B、A、D、C,但顶部B-A差从\(\frac{1}{12}\)降至约0.000256,c越大越弱化顶部位次差异。

习题 12.11

说明为什么重排器不能补救候选漏召回,以及增加候选深度会消耗哪些资源。

展开参考解析

重排只为候选集合内对象评分,唯一证据不在集合中时不存在可提升对象。加深召回增加检索I/O、重排模型输入对数、上下文长度和延迟;联合编码器尤其不能把成本视为常数。应同时绘制候选覆盖与预算曲线,定位是召回遗漏还是排序失误。

习题 12.12

设计文档撤销后在倒排索引、图索引、向量缓存和检索缓存中的删除传播流程,区分立即不可见与物理清理。

展开参考解析

权威权限/墓碑先提交,查询入口与返回前强制过滤,使旧索引暂未删除也不可见;随后发送版本化删除事件更新倒排、图节点和向量缓存,失效依赖该文档的检索缓存。重复删除幂等,乱序旧写入不能覆盖墓碑;物理压缩可异步但须有完成水位。负缓存也依赖语料/权限版本,不能仅追踪已命中文档。

习题 12.13

为前四名等级 \((1,0,3,2)\) 计算 DCG 与 nDCG,并与完整算例比较 Recall、MRR 的不同关注点。

展开参考解析

沿用全部相关等级\(3,2,1\),新排名\((1,0,3,2)\)的DCG为 \(1+\frac{7}{2}+\frac{3}{\log_2 5}\approx5.7920\);IDCG仍\(7+\frac{3}{\log_2 3}+\frac{1}{2}\approx9.3928\),nDCG约0.6166。此时三个相关对象均在前四,Recall为1,首条相关所以RR为1;原例为Recall\(\frac{2}{3}\)、RR\(\frac{1}{2}\)、nDCG0.5225。三个量分别关注覆盖、首次命中和等级排序。

习题 12.14

设计一个 ANN 召回很高但任务召回很低的例子,说明应改索引还是改表示。

展开参考解析

设精确向量前10均为措辞相近却版本错误的文件,ANN全部复现,ANN Recall@10=1;唯一正确版本排名100,任务Recall@10=0。此时首先改表示、版本过滤或查询协议,而不是只加图搜索宽度。若精确前10已有证据而ANN漏掉,才是索引近似误差主导。

REFERENCES

参考文献

Cormack, Gordon V., Charles L. A. Clarke, 和 Stefan Büttcher. 2009. 《Reciprocal Rank Fusion Outperforms Condorcet and Individual Rank Learning Methods》. 收入 Proceedings of the 32nd International ACM SIGIR Conference on Research and Development in Information Retrieval, 758–59. https://doi.org/10.1145/1571941.1572114.
Järvelin, Kalervo, 和 Jaana Kekäläinen. 2002. 《Cumulated Gain-based Evaluation of IR Techniques》. ACM Transactions on Information Systems 20 (4): 422–46. https://doi.org/10.1145/582415.582418.
Jégou, Hervé, Matthijs Douze, 和 Cordelia Schmid. 2011. 《Product Quantization for Nearest Neighbor Search》. IEEE Transactions on Pattern Analysis and Machine Intelligence 33 (1): 117–28. https://doi.org/10.1109/TPAMI.2010.57.
Karpukhin, Vladimir, Barlas Oguz, Sewon Min, Patrick Lewis, Ledell Wu, Sergey Edunov, Danqi Chen, 和 Wen-tau Yih. 2020. 《Dense Passage Retrieval for Open-Domain Question Answering》. 收入 Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing, 6769–81. https://doi.org/10.18653/v1/2020.emnlp-main.550.
Malkov, Yu. A., 和 D. A. Yashunin. 2018. 《Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs》. 2018年. https://arxiv.org/abs/1603.09320v4.
Robertson, Stephen, 和 Hugo Zaragoza. 2009. 《The Probabilistic Relevance Framework: BM25 and Beyond》. Foundations and Trends in Information Retrieval 3 (4): 333–89. https://doi.org/10.1561/1500000019.

搜索全书

搜索全书正文、习题与解析