自然语言推断
给定两个句子(前提和假设),自然语言推断 (NLI) 的任务是决定前提是否蕴含假设,它们是否矛盾,或者它们是否是中性的。常用的 NLI 数据集是 SNLI 和 MultiNLI。
Conneau 等人 表明,NLI 数据在训练句子嵌入方法时非常有用。我们在我们的 Sentence-BERT-Paper 中也发现了这一点,并且经常使用 NLI 作为句子嵌入方法的第一个微调步骤。
要在 NLI 上进行训练,请参阅以下示例文件
-
此示例使用
SoftmaxLoss
,如原始 [Sentence Transformers 论文](https://arxiv.org/abs/1908.10084) 中所述。 -
我们原始 SBERT 论文中使用的
SoftmaxLoss
并不能产生最佳性能。更好的损失函数是MultipleNegativesRankingLoss
,我们在这里提供成对或三元组。在此脚本中,我们提供格式为 (anchor, entailment_sentence, contradiction_sentence) 的三元组。NLI 数据提供了这样的三元组。MultipleNegativesRankingLoss
产生的性能更高,并且比SoftmaxLoss
更直观。我们在 Making Monolingual Sentence Embeddings Multilingual using Knowledge Distillation 论文中使用了此损失函数来训练释义模型。 -
根据 GISTEmbed 论文,我们可以使用引导模型修改
MultipleNegativesRankingLoss
的批内负样本选择。如果引导模型认为候选负样本对过于相似,则在训练期间会忽略这些负样本对。实际上,与MultipleNegativesRankingLoss
相比,GISTEmbedLoss
往往会产生更强的训练信号,但代价是在引导模型上运行推理会产生一些训练开销。
您还可以训练和使用 CrossEncoder
模型来执行此任务。有关更多详细信息,请参阅 Cross Encoder > 训练示例 > 自然语言推断。
数据
我们将 SNLI 和 MultiNLI 合并到一个我们称之为 AllNLI 的数据集中。这两个数据集包含句子对和以下三个标签之一:蕴含、中性、矛盾
句子 A(前提) | 句子 B(假设) | 标签 |
---|---|---|
一场有多个男性参与的足球比赛。 | 一些男人在进行一项运动。 | 蕴含 |
一个年纪较大和一个年纪较小的男人在微笑。 | 两个男人在微笑,并嘲笑在地板上玩耍的猫。 | 中性 |
一名男子在检查某个东亚国家人物的制服。 | 该男子正在睡觉。 | 矛盾 |
我们以几种不同的子集格式化 AllNLI,这些子集与不同的损失函数兼容。例如,请参阅 AllNLI 的三元组子集。
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 也执行相同的操作。
将 MultipleNegativesRankingLoss
与 NLI 一起使用非常容易:我们将具有蕴含标签的句子定义为正对。例如,我们有诸如(“一场有多个男性参与的足球比赛。”,“一些男人在进行一项运动。”)之类的对,并且希望这些对在向量空间中彼此接近。AllNLI 的对子集 已以此格式准备。
带有困难负样本的 MultipleNegativesRankingLoss
我们可以通过提供三元组而不是对来进一步改进 MultipleNegativesRankingLoss:[(a1, b1, c1), …, (an, bn, cn)]。ci 的样本是所谓的困难负样本:在词汇层面上,它们类似于 ai 和 bi,但在语义层面上,它们意味着不同的事物,并且不应在向量空间中接近 ai。
对于 NLI 数据,我们可以使用矛盾标签来创建带有困难负样本的三元组。因此,我们的三元组如下所示:(“一场有多个男性参与的足球比赛。”,“一些男人在进行一项运动。”,“一群男人在进行一场棒球比赛。”)。我们希望句子“一场有多个男性参与的足球比赛。”和“一些男人在进行一项运动。”在向量空间中彼此接近,而“一场有多个男性参与的足球比赛。”和“一群男人在进行一场棒球比赛。”之间应该有更大的距离。AllNLI 的三元组子集 已以此格式准备。
GISTEmbedLoss
通过认识到 此示例 中所示的批内负采样存在一些缺陷,可以进一步扩展 MultipleNegativesRankingLoss
。特别是,我们自动假设 (a1, b2), …, (a1, bn) 是负样本,但这不一定是真的。
为了解决这个问题,GISTEmbedLoss
使用 Sentence Transformer 模型来指导批内负样本选择。特别是,如果引导模型认为 (a1, bn) 的相似度大于 (a1, b1),则 (a1, bn) 对将被视为假负样本,因此在训练过程中被忽略。从本质上讲,这为模型带来了更高质量的训练数据。