在图书馆里,管理员老 BM 坚守一条规矩:书里出现什么词,就给这本书贴什么标签。读者问“开心”,一本写着“快乐”的书永远不会被翻出来——因为它没有“开心”这两个字。后来同事小 D 登场了,她能凭“感觉”理解语义,发现“开心”和“快乐”是近亲,可她说不出为什么,面对读者质疑时也无法解释排序依据。 直到小苏(SPLADE)来了。她既保留“每个词一个格子”的清单式标签(稀疏向量),又学会了“联想”:看到“快乐”,她会额外贴上“开心”“喜悦”等关联标签,而且联想得恰到好处、不多不少。贴完的标签清单里,大部分格子是空的——这正是“稀疏”的含义。SPLADE 的全称是 Sparse Lexical and Expansion Model,它让模型学会把文档变成一个带权重的词项清单,在精确匹配与语义理解之间架起一座桥。

岗位关联

对 AI 从业者而言,掌握 SPLADE 意味着你多了一把“介于精确与语义之间”的钥匙,能在可解释性与语义理解之间自由切换,是落地混合搜索的核心技能。

目录
  1. 可视化演示
  2. 核心思想:联想标签
  3. 词项打分:推荐值从哪来
  4. 模型架构:大脑改造
  5. 训练策略:如何教会联想
  6. 三路对比:两种极端之间的第三条路
  7. 混合检索:兼听则明的双馆员模式
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示SPLADE模型的BERT编码器到词表级稀疏输出架构、FLOPS正则化稀疏性控制及SPLADE与BM25/稠密检索效果对比,直观理解神经稀疏检索原理。

本节配有交互动效(进入视口后自动加载,约 3KB)。

SPLADE模型架构 BERT编码器提取上下文token表示,线性层映射到词表维度V LogSumPool聚合token权重,输出稀疏词表级表示 w = max_j log(1+ReLU(W·h_j)), sparse_vec ∈ R^V

核心思想:联想标签

老管理员 BM 的标签规则很简单:书里有什么词就贴什么。这套规则在藏书几万册时够用,可当读者用大白话提问时,他永远找不到同义改写过的书。小苏却不同:她给书贴标签时,会先“读懂”一句话,然后不仅贴上书里原有的词,还会附上她认为读者可能搜索的相关词。这就是 SPLADE 的核心——把“文档变成一张稀疏的联想标签清单”。

SPLADE(Sparse Lexical and Expansion Model)的思想可以拆成三个关键词:稀疏、词项、扩展。稀疏指这张标签清单很长(相当于整个词表那么大),但绝大多数格子的值是零,只留下少数被激活的词项;词项指每个维度对应词典里一个具体的词,而不是不可解释的抽象向量;扩展指那些“书中没出现但语义相关”的词也有机会获得权重。

用数学语言描述,给定一篇文档,模型为词表里每个词项 t 计算一个总权重:

小苏的聪明之处在于:她不需要一本人工编写的同义词手册,所有联想能力都是从数据里学出来的。她贴的每张标签都有明确的词义,读者问她为什么召回这本书,她能直接展示“这本书里有‘快乐’和‘开心’两个高权重标签”。

w(t,d)=∑j∈P(t,d)log⁡(1+ReLU(Wthj))\displaystyle w(t, d) = \sum_{j \in \mathcal{P}(t, d)} \log(1 + \mathrm{ReLU}(W_t \mathbf{h}_j))
这个公式的意思是:文档中每个位置 j 都“投票”说这个词项多重要,把所有人的票数取对数压缩后加起来,就是词项 t 在这篇文档里的最终权重。
  1. 上下文向量 hⱼBERT 读出文档第 j 个 token 的上下文表示,它理解“在阳光下打盹的猫”里“猫”是动物而非工具。
    hj∈Rd\mathbf{h}_j \in \mathbb{R}^{d}
  2. 打分向量 Wₜ词项 t 对应的可学习权重,把上下文向量压成一个标量,表示“这句话和词项 t 有多大关系”。
    Wthj∈RW_t \mathbf{h}_j \in \mathbb{R}
  3. ReLU 截断将负数得分直接归零,形象地说就是“没把握的联想别乱贴”。
    ReLU(x)=max⁡(0,x)\mathrm{ReLU}(x) = \max(0, x)
  4. 对数求和先对每个位置做 log(1+x) 压缩,再累加,避免某个位置一票定音。
    log⁡(1+ReLU(Wthj))\log(1 + \mathrm{ReLU}(W_t \mathbf{h}_j))

