返回介绍

数学基础

统计学习

深度学习

工具

Scala

三十二、Sentence-BERT [2019]

发布于 2023-07-17 23:38:25 字数 38102 浏览 0 评论 0 收藏 0

  1. 在论文 《Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks》 中,作者提出了 Sentence-BERT: SBERT ,这是一种使用 siamese networktriplet network 来针对 BERT 网络的修改,能够得出有语义的 sentence embedding 。这使得 BERT 能够用于某些新的任务,而这些任务到现在为止还不适用于 BERT 。这些任务包括大规模的语义相似性比较、聚类、以及通过语义搜索 semantic search 进行信息检索 information retrieval

    BERT 在各种句子分类、以及 sentence-pair regression 任务上创造了新的 SOTA 性能。BERT 使用一个 cross-encoder :两个句子被馈入 transformer 网络,然后 transformer 网络预测出 target value 。然而,由于可能的组合太多,这种 setup 不适合于各种 pair regression 任务。例如,在n=10000$ n=10000 $ 个句子的集合中,找到相似度最高的一对句子,需要用 BERT 执行n(n1)/2=49995000$ n(n-1)/2=49995000 $ 次推理计算。 在一个现代的 V100 GPU 上,这需要大约 65 个小时。类似地,在 Quora 的超过 40M 个现有问题中,找到与一个新问题最相似的问题,可以用 BERT 建模为 pair-wise comparison ,然而,对每个新问题需要 50 多个小时才能找到最相似的问题(在已有的所有问题中)。

    解决聚类和语义搜索的一个常见方法是,将每个句子映射到一个向量空间,使得在这个向量空间中,语义相似的句子就会很接近。研究人员已经开始将单个句子输入 BERT ,并得出固定尺寸的 sentence embedding 。最常用的方法是对 BERT 输出层(即,BERT embedding )进行均值池化、或者使用第一个 token(即,[CLS] token)的输出。正如论文将展示的,这种常见的做法产生了相当糟糕的 sentence embedding ,往往比 GloVe embedding 的均值池化更糟糕。

    为了缓解这个问题,论文 《Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks》 开发了 SBERTsiamese network 使得可以导出针对输入句子的固定尺寸的 representation 向量。然后使用像余弦相似性、或曼哈顿/欧几里得距离这样的相似性度量,可以找到语义上相似的句子。这些相似度度量可以在现代硬件上极其有效地进行,使 SBERT 可以用于语义相似度搜索、以及聚类。在 10000 个句子的集合中寻找最相似的 sentence pair 的复杂性,从使用 BERT65 小时减少到使用 SBERT 的几秒钟(计算 10000sentence embedding 耗费 SBERT5 秒,计算余弦相似度约 0.01 秒)。通过使用优化的 index 结构,寻找最相似的 Quora 问题可以从 50 小时减少到几毫秒。

    论文在 NLI 数据上对 SBERT 进行了微调,它所创建的 sentence embedding 明显优于其他 SOTAsentence embedding 方法,如 InferSentUniversal Sentence Encoder

    • 在七个 Semantic Textual Similarity: STS 任务上,SBERT 相对 InferSentUniversal Sentence Encoder 分别实现了 11.7 分和 5.5 分的改进。

    • sentence embedding 的评估工具包 SentEval 上,SBERT 相对 InferSentUniversal Sentence Encoder 分别实现了2.1 分和 2.6 分的改进。

    SBERT 可以适配特定的任务。它在一个具有挑战性的 argument similarity 数据集、以及一个区分维基百科文章不同部分的句子的 triplet dataset 上创造了新的 SOTA 性能。

  2. 相关工作:

    • BERTBERT 是一个预训练的 transformer 网络,它为各种 NLP 任务提供了新的 SOTA 的结果,包括问答、句子分类、sentence-pair regression 。用于sentence-pair regressionBERT 的输入由两个句子组成,由一个特殊的 [SEP] token 分开。BERTSemantic Textual Semilarity: STS benchmark 上创造了新的 SOTA 性能。RoBERTa 表明,BERT 的性能可以通过对预训练过程的小的调整来进一步提高。我们还测试了 XLNet ,但它导致的结果总体上比 BERT 更差。

      BERT 网络结构的一个很大的缺点是没有计算独立的 sentence embedding ,这使得很难从 BERT 中得出 sentence embedding 。为了绕过这一限制,研究人员将单个句子馈入 BERT ,然后通过将所有输出取平均(类似于对句子中所有单词的 word embedding 取平均)、或使用特殊的 [CLS] token 的输出,从而得出一个固定尺寸的向量。这两个方法也由流行的 bert-as-a-service-repository 所提供。据我们所知,到目前为止,还没有评估这些方法是否会导致有用的 sentence embedding

    • sentence embeddingsentence embedding是一个被充分研究的领域,人们已经提出了数十种方法。

      • Skip-Thought 训练了一个 encoder-decoder 架构来预测 surrounding sentences

      • InferSent 使用 Stanford Natural Language Inference: SNLI 数据集、和 Multi-Genre NLI 数据集的标记数据来训练一个 siamese BiLSTM network ,并对输出进行最大池化。 实验结果表明,InferSent 一直优于 SkipThought 等无监督的方法。

      • Universal Sentence Encoder 训练了一个 transformer 网络(使用类似于 Skip-Thought 的无监督学习),并通过对 SNLI 的训练增强了无监督学习。

      • FastSent 表明,训练 sentence embedding 的任务对其质量有很大影响。

      • 之前的工作(InferSent《Universal Sentence Encoder》)发现:SNLI 数据集适合训练 sentence embedding

      • 《Learning Semantic Textual Similarity from Conversations》提出了一种使用 siamese DAN 网络和 siamese transformer 网络对 Reddit 的对话进行训练的方法,在 STS benchmark 数据集上取得了良好的效果。

      • 《Real-time Inference in Multi-sentence Tasks with Deep Pretrained Transformers》 解决了来自 BERTcross-encoder 的运行时间开销,并提出了一种方法( poly-encoders )通过 attention 来计算m$ m $ 个上下文向量和 precomputed 的候选 embedding 之间的分数。这个想法对于在更大的集合中寻找最高得分的句子是有效的。然而, poly-encoders 有一个缺点,即 score function 不是对称的,而且计算开销对于像聚类这样的 case 来说太大(O(n2)$ O(n^2) $ 的 score computation )。

      以前的 neural sentence embedding 方法是从随机初始化开始训练的。这里我们使用预训练好的 BERT 网络和 RoBERTa 网络,只对其进行微调以产生有用的 sentence embedding 。这大大减少了所需的训练时间。SBERT 可以在不到 20 分钟内完成微调,同时产生比其它 sentence embedding 方法更好的结果。

