自然语言推理
给定两个句子(前提和假设),自然语言推理(NLI)的任务是判断前提是否蕴涵假设,它们是否矛盾,或者它们是否中立。常用的 NLI 数据集有 SNLI 和 MultiNLI。
Conneau 等人表明,NLI 数据在训练句子嵌入方法时非常有用。我们也在 Sentence-BERT 论文中发现了这一点,并且经常将 NLI 作为句子嵌入方法的第一步微调。
要训练 NLI,请参阅以下示例文件
-
此示例使用原始 [Sentence Transformers 论文](https://arxiv.org/abs/1908.10084) 中描述的
SoftmaxLoss
。 -
我们原始 SBERT 论文中使用的
SoftmaxLoss
并未产生最佳性能。一个更好的损失是MultipleNegativesRankingLoss
,我们提供成对或三元组。在此脚本中,我们提供了一个三元组格式:(锚点,蕴涵句,矛盾句)。NLI 数据提供了这样的三元组。MultipleNegativesRankingLoss
产生更高的性能,并且比SoftmaxLoss
更直观。我们已使用此损失来训练我们的 使用知识蒸馏使单语句子嵌入多语言化 论文中的复述模型。 -
遵循 GISTEmbed 论文,我们可以使用引导模型修改
MultipleNegativesRankingLoss
中的批内负样本选择。具体来说,如果引导模型认为 (a1, bn) 对的相似度大于 (a1, b1),则 (a1, bn) 对被视为假负样本,因此在训练过程中被忽略。本质上,这会为模型生成更高质量的训练数据,代价是运行引导模型的推理会带来一些训练开销。
您也可以训练并使用 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 也是如此。
在 NLI 中使用 MultipleNegativesRankingLoss
相当容易:我们将带有“蕴涵”标签的句子定义为正样本对。例如,我们有像(“多个男性正在踢的足球比赛。”,“一些男性正在进行一项运动。”)这样的句子对,并希望这些句子对在向量空间中距离接近。AllNLI 的“pair”子集 已按此格式准备。
带有难负样本的 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) 对被视为假负样本,并因此在训练过程中被忽略。本质上,这会为模型带来更高质量的训练数据。