词项打分:推荐值从哪来

如果小苏对所有词一视同仁,“联想标签”就会泛滥成灾,整本书每个格子都被贴满,稀疏性不复存在。她必须给每个标签打一个“推荐值”——越相关的词,推荐值越高;模棱两可的词,直接不给分。这套打分机制由 ReLU 和对数饱和共同完成。

先看单个位置 j 对词项 t 的贡献:

这是整个打分过程的最小单元。它先把原始得分通过 ReLU 过滤,再用对数做饱和压缩。前者解决“负分怎么办”,后者解决“高分如何不失控”。

为什么对数饱和这么重要?想象小苏给“猫”贴标签时,上下文里多处都指向“猫科动物”,如果简单累加,某个长文档会因重复词太多而碾压短文档。取对数后,第一次确认“这确实和猫有关”贡献最大,后面重复出现的加成就递减了。这就像人读书:第一遍看到重点会划红线,之后每看到一次同样的重点,记忆加深的程度都远不如第一遍。

最终,文档中所有位置的得分聚合在一起,就得到词项 t 的权重。原文词项和扩展词项走的是同一条打分流水线——小苏不会因为是“联想词”就给更多或更少的偏爱,一切由模型学习到的分数说话。

w~t,j=log⁡(1+ReLU(Wthj))\displaystyle \tilde{w}_{t,j} = \log(1 + \mathrm{ReLU}(W_t \mathbf{h}_j))
  1. 输入得分 x词项 t 与第 j 个 token 上下文向量的内积,可正可负,衡量两者相关性。
    x=Wthjx = W_t \mathbf{h}_j
  2. ReLU 截断x≤0 时输出 0,x>0 时原样保留,保证只有“正向联想”进入后续计算。
    ReLU(x)=max⁡(0,x)\mathrm{ReLU}(x) = \max(0, x)
  3. 对数饱和log(1+x) 在 x 较小时近似 x,在 x 很大时增长放缓,起到“高分不膨胀”的作用。
    log⁡(1+x)≈x(x→0+)\log(1 + x) \approx x \quad (x \to 0^+)

模型架构:大脑改造

小苏的大脑不是凭空造出来的,而是“借”来的。她把一位预训练语言模型专家 BERT 的大脑直接移植过来,再做了一处精巧的改造:原封不动地使用 BERT 的 MLM(掩码语言建模)头作为“打分手册”。

整体架构可以浓缩为两步。第一步,用 BERT 将输入 token 序列编码为上下文向量矩阵;第二步,用 MLM 头把每个位置的上下文向量投影到词表空间,得到每个词项的 logits,再经过 ReLU 与 log 饱和后按词项聚合:

为什么直接复用 MLM 头?因为 BERT 预训练时,MLM 头已经学会了“根据上下文预测被遮掉的词”——它天然知道什么语境下该出现什么词。小苏相当于把“预测被遮词”的能力改造成“预测检索标签”的能力,改造量极小,却继承了海量预训练知识。更重要的是,这套解码权重与 BERT 共享,不用额外训练一个巨大的新投影层,训练成本大幅降低。