32.1 模型

  1. SBERTBERT/RoBERTa 的输出上增加了一个池化操作,从而获得一个固定尺寸的 sentence embedding 。我们试验了三种池化策略:使用 CLS-token 的输出、均值池化策略MEAN-strategy (计算所有输出向量的平均值)、最大池化策略MAX-strategy (沿着position 维度计算输出向量的最大值)。默认配置是均值池化策略。

  2. 为了微调 BERT/RoBERTa ,我们创建了 siamese networktriplet network 来更新权重,使得产生的 sentence embedding 具有语义,并可以用余弦相似度进行比较。网络结构取决于可用的训练数据。我们试验了以下网络结构和目标函数:

    • Classification Objective Function:我们将 sentence embeddingu$ \mathbf{\vec u} $ 、v$ \mathbf{\vec v} $ 、以及它们之间的逐元素差进行拼接,然后乘以权重矩阵WtRK×(3d)$ \mathbf W_t\in \mathbb R^{K\times (3d)} $ :

      (2)o=softmax(Wt[u,v,|uv|])

      其中:d$ d $ 为 sentence embedding 维度,K$ K $ 为 label 的数量,[]$ [\cdot] $ 为向量拼接。

      我们优化交叉熵损失。整体结构如下图所示。

    • Regression Objective Function:我们计算 sentence embeddingu$ \mathbf{\vec u} $ 、v$ \mathbf{\vec v} $ 之间的余弦相似度,如下图所示。我们使用mean-squared-error:MSE loss 作为目标函数。

    • Triplet Objective Function:给定一个锚点句子anchor sentencea$ a $ ,一个 positive sentencep$ p $ 和一个 negative sentencen$ n $ , triplet loss 使得a$ a $ 和p$ p $ 之间的距离小于a$ a $ 和n$ n $ 之间的距离。在数学上讲,我们最小化以下损失函数:

      (3)max(saspsasn+ϵ,0)

      其中:s$ \mathbf{\vec s} $ 为 sentence embedding$ \|\cdot\| $ 为距离函数,ϵ$ \epsilon $ 为 margin (使得sp$ \mathbf{\vec s}_p $ 比sn$ \mathbf{\vec s}_n $ 更接近sa$ \mathbf{\vec s}_a $ 至少ϵ$ \epsilon $ 的距离)。

      在我们的实验中,我们使用欧氏距离并设置ϵ=1$ \epsilon = 1 $ 。

  3. 训练细节:我们在 SNLIMulti-Genre NLI 数据集的组合上训练 SBERT

    • SNLI 包含 570ksentence pair ,并被标注了矛盾 contradiction 、蕴含 eintailment 、以及中性 neutral 等三种标签。

    • MultiNLI 包含了 430ksentence pair ,涵盖了一系列的口语的和书面语的体裁。

    我们用 3-way softmax classifier objective functionSBERT 进行了微调,微调一个 epoch 。我们使用 batch size = 16Adam 优化器(学习率为 2e-5 ),并使用线性学习率调度,其中在 10% 的训练数据上进行学习率预热。我们默认的池化策略是均值池化。

    注意:根据论文在相关工作中的介绍,论文使用 pretrained BERT/RoBERTa 来初始化模型。因此这里的微调更像是“预微调”,即预训练和微调中间的步骤。

