Reason-ModernColBERT论文速览:Sentence- bert-基于孪生bert网络的句子嵌入
《Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks》论文讲解
一、引言
Sentence-BERT(SBERT)是由 Nils Reimers 和 Iryna Gurevych 提出的一种基于 BERT 的改进模型,旨在生成语义上有意义的句子嵌入。传统的 BERT 模型虽然在句子对回归任务(如语义文本相似度,STS)上表现卓越,但在需要大规模句子比较的任务(如语义相似度搜索、聚类等)上存在巨大计算开销。例如,在包含 10,000 句话的集合中找到最相似的句子对,使用 BERT 需要约 65 小时(约 5000 万次推理计算)。SBERT 通过引入孪生网络(siamese)和三元组网络(triplet)结构,将 BERT 改造成能够生成固定大小句子嵌入的模型,从而可以使用余弦相似度等高效比较方法。这使得计算 10,000 句话的相似度对的时间从 65 小时缩短到约 5 秒,同时保持了 BERT 的高准确性。
二、相关工作
(一)BERT 的局限性
BERT 是一种预训练的变换器网络,在多项自然语言处理(NLP)任务中取得突破性进展,包括问答、句子分类和句子对回归等。然而,BERT 的交叉编码器结构不适合生成独立的句子嵌入,这使得它难以应用于聚类和语义搜索等任务。研究人员尝试通过平均 BERT 输出层或使用 [CLS] 标记的输出来生成句子嵌入,但这些方法效果不佳,甚至不如平均 GloVe 嵌入。
(二)其他句子嵌入方法
在 SBERT 出现之前,已有多种句子嵌入方法:
-
Skip-Thought:训练编码器 - 解码器架构预测周围句子。
-
InferSent:使用带最大池化的双层 LSTM 网络,并在自然语言推理数据集上训练。
-
Universal Sentence Encoder:训练变换器网络,并结合 SNLI 数据进行有监督学习。
这些方法大多从随机初始化开始训练,而 SBERT 则利用预训练的 BERT 和 RoBERTa 网络进行微调,显著减少了训练时间(SBERT 微调仅需不到 20 分钟)。
三、SBERT 模型
SBERT 在 BERT / RoBERTa 的输出上添加池化操作以生成固定大小的句子嵌入。实验了三种池化策略:
-
使用 [CLS] 标记的输出(CLS 策略)。
-
计算所有输出向量的均值(MEAN 策略,默认配置)。
-
计算输出向量的最大值(MAX 策略)。
为了微调 BERT / RoBERTa,构建了孪生网络和三元组网络结构,使生成的句子嵌入语义上有意义且可用余弦相似度比较。网络结构根据训练数据而变化,并实验了以下结构和目标函数:
-
分类目标函数:将句子嵌入 u 和 v 与元素级差 |u−v| 拼接,并乘以可训练权重 Wt,优化交叉熵损失。
-
回归目标函数:计算两个句子嵌入 u 和 v 的余弦相似度,使用均方误差作为目标函数。
-
三元组目标函数:给定锚点句子 a、正样本句子 p 和负样本句子 n,调整网络使 a 和 p 的距离小于 a 和 n 的距离,使用欧几里得距离,设置边距 ϵ = 1。
(一)训练细节
SBERT 在 SNLI 和 Multi-Genre NLI 数据集上进行训练。SNLI 包含 570,000 个句子对,标注为矛盾、蕴含和中性;MultiNLI 包含 430,000 个句子对,涵盖多种口语和书面文本类型。微调 SBERT 使用 3 分类的 softmax 分类器目标函数,训练 1 个周期,批大小为 16,使用 Adam 优化器,学习率为 2e−5,并对 10% 的训练数据进行线性学习率预热,默认池化策略为 MEAN。
四、评估
(一)语义文本相似度(STS)任务
1. 无监督 STS
在 STS 任务 2012 - 2016、STS 基准测试和 SICK - 相关性数据集上评估 SBERT 的性能。这些数据集提供 0 到 5 的语义相关性标签。计算句子嵌入的余弦相似度与金标准标签之间的斯皮尔曼秩相关系数。结果表明,直接使用 BERT 输出的性能较差,平均 GloVe 嵌入的平均相关性为 61.32,而 SBERT 在无监督 STS 任务上的平均相关性达到 74.89,显著优于其他方法。
2. 有监督 STS
在 STS 基准测试(STSb)数据集上评估 SBERT 的性能。STSb 包含 8,628 个句子对,分为标题、新闻和论坛三类。使用训练集对 SBERT 进行微调,使用回归目标函数。在预测时,计算句子嵌入的余弦相似度。实验了两种设置:
-
仅在 STSb 上训练。
-
先在 NLI 数据上训练,再在 STSb 上训练。
结果显示,后一种策略使性能提升了 1 - 2 个百分点。SBERT 在 STSb 测试集上的性能接近 BERT,但计算效率更高。
3. 论点方面相似性(AFS)
在 AFS 语料库上评估 SBERT,该语料库包含 6,000 个来自社交媒体对话的句子对论点,涉及三个有争议的话题:枪支管制、同性婚姻和死刑。数据标注等级从 0(“不同话题”)到 5(“完全等价”)。AFS 语料库的相似性概念与 SemEval 的 STS 数据集不同,STS 数据通常是描述性的,而 AFS 数据是对话中的争论性摘录。在相同主题下,SBERT 的性能接近 BERT,但在跨主题评估中性能下降约 7 个百分点。这表明 SBERT 在处理不同主题的论点相似性时面临挑战,需要更多训练主题才能与 BERT 媲美。
4. 维基百科部分区分
使用 Dor 等人创建的数据集评估 SBERT。该数据集利用维基百科文章的不同部分创建弱标记的句子三元组:锚点和正样本来自同一部分,负样本来自同一文章的不同部分。使用三元组目标函数对 SBERT 进行训练,并在约 180 万个训练三元组上训练一个周期,在 222,957 个测试三元组上进行评估。结果显示,SBERT 显著优于 Dor 等人的 BiLSTM 方法。
(二)SentEval 评估
SentEval 是一个流行的工具包,用于评估句子嵌入的质量。使用句子嵌入作为逻辑回归分类器的特征,在 10 折交叉验证设置下训练逻辑回归分类器,并计算测试折的预测准确性。SBERT 在 7 个 SentEval 传输任务中的 5 个任务中表现最佳,平均性能比 InferSent 和 Universal Sentence Encoder 提高约 2 个百分点。
1. SentEval 任务
包括电影评论情绪预测(MR)、产品评论情绪预测(CR)、句子主观性预测(SUBJ)、新闻电讯中的短语级观点极性分类(MPQA)、二元标签的斯坦福情绪树库(SST)、细粒度问题类型分类(TREC)和微软研究同义句语料库(MRPC)等任务。
2. 结果分析
SBERT 在情绪任务(MR、CR 和 SST)上的改进尤为显著,表明其句子嵌入能够较好地捕获情绪信息。在 TREC 数据集上,Universal Sentence Encoder 表现更优,可能是因为其预训练数据包含问答数据,有利于 TREC 的问题类型分类任务。尽管 SentEval 不是 SBERT 的主要目标,但其在该任务上的表现仍优于其他最先进的句子嵌入方法。
五、消融研究
为了更好地理解 SBERT 的不同方面,进行了消融研究。评估了不同的池化策略(MEAN、MAX 和 CLS)和分类目标函数的不同拼接方法。对于每种可能的配置,使用 10 个不同的随机种子训练 SBERT 并平均性能。
(一)池化策略
在 NLI 数据上使用分类目标函数训练时,池化策略的影响较小。但在 STS 基准测试数据上使用回归目标函数训练时,池化策略的影响较大。MAX 策略的表现显著逊色于 MEAN 或 CLS - token 策略。
(二)拼接方法
对于分类目标函数,元素级差 |u−v| 是最重要的拼接组件。尽管 InferSent 和 Universal Sentence Encoder 使用 (u, v, |u−v|, u ∗v) 作为 softmax 分类器的输入,但在 SBERT 的架构中,添加元素级乘积 u ∗v 会降低性能。
六、计算效率
句子嵌入可能需要为数百万句子计算,因此需要高计算速度。比较了 SBERT 与平均 GloVe 嵌入、InferSent 和 Universal Sentence Encoder 的计算速度。
(一)测试设置
使用 STS 基准测试中的句子进行比较。测试环境为 Intel i7 - 5820K CPU @ 3.30GHz、Nvidia Tesla V100 GPU、CUDA 9.2 和 cuDNN。SBERT 基于 PyTorch,并实现了智能批量策略:将长度相似的句子分组在一起,仅填充到小批量中的最长元素,显著减少了填充标记带来的计算开销。
(二)结果分析
在 CPU 上,InferSent 比 SBERT 快约 65%,因为其网络架构更简单(单层 Bi - LSTM,而 BERT 使用 12 层堆叠变换器)。但在 GPU 上,SBERT 的优势明显:使用智能批量的 SBERT 比 InferSent 快约 9%,比 Universal Sentence Encoder 快约 55%。平均 GloVe 嵌入显然是计算句子嵌入最快的方法,但其性能在许多任务上不如基于深度学习的方法。
七、结论
论文指出,原生 BERT 将句子映射到向量空间时,使用余弦相似度等常见相似度度量方法的效果不佳,在七个 STS 任务上的表现甚至低于平均 GloVe 嵌入。为此,提出了 Sentence-BERT(SBERT),通过在孪生 / 三元组网络架构中微调 BERT,显著提高了句子嵌入的质量。SBERT 在多个常见基准测试中取得了显著改进,超越了其他先进的句子嵌入方法。在实验中,用 RoBERTa 替换 BERT 并未带来显著改进。SBERT 具有较高的计算效率,在 GPU 上比 InferSent 快约 9%,比 Universal Sentence Encoder 快约 55%。SBERT 使得原本使用 BERT 在计算上不可行的任务(如对 10,000 句话进行层次聚类,使用 BERT 需约 65 小时)变得可行,SBERT 仅需约 5 秒即可完成。