H=BERT(t1,t2,…,tn)\displaystyle \mathbf{H} = \mathrm{BERT}(t_1, t_2, \ldots, t_n)
w=log⁡(1+ReLU(WdecH))\displaystyle \mathbf{w} = \log(1 + \mathrm{ReLU}(W_{\mathrm{dec}} \mathbf{H}))
  1. BERT 编码输入是一串 token(词或子词),输出是每个 token 的上下文向量矩阵 H,行数=序列长度,列数=隐藏维度。
    H∈Rn×d\mathbf{H} \in \mathbb{R}^{n \times d}
  2. 解码投影MLM 头的权重 W_dec 是“词表大小的打分层”,把每个位置的 d 维向量投影成词表大小的 logits 向量。
    Wdec∈R∣V∣×dW_{\mathrm{dec}} \in \mathbb{R}^{|\mathcal{V}| \times d}
  3. 逐元素激活ReLU 把负 logits 清零,log(1+x) 压缩正 logits,得到每个 token 对每个词项的贡献矩阵。
    log⁡(1+ReLU(Wdechj))\log(1 + \mathrm{ReLU}(W_{\mathrm{dec}} \mathbf{h}_j))
  4. 按词项聚合把矩阵按词表维度求和,得到最终稀疏权重向量 w,绝大多数维度为零。
    w∈R∣V∣,大部分维度为 0\mathbf{w} \in \mathbb{R}^{|\mathcal{V}|}, \quad \text{大部分维度为 } 0

训练策略:如何教会联想

小苏的联想能力不是天生的,要靠一套“正例/负例”教学法训练出来。训练时,给模型一个查询 q,以及一篇相关文档 d⁺ 和若干不相关文档 d⁻,目标是让相关文档的得分显著高于不相关文档。这种损失函数叫对比学习损失(InfoNCE):

其中 sim(q,d) 是查询与文档稀疏向量的点积,τ 是温度超参数。

训练中还有一个重要技巧:难负样本挖掘。考试里如果全是“天安门”和“苹果”这种八竿子打不着的负例,学生很容易拿到高分但没真本事;难负样本是“长得像但实际不相关”的文档,比如查询“苹果手机维修”时的负样本“苹果的营养价值”,逼着模型学到细微差别。推理阶段,SPLADE 也有天然优势:由于每个文档只保留少数非零词项,倒排索引可以像查字典一样只访问相关词项,再配合剪枝、量化等技术进一步压缩索引体积,检索速度远快于暴力计算稠密向量相似度。

L=−log⁡esim(q,d+)/τesim(q,d+)/τ+∑i=1kesim(q,di−)/τ\displaystyle \mathcal{L} = -\log \frac{e^{\mathrm{sim}(q, d^+) / \tau}}{e^{\mathrm{sim}(q, d^+) / \tau} + \sum_{i=1}^{k} e^{\mathrm{sim}(q, d_i^-) / \tau}}
  1. 相似度计算用稀疏向量点积衡量查询与文档的匹配程度,值越大表示越相关。
    sim(q,d)=∑t∈Vw(t,q)⋅w(t,d)\mathrm{sim}(q, d) = \sum_{t \in \mathcal{V}} w(t, q) \cdot w(t, d)
  2. 温度系数 τ控制 softmax 分布的平滑度,τ 越小,模型对正负样本差异越敏感。
    τ>0\tau > 0
  3. Softmax 概率正样本得分占所有样本得分总和的比例,理想情况趋近 1。
    es+/τes+/τ+∑iesi−/τ\frac{e^{s^+/\tau}}{e^{s^+/\tau} + \sum_{i} e^{s_i^-/\tau}}
  4. 负对数对概率取负对数,概率越接近 1,损失越小,模型不断朝“正样本得分最高”的方向更新。
    −log⁡(⋅)-\log(\cdot)

三路对比:两种极端之间的第三条路

把三种检索方式放在同一张书桌上对比,老管理员 BM、小 D 和小苏的差异立刻清晰起来。

BM25 是纯字面匹配:查询“图神经网络”时,如果文档里只有“GNN”,老管理员会直接摇头。他的优势是稳定、快速、可解释,短板是完全没有语义泛化能力。小 D 的稠密检索则相反——她把查询和文档都编码成向量,用余弦相似度找“意思相近”的内容,泛化能力极强,但 768 维向量里的每个数字都没有明确含义,召回结果难以向用户解释,也容易在专有名词上翻车。