32.2 实验

32.2.1 Semantic Textual Similarity

  1. 我们评估了 SBERT在常见的语义文本相似性 Semantic Textual Similarity: STS 任务中的表现。SOTA 的方法通常学习一个(复杂的)回归函数,将 pair-wise sentence embedding 映射到相似性分数。然而,这些回归函数是 pair-wise 工作的,可扩展性很差。相反,我们总是使用余弦相似度来比较两个 sentence embedding 之间的相似度。

    我们还用负曼哈顿距离、以及负欧氏距离作为相似度指标来进行实验,但所有方法的结果都大致相同。

  2. 无监督 STS:我们在不使用任何 STS-specific 训练数据的情况下评估了 SBERTSTS 中的表现。我们使用 2012-2016 年的 STS 任务、STS benchmarkSICK-Relatedness 数据集。这些数据集对 sentence pair 的语义相关度提供了 0 ~ 5 的标签。我们使用sentence embedding 余弦相似度和 ground-truth 之间的 Spearman’s rank correlation (而不是 Pearson correlation)。

    Spearman’s rank correlation:首先将原始数据排序,然后为每个数据赋予一个 rank 。对于两组数据,分别计算它们各自 rank 序列的皮尔逊相关系数:

    (4)ρ=i(xix¯)(yiy¯)i(xix¯)2(yiy¯)2

    Pearson correlation 就是对原始数据直接计算相关系数。

    实验结果如下表所示。可以看到:

    • 直接使用 BERT 的输出会导致相当差的性能。对 BERT embedding 的均值池化只达到了 54.81 的平均相关度,而使用 CLS-token 输出只达到了 29.19 的平均相关度。两者都比计算 GloVe embedding 的均值要更差。

    • 使用所描述的 siamese network 结构和微调机制大大改善了相关性,大大超过了 InferSentUniversal Sentence Encoder 的表现。

      SBERT 表现比 Universal Sentence Encoder 差的唯一数据集是 SICK-RUniversal Sentence Encoder 是在各种数据集上训练的,包括新闻、问答网页和讨论区,这似乎更适合 SICK-R 的数据。相比之下,SBERT 只在维基百科(通过 BERT )和 NLI 数据上进行了预训练。

    • 虽然 RoBERTa 能够提高几个监督任务的性能,但我们只观察到 SBERTSRoBERTa 在生成 sentence embedding 方面的微小差异。

  3. 监督 STSSTS benchmark: STSb 是一个流行的数据集,用于评估有监督的 STS系统。数据集包括来自 caption 、新闻、以及论坛三个 category8628sentence pair 。它被分为训练集(5749 个样本 )、验证集(1500 个样本)、测试集(1379 个样本)。BERT 在这个数据集上创造了新的 SOTA 的性能,它将两个句子都传给了网络,并使用简单的回归方法进行输出。

    我们使用训练集,利用 regression objective functionSBERT 进行微调。在预测时,我们计算 sentence embedding 之间的余弦相似度。所有系统都是用 10 个随机种子进行训练从而考虑方差。

    读者猜测:回归目标是在余弦相似度之上进行的,因此两个 sentence embedding 越相似则 output 越大。

    实验结果如下表所示。我们用两种设置进行了实验:只在 STSb 上训练、先在NLI 上训练然后在 STSb 上训练(即,利用 NLI 数据进行预微调)。我们观察到:

    • SBERT 上,第二种策略导致了 1-2 分的轻微改善。

    • BERT 上,第二种策略导致了 3-4 分的轻微改善。

    • 我们没有观察到 BERTRoBERTa 之间的显著差异。

    注意:这里的 BERT-NIL-STSb-base 用的是 pair-wiseBERT,而不是 Avg. BERT embeddings

  4. Argument Facet Similarity: AFS:我们在 AFS 语料库上评估 SBERTAFS 语料库标注了来自社交媒体对话的 6ksentential argument pair ,涉及三个有争议的话题:枪支管制、同性恋婚姻、死刑。这些数据被标注为从0 ("不同的话题")到5 ("完全等同")的等级。

    AFS 语料库中的相似性概念与 STS 数据集中的相似性概念相当不同。STS 数据通常是描述性的,而 AFS 数据是对话中的争论性摘录 argumentative excerpt 。要被认为是相似的,论点 argument 不仅要提出相似的主张,而且要提供相似的推理 reasoning 。 此外,AFS 中的句子之间的词汇差距 lexical gap 要大得多。因此,简单的无监督方法以及 SOTASTS 系统在这个数据集上表现很差。

    我们在两种场景中在这个数据集上评估 SBERT

    • 我们使用 10-fold cross-validation 来评估 SBERT 。这种评估设置的一个缺点是,不清楚方法对不同主题的泛化性如何。

    • 我们在 cross-topic setup 上评估 SBERT 。我们在两个主题上训练,在剩余的主题上评估。我们对所有三个主题重复这一过程,并对结果进行平均。

      第二种方法可以评估在 unseen 主题上的表现。

    SBERT 使用 Regression Objective Function 进行微调。相似性得分是使用基于 sentence embedding 的余弦相似性来计算的。我们还提供了皮尔逊相关系数r$ r $ ,然而我们表明皮尔逊相关系数有一些严重的缺点,应该避免用于比较 STS 系统。

    实验结果如下表所示,可以看到:

    • tf-idfaverage GloVe embedding 、或 InferSent 这样的无监督方法在这个数据集上表现得相当糟糕,得分很低。

    • 10-fold cross-validation setup 中训练 SBERT ,其性能几乎与 BERT 相当。

    • 然而,在跨主题评估中,我们观察到 SBERT 的性能在 Spearman correlation 指标下降了约 7 个点。

      为了被认为是相似的,论点应该涉及相同的主张并提供相同的推理。BERT 能够使用注意力机制来直接比较两个句子(例如 word-by-word 的比较),而 SBERT 必须把来自 unseen 的主题的单个句子映射到一个向量空间,从而使具有类似主张 claim 和理由 reason 的论点接近。这是一个更具挑战性的任务,这似乎需要超过两个主题的训练,才能与 BERT 相媲美。

  5. Wikipedia Sections Distinction《Learning Thematic Similarity Metric from Article Sections Using Triplet Networks》 使用维基百科为 sentence embedding 方法创建了一个主题细化的训练集、验证集、以及测试集。Wikipedia 的文章被分成不同的章节,每个章节聚焦于某些方面。该论文假设:同一章节的句子比不同章节的句子在主题上更接近。他们利用这一点创建了一个大型的弱标记的 sentence triplet 数据集:anchor 样本和正样本来自同一章节,而负样本来自同一文章的不同章节。

    我们使用该数据集。我们使用 Triplet Objective,在大约 1.8Mtraining triplet 上训练 SBERT 一个 epoch,然后在 222,957test triplet 上评估。我们使用准确率作为评估指标:正样本是否比负样本更接近 anchor

    结果如下表所示。 《Learning Thematic Similarity Metric from Article Sections Using Triplet Networks》 提出的 Bi-LSTM 方法微调了具有 triplet lossBi-LSTM 架构,从而得到 sentence embedding (下表中 Dor et al. 这一行的结果)。可以看到:SBERT 显著优于 Bi-LSTM 方法。

