Sentence Transformer中的损失函数(Loss Function)

损失函数表

损失函数在微调模型的性能中起着关键作用。可惜的是,并没有一种“通用”的损失函数。理想情况下,下面的表格可以帮助你根据数据格式选择合适的损失函数。

注意:
你通常可以将一种训练数据格式转换为另一种,从而使更多的损失函数适用于你的场景。例如,带有类别标签的 (sentence_A, sentence_B) 对可以通过采样相同或不同类别的句子转换为 (anchor, positive, negative) 三元组。

输入格式 标签类型 合适的损失函数
单个句子 类别 BatchAllTripletLossBatchHardSoftMarginTripletLossBatchHardTripletLossBatchSemiHardTripletLoss
单个句子 ContrastiveTensionLossDenoisingAutoEncoderLoss
(anchor, anchor) ContrastiveTensionLossInBatchNegatives
(破损句子, 原始句子) DenoisingAutoEncoderLoss
(句子A, 句子B) 类别 SoftmaxLoss
(anchor, positive) MultipleNegativesRankingLossCachedMultipleNegativesRankingLossMultipleNegativesSymmetricRankingLossCachedMultipleNegativesSymmetricRankingLossMegaBatchMarginLossGISTEmbedLossCachedGISTEmbedLoss
(anchor, positive/negative) 正为1,负为0 ContrastiveLossOnlineContrastiveLoss
(句子A, 句子B) 0到1之间的浮点相似度得分 CoSENTLossAnglELossCosineSimilarityLoss
(anchor, positive, negative) 三元组 MultipleNegativesRankingLossCachedMultipleNegativesRankingLossTripletLossCachedGISTEmbedLossGISTEmbedLoss
(anchor, positive, negative_1, ..., negative_n) MultipleNegativesRankingLossCachedMultipleNegativesRankingLossCachedGISTEmbedLoss

损失函数修饰器

这些损失函数可以视为修饰器:它们基于标准损失函数进行工作,但通过不同方式应用这些损失函数,以向嵌入模型注入有益特性。

例如,使用 MatryoshkaLoss 训练的模型所生成的嵌入在被截断尺寸时仍保持良好性能;使用 AdaptiveLayerLoss 的模型在去除模型层以加速推理时依然表现良好。

文本类型 标签类型 合适的损失函数
任意 任意 MatryoshkaLossAdaptiveLayerLossMatryoshka2dLoss

知识蒸馏损失函数

这些损失函数专为模型蒸馏而设计。例如,当你希望微调一个小模型使其行为更像一个更大更强的模型时,或让模型变为多语言模型时使用。

输入文本 标签类型 合适的损失函数
单句子 模型句子嵌入 MSELoss
句子1, 句子2, ..., 句子N 模型句子嵌入 MSELoss
(query, passage_one, passage_two) 三元组 gold_sim(query, one) - gold_sim(query, two) MarginMSELoss
(query, positive, negative_1, ..., negative_n) [gold_sim(query, pos) - gold_sim(query, neg_i)] MarginMSELoss
(query, positive, negative) [gold_sim(query, pos), gold_sim(query, neg)] DistillKLDivLoss
(query, positive, negative_1, ..., negative_n) [gold_sim(query, pos), gold_sim(query, neg_i)...] DistillKLDivLoss

常用损失函数

在实践中,并非所有损失函数使用频率相同。最常见的情况包括:

  • (anchor, positive) 对,没有标签
    MultipleNegativesRankingLoss(又名 InfoNCE 或 in-batch negatives loss)常用于训练表现最佳的嵌入模型。该类数据获取成本较低,模型性能通常也很出色。为了提升性能,常用 CachedMultipleNegativesRankingLoss 增加批量大小。

  • (句子A, 句子B) 对,带有浮点相似度评分
    传统上使用 CosineSimilarityLoss,但现在常用 CoSENTLossAnglELoss 作为效果更好的替代。

posted @ 2025-07-01 23:05  55open  阅读(106)  评论(0)    收藏  举报