自然语言推断
给定两个句子(前提和假设),自然语言推断 (NLI) 任务是决定前提是否蕴含假设,它们是否矛盾,或者它们是否是中性的。常用的 NLI 数据集是 SNLI 和 MultiNLI。
Conneau 等人 表明,NLI 数据在训练句子嵌入方法时非常有用。我们在我们的 Sentence-BERT-Paper 中也发现了这一点,并且经常使用 NLI 作为句子嵌入方法的第一个微调步骤。
要在 NLI 上进行训练,请参阅以下示例文件
-
此示例使用
SoftmaxLoss
,如原始 [Sentence Transformers 论文](https://arxiv.org/abs/1908.10084) 中所述。 -
在我们的原始 SBERT 论文中使用的
SoftmaxLoss
并不能产生最佳性能。更好的损失是MultipleNegativesRankingLoss
,我们在此提供成对或三元组。在此脚本中,我们提供格式为三元组:(锚点句子、蕴含句子、矛盾句子)。NLI 数据提供了这样的三元组。MultipleNegativesRankingLoss
产生更高的性能,并且比SoftmaxLoss
更直观。我们在 使用知识蒸馏使单语句子嵌入多语言化 论文中使用了这种损失来训练释义模型。 -
遵循 GISTEmbed 论文,我们可以修改
MultipleNegativesRankingLoss
中的 in-batch 负例选择,使用引导模型。如果引导模型认为负例对过于相似,则在训练期间忽略候选负例对。实际上,GISTEmbedLoss
倾向于比MultipleNegativesRankingLoss
产生更强的训练信号,但代价是为了在引导模型上运行推理而产生一些训练开销。
数据
我们将 SNLI 和 MultiNLI 组合成一个我们称为 AllNLI 的数据集。这两个数据集包含句子对和以下三个标签之一:蕴含、中性、矛盾
句子 A(前提) | 句子 B(假设) | 标签 |
---|---|---|
一场有多名男性参与的足球比赛。 | 一些男人在进行一项运动。 | 蕴含 |
一个较老的男人和一个较年轻的男人在微笑。 | 两个男人在微笑和大笑,看着在地板上玩耍的猫。 | 中性 |
一名男子检查某个东亚国家人物的制服。 | 这个人正在睡觉。 | 矛盾 |
我们以几种不同的子集格式化 AllNLI,这些子集与不同的损失函数兼容。例如,参见 AllNLI 的 triplet 子集。
SoftmaxLoss
Conneau 等人 描述了如何使用 siamese 网络 之上的 softmax 分类器来学习有意义的句子表示。我们可以通过使用 SoftmaxLoss
来实现此目的

我们通过 SentenceTransformer 模型传递两个句子,并获得句子嵌入 u 和 v。然后,我们连接 u、v 和 |u-v| 以形成一个长向量。然后,此向量被传递到 softmax 分类器,该分类器预测我们的三个类别(蕴含、中性、矛盾)。
此设置学习句子嵌入,这些嵌入稍后可用于各种任务。
MultipleNegativesRankingLoss
使用 NLI 数据的 SoftmaxLoss
产生(相对)良好的句子嵌入,这相当巧合。MultipleNegativesRankingLoss
更加直观,并且产生明显更好的句子表示。
MultipleNegativesRankingLoss 的训练数据由句子对 [(a1, b1), …, (an, bn)] 组成,其中我们假设 (ai, bi) 是相似的句子,而 (ai, bj) 是不相似的句子,对于 i != j。它最小化 (ai, bi) 之间的距离,同时最大化所有 i != j 的 (ai, bj) 之间的距离。例如,在下图中

(a1, b1) 之间的距离减小,而 (a1, b2…5) 之间的距离将增加。对于 a2, …, a5 也是如此。
使用带有 NLI 的 MultipleNegativesRankingLoss
非常容易:我们将具有蕴含标签的句子定义为正例对。例如,我们有像(“一场有多名男性参与的足球比赛。”,“一些男人在进行一项运动。”)这样的对,并希望这些对在向量空间中彼此接近。AllNLI 的 pair 子集 已以此格式准备就绪。
带有 Hard Negatives 的 MultipleNegativesRankingLoss
我们可以通过提供三元组而不是对来进一步改进 MultipleNegativesRankingLoss:[(a1, b1, c1), …, (an, bn, cn)]。ci 的样本是所谓的 hard-negatives:在词汇层面上,它们类似于 ai 和 bi,但在语义层面上,它们意味着不同的事物,并且不应在向量空间中接近 ai。
对于 NLI 数据,我们可以使用 contradiction 标签来创建带有 hard negative 的三元组。因此,我们的三元组如下所示:(”一场有多名男性参与的足球比赛。”,“一些男人在进行一项运动。”,“一群男人在玩棒球比赛。”)。我们希望句子“一场有多名男性参与的足球比赛。” 和 “一些男人在进行一项运动。” 在向量空间中彼此接近,而 “一场有多名男性参与的足球比赛。” 和 “一群男人在玩棒球比赛。” 之间应该有更大的距离。AllNLI 的 triplet 子集 已以此格式准备就绪。
GISTEmbedLoss
通过认识到 MultipleNegativesRankingLoss
可以进一步扩展,如 此示例 中所示,in-batch 负例采样有点缺陷。特别是,我们自动假设对 (a1, b2), …, (a1, bn) 是负例,但这不一定必须为真。
为了解决这个问题,GISTEmbedLoss
使用 Sentence Transformer 模型来指导 in-batch 负例样本选择。特别是,如果引导模型认为 (a1, bn) 的相似度大于 (a1, b1),则 (a1, bn) 对被认为是假负例,因此在训练过程中被忽略。本质上,这为模型带来了更高质量的训练数据。