32.2.2 SentEval

  1. SentEval 是一个流行的工具包,用于评估 sentence embedding 的质量。sentence embedding 被用作逻辑回归分类器的特征。逻辑回归分类器在 10-fold cross-validation setup 中对各种任务进行训练,并计算 test-fold 的预测准确率。

    SBERT sentence embedding 的目的不是为了用于其他任务的迁移学习。我们认为针对新任务微调 BERT 是更合适的迁移学习方法,因为它更新了 BERT 网络的所有层。然而,SentEval 仍然可以对我们的sentence embedding 在各种任务中的质量进行评估。我们在以下七个 SentEval 迁移任务上将 SBERT sentence embedding 与其他 sentence embedding 方法进行比较:

    • Movie Review: MR:电影评论片段的情感,以五等评分为标准。

    • Customer Review: CR:从客户评论中挖掘出来的句子的情感。

    • SUBJ:从电影评论和剧情摘要中挖掘的句子的主观感受 subjectivity

    • MPQA:来自新闻数据的短语级别的意见的极性 polarity

    • SST:二元短语级别的情感分类 sentiment classification

    • TREC:来自 TREC 的细粒度的 question classification

    • Microsoft Research Paraphrase Corpus: MRPC:来自 parallel 的新闻源的微软研究院转述语料库。

    结果如下表所示。可以看到:

    • InferSent 以及 Universal Sentence Encoder 相比,其平均性能提高了约 2 个百分点。尽管迁移学习不是 SBERT 的目的,但它在这项任务上的表现超过了其他 SOTAsentence embedding 方法。 看来,SBERTsentence embedding 很好地捕捉了情感信息:与 InferSentUniversal Sentence Encoder 相比,我们观察到 SentEval 的所有情感任务(MRCRSST )都有很大的改进。唯一一个 SBERT 明显比 Universal Sentence Encoder 差的数据集是 TREC 数据集。Universal Sentence Encoder 在问答数据上进行了预训练,这似乎对 TREC 数据集的问题类型分类任务有利。

    • average BERT embeddings、或使用 BERT CLS-token output ,在各种 STS 任务中取得了不好的结果(Table 1 ),比average GloVe embeddings 更差。然而,对于 SentEvalaverage BERT embeddings 、以及使用 BERT CLS-token output 取得了不错的结果(Table 5 ),超过了average GloVe embeddings 。造成这种情况的原因是不同的设置。

      • 对于 STS 任务,我们使用余弦相似度来估计 sentence embedding 之间的相似性。余弦相似性对所有维度都是平等的。

      • 相比之下,SentEval将逻辑回归分类器用于 sentence embedding 。这允许某些维度对分类结果有更高或更低的影响。

      我们的结论是:average BERT embeddingsBERT CLS-token output 返回的 sentence embedding 不可能用于余弦相似度或曼哈顿/欧氏距离。对于迁移学习,它们的结果比 InferSentUniversal Sentence Encoder 略差。然而,在 NLI 数据集上使用所描述的具有 siamese network 结构的微调,产生的 sentence embedding 达到了 SentEval工具包的 SOTA