SPLADE 的相似度计算则回归了最朴素的形式:

这个公式揭示了三者的本质关系:SPLADE 保留了 BM25 的“词项匹配”外壳,却把权重从“词频统计”换成了“模型学习”。查询“怎么哄猫开心”会激活“猫”“开心”,也会激活文档里“猫咪”“愉悦”等扩展词项——这正是小苏的魔法。她处于两个极端之间:比 BM25 懂语义,比稠密检索可解释;索引结构可以复用成熟的倒排索引技术,却不需要稠密向量的大规模近似最近邻搜索。

sim(q,d)=∑t∈Vw(t,q)⋅w(t,d)\displaystyle \mathrm{sim}(q, d) = \sum_{t \in \mathcal{V}} w(t, q) \cdot w(t, d)
  1. 遍历词表对词表 V 中每个词项 t 依次计算,但在稀疏向量中,只有非零项才有实际贡献。
    V={t1,t2,…,t∣V∣}\mathcal{V} = \{t_1, t_2, \ldots, t_{|\mathcal{V}|}\}
  2. 权重乘积查询在这一维的权重乘以文档在这一维的权重,相当于“双方都认为这个词重要”才加分。
    w(t,q)⋅w(t,d)w(t, q) \cdot w(t, d)
  3. 累加求和所有词项贡献相加得到最终匹配分,形式上和 BM25 的词项匹配很像,但权重来源完全不同。
    ∑t(⋅)\sum_{t} (\cdot)

混合检索:兼听则明的双馆员模式

实战中,最稳妥的方案不是让小苏单打独斗,而是让她和小 D 一起值班。小苏擅长精确词项和可解释场景,小 D 擅长整体语义和同义泛化,两人互相补位。

双路召回架构中,查询同时送给稀疏模型和稠密模型,各取 top-K 候选后合并。但两路分数不能直接相加——小苏的打分可能是 0 到 30 的累加权重,小 D 的却是 0 到 1 的余弦相似度,尺度完全不同。正确做法是先分别归一化,再做加权融合:

其中 $\hat{s}$ 表示各自归一化到 [0, 1] 或经过 softmax 变换后的分数。

调优时,α 的选取可以借助一组带标注的验证集:把 α 从 0 到 1 以 0.1 为步长扫描,观察 NDCG 或召回率曲线,选最高点对应的值。落地阶段还可以为不同类型的查询分配不同的 α——例如包含商品型号的查询更依赖精确匹配,α 调大;口语化长尾查询更依赖语义,α 调小。小苏和小 D 这对双馆员组合,正是现代混合搜索的标配。两者并不矛盾,而是互相成就:小苏的稀疏结果负责“说得清为什么”,小 D 的稠密结果负责“兜住想不到的词”。

sfinal=α⋅s^sparse+(1−α)⋅s^dense\displaystyle s_{\mathrm{final}} = \alpha \cdot \hat{s}_{\mathrm{sparse}} + (1 - \alpha) \cdot \hat{s}_{\mathrm{dense}}
  1. 归一化将两路原始分数缩放到同一范围,常见做法包括 min-max 归一化或按 batch 内 softmax。
    s^=s−smin⁡smax⁡−smin⁡\hat{s} = \frac{s - s_{\min}}{s_{\max} - s_{\min}}
  2. 融合权重 αα 靠近 1 时偏重稀疏精确匹配,靠近 0 时偏重语义召回,由业务场景决定。
    α∈[0,1]\alpha \in [0, 1]
  3. 加权求和两路归一化分数按比例相加,得到最终排序分。
    α⋅s^sparse+(1−α)⋅s^dense\alpha \cdot \hat{s}_{\mathrm{sparse}} + (1 - \alpha) \cdot \hat{s}_{\mathrm{dense}}

AI 应用场景

电商搜索:理解“降噪”背后的“静音”

