
稀疏编码器损失函数SPLADE所有损失函数都位于sentence_transformers.sparse_encoder.losses中。本参考针对SPLADE架构Transformer SpladePooling。稀疏编码器包还为 CSR 架构Transformer Pooling SparseAutoEncoder导出了CSRLoss和CSRReconstructionLoss这些不在本文范围内——如果你训练 CSR 模型请参见 sbert.net 文档。选择损失意味着 (a) 选择一个基础损失对比、回归、蒸馏(b) 将其包装在SpladeLoss中以添加 FLOPS 正则化。顶层决策表你有使用(anchor, positive)或三元组SPLADE 架构SpladeLoss(lossSparseMultipleNegativesRankingLoss(model), ...)相同想要 256 的有效批次大小CachedSpladeLoss(...)带标签的(text1, text2, score)对SparseCoSENTLoss或SparseCosineSimilarityLoss从交叉编码器教师蒸馏SparseMarginMSELoss列表级蒸馏SparseDistillKLDivLoss显式三元组SparseTripletLoss核心包装器SpladeLossSpladeLoss在另一个稀疏损失之上添加FLOPS 正则化。FLOPS 正则化惩罚非零激活保持嵌入真正稀疏。lossSpladeLoss(modelmodel,lossSparseMultipleNegativesRankingLoss(modelmodel),query_regularizer_weight5e-5,document_regularizer_weight3e-5,)query_regularizer_weight惩罚查询嵌入中非零项的程度。document_regularizer_weight对文档同样如此。典型范围1e-5 到 1e-4。更高 更稀疏的嵌入、更低的召回率更低 更稠密可能更好的召回率。当损失是SpladeLoss时SparseEncoderTrainer会自动注册一个SpladeRegularizerWeightSchedulerCallback。该回调在训练的前约 33% 将权重从 0 爬升到目标值默认形状是SchedulerType.QUADRATIC不是线性的。爬坡长度和形状在回调上配置SpladeRegularizerWeightSchedulerCallback(loss..., warmup_ratio..., scheduler_type...)而不是在SpladeLoss上要覆盖它请自己实例化回调并通过callbacks[...]传入。这个爬坡很重要从第 0 步就开始完全正则化会扼杀学习。使用CachedSpladeLoss获取 GradCache 变体。对比损失无标签SparseMultipleNegativesRankingLoss双编码器 MNRL 的稀疏对应物。批内对比。innerSparseMultipleNegativesRankingLoss(modelmodel)lossSpladeLoss(modelmodel,lossinner,query_regularizer_weight5e-5,document_regularizer_weight3e-5)对 SPLADE 架构始终包装在SpladeLoss中。在训练参数上设置batch_samplerBatchSamplers.NO_DUPLICATES。SparseTripletLoss在显式(anchor, positive, negative)上的经典三元组边距损失。带标签回归损失SparseCoSENTLoss用于(text1, text2, score)的成对排序损失。镜像双编码器CoSENTLoss。SparseCosineSimilarityLoss余弦相似度上的 MSE。更简单通常比 CoSENT 差。SparseAnglELoss复数空间中的基于角度损失。CoSENT 的替代方案。蒸馏损失SparseMSELoss嵌入 MSE。学生稀疏嵌入应与教师嵌入匹配。数据(text, teacher_embedding)。教师可以是稠密双编码器或另一个稀疏模型。SparseMarginMSELoss来自交叉编码器教师的边距 MSE。数据(query, positive, negative, score_diff)其中score_diff teacher_score(query, positive) - teacher_score(query, negative)。从交叉编码器标签训练 SPLADE 的典型配方ms-marco 蒸馏。对 SPLADE 包装在SpladeLoss(model, lossSparseMarginMSELoss(model), ...)中。SparseDistillKLDivLoss列表级 KL 散度蒸馏——学生在候选上的 softmax 分布应与教师匹配。独立正则化器FlopsLoss独立的 FLOPS 正则化器。通常通过SpladeLoss使用而不是直接使用。关于正则化器权重调优和稠密输出恢复参见troubleshooting.md“SPLADE embeddings are dense”。MLM 头要求base_model_selection.mdSPARSE 一节。激活维稀疏度目标和监控方法evaluators_sparse_encoder.mdSparsity tracking。陷阱在 SPLADE 模型上SparseMultipleNegativesRankingLoss不包SpladeLoss没有 FLOPS 正则化 - 稠密输出违背 SPLADE 的目的。始终包装。CachedSpladeLossgradient_checkpointingTrue崩溃。二选一。从第 0 步就以完整 FLOPS 正则化开始训练模型到处输出零并卡住。内置调度器会避免这种情况——除非你知道原因否则不要覆盖它。query_regularizer_weightdocument_regularizer_weight通常是错的。查询应比文档更稀疏每个查询的词更少。由于更高的正则化会产生更多零请给查询权重更大的值。query_regularizer_weight5e-5、document_regularizer_weight3e-5是一个好的起始比例。