32.2.3 消融研究

  1. 这里我们对 SBERT 的不同方面进行了消融研究,以便更好地了解其相对重要性。我们评估了不同的池化策略(MEAN/MAX/CLS)。对于 classification objective function ,我们评估了不同的 concatenation 方法。

    对于每个可能的配置,我们用 10 个不同的随机种子训练 SBERT ,并对其性能进行平均。objective function(分类或回归)取决于数据集:

    • 对于classification objective function ,我们在 SNLIMulti-NLI 数据集上训练 SBERT-base ,并在 NLI 数据集上进行评估。

    • 对于 regression objective function ,我们在 STS benchmark 数据集的训练集上进行训练,并在 STS benchmark 验证集上进行评估。

    结果如下表所示。可以看到:

    • classification objective function:根据 NLI 这一列,可以看到:池化策略的影响相当小,而 concatenation 模式的影响要大得多。

      对于 concatenation 模式,InferSentUniversal Sentence Encoder 都使用[u,v,|uv|,u×v]$ \left[\mathbf{\vec u},\mathbf{\vec v},|\mathbf{\vec u}-\mathbf{\vec v}|,\mathbf{\vec u}\times \mathbf{\vec v}\right] $ 作为 softmax 分类器的输入,其中[]$ [\cdot] $ 为向量拼接,×$ \times $ 为逐元素乘法。然而,在 SBERT 中,加入逐元素乘法u×v$ \mathbf{\vec u}\times \mathbf{\vec v} $ 降低了性能。最重要的部分是逐元素的差值|uv|$ |\mathbf{\vec u}-\mathbf{\vec v}| $ 。

      如果使用人工特征交叉用于 softmax 的输入,那么在推断期间,就无法直接用余弦相似度,而是必须经过相同的人工特征交叉以及 softmax

    • regression objective function :根据 STSb 这一列,可以看池化策略有很大的影响:MAX 策略的表现明显比 MEANCLS-token 策略更差。这与 InferSent 相反,他们发现 InferSentBiLSTM layer 使用MAX (而不是MEAN)池化更好。

