首页/AI/RAG 与向量库速查/学习式稀疏向量(SPLADE)
Embedding 与检索50 条

学习式稀疏向量(SPLADE)

SPLADE 类模型把文本编码成词表维度的稀疏权重向量(多数维度为 0),把神经检索带入倒排体系:可直接与 BM25 同库混排,对专名与词形变化都比纯词频稳健。

RAG 与向量库速查AI更新于 2026-10-13

学习式稀疏向量是什么

SPLADE 类模型把文本编码成词表维度的稀疏权重向量:经过语言模型头、ReLU 与最大池化后,每个词表位置得到一个非负权重,绝大多数位置是零。它把神经检索的结果搬进了倒排体系——索引只存非零项,检索时按权重累加打分,因此能直接和 BM25 放进同一个引擎混排。相比纯词频,稀疏权重还带查询扩展效应:文档中与原词相关的近义词也会获得权重,对专名与词形变化更稳健。

基本信息

输出形态{token_id: weight} 的稀疏字典,非零项通常几十到上百个
向量维度等于模型词表大小(数万),但只存非零项
索引类型倒排(Milvus 的 SPARSE_INVERTED_INDEX、Qdrant 的 sparse 向量)
打分方式查询与文档的非零项权重求交并累加
依赖需要配套的稀疏编码模型,不能直接用稠密模型代替

典型使用场景

  • 混合检索第二路:稠密向量抓语义,稀疏向量补专名与精确词形
  • 已有 Elasticsearch 体系时的轻量升级:保留倒排栈,再加一路学习式稀疏
  • 多语言或术语密集的专业语料:比纯 BM25 更耐受同义改写
  • 冷启动阶段:训练数据有限时,稀疏模型的表现通常比微调稠密模型更稳
  • 成本敏感场景:稀疏索引存储与查询开销低于大规模 HNSW 内存驻留

稀疏向量的生成与写入

稀疏向量的生成与写入
# 由 MLM 头 + ReLU + max 池化产生,形如 {token_id: weight}
sparse = embed_sparse('向量数据库怎么选型')
# {2345: 0.71, 8712: 1.42, 9903: 0.35, ...}

# Qdrant 写入稀疏向量
client.upsert('kb', points=[models.PointStruct(
    id='c-1', vector={'text': models.SparseVector(indices=[2345, 8712], values=[0.71, 1.42])})])

与 BM25 的差异

维度BM25学习式稀疏
词项来源分词结果,一一对应模型预测,允许扩展近义词
权重词频与文档频率统计模型学习的非负权重
同义词靠词典人工维护模型自带部分扩展能力
可控性规则透明、易解释权重来源不可逐项解释
稀疏模型自带查询扩展,文档里含同名不同义的词时可能引入噪声匹配:上线前用真实查询抽样看误召回的具体例子,别只看总体指标。

易错点

  • 把稀疏向量当稠密向量存进普通向量索引,维度开销与距离计算都不划算
  • 稀疏与稠密两路的分数直接相加融合,量纲不同导致其中一路被完全压制
  • 用稀疏模型替换 BM25 却未做对照评测,专名召回可能反而变差
  • 稀疏模型版本更换后旧索引未重建,查询与新文档表示不在同一空间
  • 非零项上限设得过大,索引体积与检索耗时同步膨胀而收益有限

数据来源与参考

  • Formal et al., SPLADE: Sparse Lexical and Expansion Model for First Stage Ranking (arXiv:2107.05720)
  • Qdrant 官方文档(Sparse vectors)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