稀疏检索技术作为信息检索领域的基石,已经默默支撑搜索引擎运行了数十年。尽管近年来密集嵌入(dense embeddings)方法备受关注,稀疏检索技术正在经历一场复兴。这种复兴源于其独特的优势:计算效率高、结果可解释性强,以及与现有基础设施的无缝兼容。
传统稀疏检索方法的核心思想是将文档和查询表示为高维空间中的稀疏向量,其中每个维度对应词汇表中的一个词项。这种表示方法的优势在于:
然而,传统方法也面临词汇不匹配(vocabulary mismatch)和语义理解不足等挑战。这正是近年来神经稀疏检索方法试图解决的问题。
TF-IDF(Term Frequency-Inverse Document Frequency)是信息检索领域最经典的权重计算方法。其核心思想是:一个词项在文档中出现次数越多(TF越高),同时在所有文档中出现次数越少(IDF越高),则该词项对该文档的代表性越强。
TF-IDF的计算公式如下:
code复制TF(t,d) = (词项t在文档d中的出现次数) / (文档d的总词数)
IDF(t,D) = ln(文档集合D的总文档数 / (1 + 包含词项t的文档数))
TF-IDF(t,d,D) = TF(t,d) × IDF(t,D)
实际应用中,TF-IDF存在两个明显缺陷:
BM25(Best Match 25)是TF-IDF的改进算法,通过引入两个关键调整解决了上述问题:
BM25的完整公式为:
code复制score(D,Q) = Σ IDF(qi) × (f(qi,D) × (k1 + 1)) / (f(qi,D) + k1 × (1 - b + b × |D|/avgdl))
其中:
提示:在实际系统中,BM25的参数k1和b需要根据具体数据集进行调整。通常建议先使用默认值(k1=1.5,b=0.75),然后在小规模验证集上进行微调。
BM25只是一个评分函数,实际检索系统还需要高效的索引结构。倒排索引(Inverted Index)是支撑大规模检索的核心数据结构。
倒排索引的构建过程:
倒排索引的查询处理流程:
传统稀疏检索面临的核心挑战是词汇不匹配问题。Doc2Query(2019)提出了一种简单而有效的解决方案:使用生成模型为每个文档生成可能的查询,然后将这些查询附加到原文后进行索引。
Doc2Query的工作流程:
Doc2Query的优势在于:
DeepCT(Deep Contextualized Term weighting)进一步提出了基于上下文的术语加权方法。其核心思想是:同一个词在不同上下文中可能具有不同的重要性。
DeepCT的技术要点:
DeepCT的训练目标基于查询词召回率(Query Term Recall):
code复制QTR(t,d) = (包含词项t的d相关查询数) / (d的总相关查询数)
实际应用中发现,DeepCT倾向于给文档核心概念赋予更高权重,而对边缘概念赋予较低权重。这种特性使其在主流信息需求场景表现优异,但在查找细节信息时可能表现不佳。
SparTerm在DeepCT基础上引入了显式的术语扩展机制,通过两个核心模块解决语义鸿沟问题:
重要性预测器(Importance Predictor):
门控控制器(Gating Controller):
SparTerm的训练采用两阶段策略:
虽然SparTerm取得了不错的效果,但其架构复杂性和训练流程的繁琐性限制了其广泛应用。
SPLADE(Sparse Lexical and Expansion Model)对SparTerm进行了大幅简化,主要改进包括:
SPLADE的词汇权重计算采用对数饱和求和:
code复制w_j = Σ log(1 + ReLU(z_ij))
其中z_ij是第i个位置对词项j的logit。
SPLADE的成功很大程度上归功于其精心设计的训练策略:
code复制L_FLOPS = Σ (平均激活)^2
实际应用中,SPLADE对查询和文档使用不同的正则化强度(λ_q > λ_d),因为查询端的稀疏性对延迟影响更大。
SPLADE-v2进一步简化了权重计算,将求和改为最大值:
code复制w_j = max log(1 + ReLU(z_ij))
这种改变带来了三个好处:
根据应用场景选择合适的方法:
索引优化:
查询处理:
参数调优:
召回率低:
准确率低:
延迟高:
稀疏检索技术仍在持续进化,几个有前景的方向包括:
在实践中,我们观察到稀疏检索特别适合以下场景:
从工程角度看,现代稀疏检索系统的实现要点包括:
在部署稀疏检索系统时,建议采用渐进式策略:
我个人在多个实际系统中的经验表明,稀疏检索方法在保持高效率的同时,通过现代神经技术的增强,已经能够达到接近密集方法的检索质量。特别是在需要频繁更新内容、对延迟敏感的在线场景中,稀疏检索仍然是不可替代的基础技术。