32.2.4 计算效率

  1. sentence embedding 有可能需要对数百万个句子进行计算,因此,需要有较高的计算速度。这里我们将 SBERTaverage GloVe embeddingsInferSentUniversal Sentence Encoder 进行比较。我们使用 STS benchmark 的句子来比较。

    • average GloVe embedding 是通过一个简单的 for-loop 来实现的,其中采用了 pythondictionary lookupnumpy

    • InferSent 是基于 PyTorch 的。

    • Universal Sentence Encoder 来自 TensorFlow Hub,是基于 TensorFlow 的。

    • SBERT 是基于 PyTorch 的。

    为了改进 sentence embedding 的计算,我们实施了一个 smart batching 策略:具有相似长度的句子被分在一组,并且在一个 mini-batch 中填充到最长的元素。这极大地减少了 padding tokens 的计算开销。性能是在一台配备英特尔 i7-5820K CPU @ 3.30GHzNvidia Tesla V100 GPUCUDA 9.2、以及 cuDNN 的服务器上测得的。结果如下表所示。

    • CPU 上,InferSentSBERT 快大约 65% 。这是由于网络结构简单得多。InferSent 使用单个 Bi-LSTM layer ,而 BERT 使用12 个堆叠的 transformer layer

      然而,transformer network 的一个优势是在 GPU 上的计算效率。此时,带有 smart batchingSBERTInferSent 快约 9% 、比Universal Sentence Encoder 快约 55%

    • smart batchingCPU 上实现了 89% 的提速,在 GPU 上实现了 48% 的提速。

    • average GloVe embeddings 显然在很大程度上是计算 sentence embedding 的最快方法。

    为什么 InferSentUniversal Sentence Encoder 没有用 smart batching?这是不公平的比较。Universal Sentence ENcoder 也是 transformer-based 模型,也可以采用 smart batching

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文