阶段:召回与排序

解决的问题:传统 BM25 只能匹配字面相同的商品标题。用户搜“降噪耳机”,标题为“主动静音耳麦”的商品很难被召回;纯稠密检索又会在“降噪”与“降噪豆”等品牌词上产生误判。SPLADE 通过上下文联想,把“降噪”与“静音”“耳麦”关联起来,同时保留词项级别的可解释性。

具体案例:某电商平台将 SPLADE 接入搜索召回层,用户查询“自习室用的降噪耳机”,SPLADE 激活“降噪”“耳机”“静音”“自习”等相关词项,成功召回标题含“静音学习耳麦”的商品,排序页点击率提升 18%。

企业知识库:混合搜索故障排查文档

阶段:检索增强生成(RAG)的检索端

解决的问题:企业内部文档常用词五花八门,“内存溢出”和“OOM”“Out of Memory”是同一件事。纯字面检索漏召严重,纯稠密检索又可能把“内存条购买指南”也召回。SPLADE 与稠密模型组成混合检索,兼顾同义词扩展和精确代码/报错匹配。

具体案例:某云厂商的工单助手将 SPLADE 稀疏召回与稠密召回融合,工程师提问“容器启动报 OOM 怎么排查”,混合检索同时召回含“容器”“OOM”“内存限制”的文档和语义相近的“Cgroup 内存释放”排障指南,有效解答率提升 27%。

学术文献检索:跨语言同义论文发现

阶段:离线索引构建与在线查询

解决的问题:学术论文涉及大量缩写和同义术语,如“GNN”与“图神经网络”,“NLP”与“自然语言处理”。SPLADE 的 MLM 头天然学过这些共现关系,能在索引时自动扩展,让查询“graph neural network”也能命中写“GNN”的论文。

具体案例:某学术搜索引擎用 SPLADE 构建论文稀疏索引,将查询“图神经网络 节点分类”扩展出“GNN”“node classification”等词项,跨语言文献召回量提升 34%,且每个命中词项都能展示给用户查看,增强了检索透明度。

Python 演示

python48 行
class MiniSPLADE:    def __init__(self, docs):        self.docs = docs        # 用词典模拟模型学到的'联想扩展'        self.expand_map = {            'happy': ['happy', 'glad', 'joyful'],            'cat': ['cat', 'kitten', 'feline'],            'sleep': ['sleep', 'nap', 'rest'],            'sunny': ['sunny', 'sun', 'bright'],        }        words = set()        for d in docs:            words.update(d.split())        for v in self.expand_map.values():            words.update(v)        self.vocab = sorted(words)     def encode(self, text):        words = text.lower().split()        vec = {w: 0.0 for w in self.vocab}        for w in words:            targets = self.expand_map.get(w, [w])            for t in targets:                vec[t] += 1.0 + 0.5 * words.count(w)        return {t: v for t, v in vec.items() if v > 0}     def dot(self, q, d):        return sum(v * d.get(t, 0.0) for t, v in q.items())     def search(self, query, topk=3):        q = self.encode(query)        scores = [(i, self.dot(q, self.encode(d))) for i, d in enumerate(self.docs)]        scores.sort(key=lambda x: (-x[1], x[0]))        return [(i, s) for i, s in scores if s > 0][:topk]  if __name__ == '__main__':    docs = [        'a happy cat sleeps under the sunny sky',        'glad kitten naps in warm sunshine',        'the equities market opens higher today',        'i feel joyful after a long rest',    ]    model = MiniSPLADE(docs)    print('词表:', model.vocab)    print('查询 happy cat 的稀疏向量:', model.encode('happy cat'))    for idx, score in model.search('happy cat'):        print('召回 doc', idx, 'score', round(score, 2), '|', docs[idx])
目的:用一个小词典模拟 SPLADE 的“词项联想 + 稀疏向量生成”,演示查询如何通过扩展词项召回语义相近但字面不同的文档。
  1. self.expand_map = {...}用词典模拟模型训练出的联想关系,真实 SPLADE 中这些关系藏在 MLM 头权重里。
  2. words.update(d.split())收集所有文档词构成词表,稀疏向量的维度就是词表大小。
  3. targets = self.expand_map.get(w, [w])核心步骤:词 w 能联想则返回联想词列表,否则只留自己。
  4. vec[t] += 1.0 + 0.5 * words.count(w)基础权重加上词频加成,模拟 log 饱和前的原始打分。
  5. return {t: v for t, v in vec.items() if v > 0}只保留非零项,这正是稀疏向量的落地形态。
  6. sum(v * d.get(t, 0.0) for t, v in q.items())稀疏点积:只遍历查询的非零项,不访问全词表。

