学习稀疏检索:SPLADE
SPLADE 是一种学习稀疏检索方法:用神经模型把查询和文档表示为词表上的权重,再通过稀疏点积计算匹配分数。模型可以为原文未出现的相关词项赋予权重,从而让用词不同的查询与文档产生匹配。
例如,查询写“多久收到钱”,条款写“审批通过后 5 个工作日内支付”,两者表达的是相关内容,却可能缺少足够的共同词项。BM25 依赖词项匹配,容易受这种表达差异影响;SPLADE 学习词项扩展和权重,在保留倒排检索方式的同时补充语义匹配能力。
SPLADE 把语义信息放进稀疏词表
BM25 可以看成在词项空间中匹配查询与文档,权重来自词频、逆文档频率和长度修正。SPLADE 也输出词表维度的表示,但权重由神经模型学习。输出里大多数维度为零,因此能使用适配的倒排索引进行检索。
这些维度对应模型分词器的词表项,可能是完整词,也可能是子词 token。某个词项是否被激活、权重多大,取决于模型与输入文本。
文本先经过 Transformer 编码,掩码语言模型的词表预测头再将每个位置的上下文表示映射为整个词表的分数。因此,原文没有出现的词项也可能得到正值。采用 max pooling 的 SPLADE v2 将这些位置上的分数聚合成一个稀疏向量:
w_j(d) = max_i log(1 + ReLU(a_ij))a_ij 是位置 i 对词表项 j 的预测激活;ReLU 去掉负值,log 限制大值增长,max 汇总所有位置对同一词项的响应。这是特定版本的聚合形式,原始 SPLADE 和后续变体的池化、训练及查询编码方式并不完全相同。
建库时,文档的非零词项和权重写入倒排索引;查询时,模型对问题生成同一词表空间中的表示。两者可以按点积评分:
s(q, d) = sum_j [w_j(q) × w_j(d)]只在双方非零项重合时产生贡献。训练中的稀疏正则项用于约束激活范围;若模型为几乎所有词项都分配正权重,倒排检索原本依靠稀疏性节约的工作就会增加。
稀疏点积的计算
用汉字标签代表词表项,设查询和两条条款的权重如下:
查询: {支付: 1.2, 审批: 0.8}
提交条款: {提交: 1.5, 审批: 0.2}
支付条款: {支付: 1.4, 审批: 0.9, 工作日: 0.7}查询与提交条款只有“审批”维度重合,得分为 0.8 × 0.2 = 0.16。查询与支付条款得分为 1.2 × 1.4 + 0.8 × 0.9 = 2.40。词项维度使得这次匹配的贡献可以被检查,但不能由此推出所有扩展词都可靠。
例如模型错误地扩展了“提交”,也可能把支付问题带向提交条款。词项扩展需要服从查询意图;扩展出的词越多,既可能增加相关候选,也可能引入噪声。
从稀疏表示到倒排索引
离线建库时,先用文档编码器计算每个 chunk 的稀疏表示,保存非零词项的 ID 和权重。倒排索引按词项组织这些记录,每个词项对应一组 (chunk_id, weight)。上例中的“支付”倒排表包含支付条款及权重 1.4;“审批”倒排表同时包含提交条款的 0.2 和支付条款的 0.9。
在线查询时,用与文档编码器配套的查询编码器得到稀疏向量,读取查询非零词项对应的倒排表,再按 chunk 累加点积贡献,取分数最高的候选。无需逐篇计算整个词表维度的点积;实际检索引擎还可以通过跳过低分候选来减少计算。
已有 BM25 倒排基础设施并不意味着可以直接沿用原来的打分设置。SPLADE 需要索引模型输出的扩展词项和权重,并按学习到的权重计算稀疏点积;如果只把扩展词拼回文本再使用 BM25,得到的是另一套评分。选择检索引擎时,要确认它支持所需的稀疏向量格式或词项权重评分。
稀疏度会影响索引体积和查询开销。非零项越多,需要写入和访问的倒排记录通常也越多。训练中的稀疏正则化负责学习阶段的约束;索引时若进一步裁剪低权重项或只保留部分词项,还会改变召回结果,需要区分这两种操作。
模型版本、词表和编码配置应随索引保存。换一套不兼容的词表或模型,只重算查询通常不够,文档索引也要重建。
与 dense、ColBERT 的区别
SPLADE 的每一维对应一个词表项,点积贡献可以追溯到哪些词项参与匹配。单向量 dense 的各维度通常没有这样的词项对应关系,它把整段文本编码成一个固定长度向量,通过向量距离或相似度召回。
ColBERT 则保留 token 级的上下文向量,再用 MaxSim 聚合局部匹配。SPLADE 的 max pooling 是在一段文本内部汇总词项激活;ColBERT 的 MaxSim 是在查询与文档之间寻找 token 最佳匹配,两者发生在不同阶段。
如果现有失败集中在同义表达,且已有倒排检索服务,SPLADE 值得与 BM25、dense 和混合检索一起比较。除了正确证据能否被召回,还要观察非零项数量、索引体积和查询延迟,避免扩展词增加后,召回收益不足以抵消存储与计算开销。
参考资料
- SPLADE v2: Sparse Lexical and Expansion Model for Information Retrieval:max pooling、稀疏表示及训练改进。