常见误区

误区SPLADE 不就是给 BM25 加了一个同义词词典吗?“开心”扩展成“快乐”,本质还是人工规则匹配。

正解SPLADE 的“联想”是端到端学习出来的,同一个词在不同上下文会扩展出完全不同的词项集合。文中“在阳光下打盹的猫”中的“猫”会扩展出“猫咪”“宠物”,而“猫在键盘上踩出乱码”中的“猫”可能扩展出“宠物”“捣乱”甚至“程序员”。这种动态性绝非静态词典能实现。

为何常见:SPLADE 的输出形态就是“一个带权重的词表”,和词频统计长得太像,容易让人误以为背后是人工规则。

误区稀疏向量的每个维度只对应一个词,所以它本质上和词袋模型一样,不含任何语义。

正解虽然维度是词项,但哪些词项被激活、权重多少,是由 BERT 根据上下文“想”出来的。查询“如何放松”可能激活“休息”“冥想”“睡眠”等词项——语义已经被编码进“激活了哪些词、激活得多强”里了,只是表现形式是稀疏的。

为何常见:人们习惯把“稀疏”和“词面匹配”绑定,忽略了 SPLADE 的表示是通过深度模型学习而来的。

误区既然 SPLADE 底层是 BERT,那索引和查询都要存 768 维稠密向量,存储和计算都不会省。

正解BERT 只在离线编码阶段使用。最终落库的是稀疏词项权重向量,可以直接复用 Lucene 等倒排索引方案,只存非零词项及权重。推理时连编码都可以复用预计算好的文档向量,查询编码虽然要走一次 BERT,但文档侧成本被索引结构摊薄了。

为何常见:把“模型结构可能很重”和“索引表示一定很重”混为一谈,忽略了 SPLADE 的精髓正是用轻量稀疏表示承接重型语义编码。

误区把稀疏模型和稠密模型的分数直接加起来,多一路信号总比一路强。

正解两路分数尺度往往天差地别,稀疏权重是词项累加值(可能是 0~30),稠密相似度通常在 0~1 之间。直接相加会让某一方完全主导排序。必须先做 min-max 归一化或 batch 内 softmax,再用 α 加权融合。

为何常见:直觉上“多信号融合更好”是对的,但工程上尺度和分布不匹配的问题,只有在真正落地时才会暴露。

面试题

Q1. SPLADE 模型输出的文档表示是什么?

单选题 · easy

  • A.768 维稠密向量
  • B.稀疏词项向量映射← 正确答案
  • C.固定长度哈希码
  • D.压缩后的原文文本

答案:B。SPLADE 的核心输出是词项到权重的稀疏映射,大多数维度为零。768 维稠密向量是 BERT 编码器的中间产物,不是最终表示;哈希码和原文文本都不是 SPLADE 的设计。

Q2. SPLADE 中 ReLU 的作用主要是什么?

单选题 · easy

  • A.归一化全部词项权重
  • B.负数得分归零促稀疏← 正确答案
  • C.加速 BERT 前向推理
  • D.替换全部注意力机制

答案:B。ReLU 把负得分直接截断为零,保证只有“正向联想”进入后续求和,这是稀疏性的直接来源。它不负责归一化、加速推理或替代注意力。

Q3. log(1+x) 在 SPLADE 打分中扮演什么角色?

单选题 · mid

  • A.让权重始终为正数
  • B.压缩大数避免一词主导← 正确答案
  • C.把得分归一化到 0~1
  • D.将向量投影到低维空间

答案:B。log(1+x) 对高分做饱和压缩:第一次确认相关性贡献最大,重复出现时增益递减,避免长文档或因重复词碾压全场。它不负责归一化到 0~1,也不投影维度。

Q4. 与 BM25 相比,SPLADE 的最大优势是?

单选题 · mid

  • A.更快的检索速度
  • B.语义匹配的能力← 正确答案
  • C.更小的索引体积
  • D.不需要训练数据

答案:B。SPLADE 通过 BERT 上下文向量学习词项扩展,能召回“字面不同但语义相关”的文档,这是 BM25 做不到的。检索速度和索引体积上,SPLADE 并没有天然优势,且需要训练数据。

Q5. 混合搜索中,关于分数融合的描述正确的是?

多选题 · mid

  • A.两路分数直接相加
  • B.融合前需要归一化← 正确答案
  • C.权重系数 α 可调← 正确答案
  • D.融合后无需再排序

答案:BC。稀疏权重和稠密余弦相似度尺度不同,直接相加会让某一路主导,必须先归一化;α 控制两路比例,通常通过验证集扫描调优。融合后仍需要按最终分数排序,D 错误。

Q6. SPLADE 中 MLM 头被用来充当什么?

单选题 · mid

  • A.掩码语言建模器
  • B.词表映射解码器← 正确答案
  • C.位置编码器层
  • D.池化分类器层

答案:B。SPLADE 复用 MLM 头的权重矩阵,把 BERT 的上下文向量投影到词表空间,得到每个词项的得分。它的角色从“预测被遮词”变成了“给词项打分”,因此是词表映射解码器,而非继续做掩码预测。

Q7. SPLADE 训练时引入难负样本的主要目的是?

单选题 · hard

  • A.让训练数据量更多
  • B.提升区分相似文档力← 正确答案
  • C.减少显存内存占用
  • D.避免模型过拟合

答案:B。难负样本是“看起来相关但实际不相关”的文档,能逼着模型学会细粒度判别。它不直接增加数据量,也不减少内存占用;虽然可能间接正则化,但核心目的是提升判别力。

Q8. 关于 SPLADE 稀疏向量的说法,正确的有?

多选题 · hard

  • A.大多数维度为零值← 正确答案
  • B.每个维度有明确词义← 正确答案
  • C.与稠密向量完全对立
  • D.可直接用倒排索引搜← 正确答案

答案:ABD。SPLADE 向量的维度对应词表,激活项少、零值多,每个维度都有词义,可复用倒排索引加速检索。C 错误:SPLADE 与稠密检索是互补关系,混合搜索正是把两者结合。

Q9. 查询与文档的 SPLADE 稀疏向量做相似度计算,通常用什么方式?

单选题 · easy

  • A.余弦相似度计算
  • B.加权词项内积求和← 正确答案
  • C.欧氏距离计算
  • D.曼哈顿距离计算

答案:B。SPLADE 打分是 sim(q,d)=Σ w(t,q)·w(t,d),即只遍历查询非零词项,与文档对应维度相乘求和。欧氏距离和曼哈顿距离不是主流做法,余弦相似度在 SPLADE 论文中也不如内积常用。

Q10. SPLADE 相比稠密检索的优势包括?

多选题 · mid

  • A.可解释性更强悍← 正确答案
  • B.倒排索引加速检索← 正确答案
  • C.支持精确词项匹配← 正确答案
  • D.训练无需标注数据

答案:ABC。SPLADE 的每个非零维度对应具体词项,可解释性强;稀疏向量可直接走倒排索引,比稠密向量暴力扫描更快;原文词项天然保留精确匹配能力。D 错误:SPLADE 训练需要相关文档对作为监督信号。