数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
三十二、Sentence-BERT [2019]
在论文
《Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks》
中,作者提出了Sentence-BERT: SBERT
,这是一种使用siamese network
和triplet 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 $ 个句子的集合中,找到相似度最高的一对句子,需要用BERT
执行 $ 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》
开发了SBERT
。siamese network
使得可以导出针对输入句子的固定尺寸的representation
向量。然后使用像余弦相似性、或曼哈顿/欧几里得距离这样的相似性度量,可以找到语义上相似的句子。这些相似度度量可以在现代硬件上极其有效地进行,使SBERT
可以用于语义相似度搜索、以及聚类。在10000
个句子的集合中寻找最相似的sentence pair
的复杂性,从使用BERT
的65
小时减少到使用SBERT
的几秒钟(计算10000
个sentence embedding
耗费SBERT
约5
秒,计算余弦相似度约0.01
秒)。通过使用优化的index
结构,寻找最相似的Quora
问题可以从50
小时减少到几毫秒。论文在
NLI
数据上对SBERT
进行了微调,它所创建的sentence embedding
明显优于其他SOTA
的sentence embedding
方法,如InferSent
和Universal Sentence Encoder
。在七个
Semantic Textual Similarity: STS
任务上,SBERT
相对InferSent
和Universal Sentence Encoder
分别实现了11.7
分和5.5
分的改进。在
sentence embedding
的评估工具包SentEval
上,SBERT
相对InferSent
和Universal Sentence Encoder
分别实现了2.1
分和2.6
分的改进。
SBERT
可以适配特定的任务。它在一个具有挑战性的argument similarity
数据集、以及一个区分维基百科文章不同部分的句子的triplet dataset
上创造了新的SOTA
性能。相关工作:
BERT
:BERT
是一个预训练的transformer
网络,它为各种NLP
任务提供了新的SOTA
的结果,包括问答、句子分类、sentence-pair regression
。用于sentence-pair regression
的BERT
的输入由两个句子组成,由一个特殊的[SEP] token
分开。BERT
在Semantic 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 embedding
:sentence 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》
解决了来自BERT
的cross-encoder
的运行时间开销,并提出了一种方法(poly-encoders
)通过attention
来计算 $ m $ 个上下文向量和precomputed
的候选embedding
之间的分数。这个想法对于在更大的集合中寻找最高得分的句子是有效的。然而,poly-encoders
有一个缺点,即score function
不是对称的,而且计算开销对于像聚类这样的case
来说太大( $ O(n^2) $ 的score computation
)。
以前的
neural sentence embedding
方法是从随机初始化开始训练的。这里我们使用预训练好的BERT
网络和RoBERTa
网络,只对其进行微调以产生有用的sentence embedding
。这大大减少了所需的训练时间。SBERT
可以在不到20
分钟内完成微调,同时产生比其它sentence embedding
方法更好的结果。
32.1 模型
SBERT
在BERT/RoBERTa
的输出上增加了一个池化操作,从而获得一个固定尺寸的sentence embedding
。我们试验了三种池化策略:使用CLS-token
的输出、均值池化策略MEAN-strategy
(计算所有输出向量的平均值)、最大池化策略MAX-strategy
(沿着position
维度计算输出向量的最大值)。默认配置是均值池化策略。为了微调
BERT/RoBERTa
,我们创建了siamese network
和triplet network
来更新权重,使得产生的sentence embedding
具有语义,并可以用余弦相似度进行比较。网络结构取决于可用的训练数据。我们试验了以下网络结构和目标函数:Classification Objective Function
:我们将sentence embedding
$ \mathbf{\vec u} $ 、 $ \mathbf{\vec v} $ 、以及它们之间的逐元素差进行拼接,然后乘以权重矩阵 $ \mathbf W_t\in \mathbb R^{K\times (3d)} $ :其中:
$ d $ 为sentence embedding
维度, $ K $ 为label
的数量, $ [\cdot] $ 为向量拼接。我们优化交叉熵损失。整体结构如下图所示。
Regression Objective Function
:我们计算sentence embedding
$ \mathbf{\vec u} $ 、 $ \mathbf{\vec v} $ 之间的余弦相似度,如下图所示。我们使用mean-squared-error:MSE loss
作为目标函数。Triplet Objective Function
:给定一个锚点句子anchor sentence
$ a $ ,一个positive sentence
$ p $ 和一个negative sentence
$ n $ ,triplet loss
使得 $ a $ 和 $ p $ 之间的距离小于 $ a $ 和 $ n $ 之间的距离。在数学上讲,我们最小化以下损失函数:其中:
$ \mathbf{\vec s} $ 为sentence embedding
, $ \|\cdot\| $ 为距离函数, $ \epsilon $ 为margin
(使得 $ \mathbf{\vec s}_p $ 比 $ \mathbf{\vec s}_n $ 更接近 $ \mathbf{\vec s}_a $ 至少 $ \epsilon $ 的距离)。在我们的实验中,我们使用欧氏距离并设置
$ \epsilon = 1 $ 。
训练细节:我们在
SNLI
和Multi-Genre NLI
数据集的组合上训练SBERT
。SNLI
包含570k
个sentence pair
,并被标注了矛盾contradiction
、蕴含eintailment
、以及中性neutral
等三种标签。MultiNLI
包含了430k
个sentence pair
,涵盖了一系列的口语的和书面语的体裁。
我们用
3-way softmax classifier objective function
对SBERT
进行了微调,微调一个epoch
。我们使用batch size = 16
,Adam
优化器(学习率为2e-5
),并使用线性学习率调度,其中在10%
的训练数据上进行学习率预热。我们默认的池化策略是均值池化。注意:根据论文在相关工作中的介绍,论文使用
pretrained BERT/RoBERTa
来初始化模型。因此这里的微调更像是“预微调”,即预训练和微调中间的步骤。
32.2 实验
32.2.1 Semantic Textual Similarity
我们评估了
SBERT
在常见的语义文本相似性Semantic Textual Similarity: STS
任务中的表现。SOTA
的方法通常学习一个(复杂的)回归函数,将pair-wise sentence embedding
映射到相似性分数。然而,这些回归函数是pair-wise
工作的,可扩展性很差。相反,我们总是使用余弦相似度来比较两个sentence embedding
之间的相似度。我们还用负曼哈顿距离、以及负欧氏距离作为相似度指标来进行实验,但所有方法的结果都大致相同。
无监督
STS
:我们在不使用任何STS-specific
训练数据的情况下评估了SBERT
在STS
中的表现。我们使用2012-2016
年的STS
任务、STS benchmark
、SICK-Relatedness
数据集。这些数据集对sentence pair
的语义相关度提供了0 ~ 5
的标签。我们使用sentence embedding
余弦相似度和ground-truth
之间的Spearman’s rank correlation
(而不是Pearson correlation
)。Spearman’s rank correlation
:首先将原始数据排序,然后为每个数据赋予一个rank
。对于两组数据,分别计算它们各自rank
序列的皮尔逊相关系数:而
Pearson correlation
就是对原始数据直接计算相关系数。实验结果如下表所示。可以看到:
直接使用
BERT
的输出会导致相当差的性能。对BERT embedding
的均值池化只达到了54.81
的平均相关度,而使用CLS-token
输出只达到了29.19
的平均相关度。两者都比计算GloVe embedding
的均值要更差。使用所描述的
siamese network
结构和微调机制大大改善了相关性,大大超过了InferSent
和Universal Sentence Encoder
的表现。SBERT
表现比Universal Sentence Encoder
差的唯一数据集是SICK-R
。Universal Sentence Encoder
是在各种数据集上训练的,包括新闻、问答网页和讨论区,这似乎更适合SICK-R
的数据。相比之下,SBERT
只在维基百科(通过BERT
)和NLI
数据上进行了预训练。虽然
RoBERTa
能够提高几个监督任务的性能,但我们只观察到SBERT
和SRoBERTa
在生成sentence embedding
方面的微小差异。
监督
STS
:STS benchmark: STSb
是一个流行的数据集,用于评估有监督的STS
系统。数据集包括来自caption
、新闻、以及论坛三个category
的8628
个sentence pair
。它被分为训练集(5749
个样本 )、验证集(1500
个样本)、测试集(1379
个样本)。BERT
在这个数据集上创造了新的SOTA
的性能,它将两个句子都传给了网络,并使用简单的回归方法进行输出。我们使用训练集,利用
regression objective function
对SBERT
进行微调。在预测时,我们计算sentence embedding
之间的余弦相似度。所有系统都是用10
个随机种子进行训练从而考虑方差。读者猜测:回归目标是在余弦相似度之上进行的,因此两个
sentence embedding
越相似则output
越大。实验结果如下表所示。我们用两种设置进行了实验:只在
STSb
上训练、先在NLI
上训练然后在STSb
上训练(即,利用NLI
数据进行预微调)。我们观察到:在
SBERT
上,第二种策略导致了1-2
分的轻微改善。在
BERT
上,第二种策略导致了3-4
分的轻微改善。我们没有观察到
BERT
和RoBERTa
之间的显著差异。
注意:这里的
BERT-NIL-STSb-base
用的是pair-wise
的BERT
,而不是Avg. BERT embeddings
。Argument Facet Similarity: AFS
:我们在AFS
语料库上评估SBERT
。AFS
语料库标注了来自社交媒体对话的6k
个sentential argument pair
,涉及三个有争议的话题:枪支管制、同性恋婚姻、死刑。这些数据被标注为从0
("不同的话题")到5
("完全等同")的等级。AFS
语料库中的相似性概念与STS
数据集中的相似性概念相当不同。STS
数据通常是描述性的,而AFS
数据是对话中的争论性摘录argumentative excerpt
。要被认为是相似的,论点argument
不仅要提出相似的主张,而且要提供相似的推理reasoning
。 此外,AFS
中的句子之间的词汇差距lexical gap
要大得多。因此,简单的无监督方法以及SOTA
的STS
系统在这个数据集上表现很差。我们在两种场景中在这个数据集上评估
SBERT
:我们使用
10-fold cross-validation
来评估SBERT
。这种评估设置的一个缺点是,不清楚方法对不同主题的泛化性如何。我们在
cross-topic setup
上评估SBERT
。我们在两个主题上训练,在剩余的主题上评估。我们对所有三个主题重复这一过程,并对结果进行平均。第二种方法可以评估在
unseen
主题上的表现。
SBERT
使用Regression Objective Function
进行微调。相似性得分是使用基于sentence embedding
的余弦相似性来计算的。我们还提供了皮尔逊相关系数 $ r $ ,然而我们表明皮尔逊相关系数有一些严重的缺点,应该避免用于比较STS
系统。实验结果如下表所示,可以看到:
像
tf-idf
、average GloVe embedding
、或InferSent
这样的无监督方法在这个数据集上表现得相当糟糕,得分很低。在
10-fold cross-validation setup
中训练SBERT
,其性能几乎与BERT
相当。然而,在跨主题评估中,我们观察到
SBERT
的性能在Spearman correlation
指标下降了约7
个点。为了被认为是相似的,论点应该涉及相同的主张并提供相同的推理。
BERT
能够使用注意力机制来直接比较两个句子(例如word-by-word
的比较),而SBERT
必须把来自unseen
的主题的单个句子映射到一个向量空间,从而使具有类似主张claim
和理由reason
的论点接近。这是一个更具挑战性的任务,这似乎需要超过两个主题的训练,才能与BERT
相媲美。
Wikipedia Sections Distinction
:《Learning Thematic Similarity Metric from Article Sections Using Triplet Networks》
使用维基百科为sentence embedding
方法创建了一个主题细化的训练集、验证集、以及测试集。Wikipedia
的文章被分成不同的章节,每个章节聚焦于某些方面。该论文假设:同一章节的句子比不同章节的句子在主题上更接近。他们利用这一点创建了一个大型的弱标记的sentence triplet
数据集:anchor
样本和正样本来自同一章节,而负样本来自同一文章的不同章节。我们使用该数据集。我们使用
Triplet Objective
,在大约1.8M
个training triplet
上训练SBERT
一个epoch
,然后在222,957
个test triplet
上评估。我们使用准确率作为评估指标:正样本是否比负样本更接近anchor
?结果如下表所示。
《Learning Thematic Similarity Metric from Article Sections Using Triplet Networks》
提出的Bi-LSTM
方法微调了具有triplet loss
的Bi-LSTM
架构,从而得到sentence embedding
(下表中Dor et al.
这一行的结果)。可以看到:SBERT
显著优于Bi-LSTM
方法。
32.2.2 SentEval
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
的目的,但它在这项任务上的表现超过了其他SOTA
的sentence embedding
方法。 看来,SBERT
的sentence embedding
很好地捕捉了情感信息:与InferSent
和Universal Sentence Encoder
相比,我们观察到SentEval
的所有情感任务(MR
、CR
和SST
)都有很大的改进。唯一一个SBERT
明显比Universal Sentence Encoder
差的数据集是TREC
数据集。Universal Sentence Encoder
在问答数据上进行了预训练,这似乎对TREC
数据集的问题类型分类任务有利。average BERT embeddings
、或使用BERT CLS-token output
,在各种STS
任务中取得了不好的结果(Table 1
),比average GloVe embeddings
更差。然而,对于SentEval
,average BERT embeddings
、以及使用BERT CLS-token output
取得了不错的结果(Table 5
),超过了average GloVe embeddings
。造成这种情况的原因是不同的设置。对于
STS
任务,我们使用余弦相似度来估计sentence embedding
之间的相似性。余弦相似性对所有维度都是平等的。相比之下,
SentEval
将逻辑回归分类器用于sentence embedding
。这允许某些维度对分类结果有更高或更低的影响。
我们的结论是:
average BERT embeddings
、BERT CLS-token output
返回的sentence embedding
不可能用于余弦相似度或曼哈顿/欧氏距离。对于迁移学习,它们的结果比InferSent
或Universal Sentence Encoder
略差。然而,在NLI
数据集上使用所描述的具有siamese network
结构的微调,产生的sentence embedding
达到了SentEval
工具包的SOTA
。
32.2.3 消融研究
这里我们对
SBERT
的不同方面进行了消融研究,以便更好地了解其相对重要性。我们评估了不同的池化策略(MEAN/MAX/CLS
)。对于classification objective function
,我们评估了不同的concatenation
方法。对于每个可能的配置,我们用
10
个不同的随机种子训练SBERT
,并对其性能进行平均。objective function
(分类或回归)取决于数据集:对于
classification objective function
,我们在SNLI
和Multi-NLI
数据集上训练SBERT-base
,并在NLI
数据集上进行评估。对于
regression objective function
,我们在STS benchmark
数据集的训练集上进行训练,并在STS benchmark
验证集上进行评估。
结果如下表所示。可以看到:
classification objective function
:根据NLI
这一列,可以看到:池化策略的影响相当小,而concatenation
模式的影响要大得多。对于
concatenation
模式,InferSent
和Universal Sentence Encoder
都使用 $ \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
中,加入逐元素乘法 $ \mathbf{\vec u}\times \mathbf{\vec v} $ 降低了性能。最重要的部分是逐元素的差值 $ |\mathbf{\vec u}-\mathbf{\vec v}| $ 。如果使用人工特征交叉用于
softmax
的输入,那么在推断期间,就无法直接用余弦相似度,而是必须经过相同的人工特征交叉以及softmax
。regression objective function
:根据STSb
这一列,可以看池化策略有很大的影响:MAX
策略的表现明显比MEAN
或CLS-token
策略更差。这与InferSent
相反,他们发现InferSent
的BiLSTM layer
使用MAX
(而不是MEAN
)池化更好。
32.2.4 计算效率
sentence embedding
有可能需要对数百万个句子进行计算,因此,需要有较高的计算速度。这里我们将SBERT
与average GloVe embeddings
、InferSent
和Universal Sentence Encoder
进行比较。我们使用STS benchmark
的句子来比较。average GloVe embedding
是通过一个简单的for-loop
来实现的,其中采用了python
的dictionary lookup
和numpy
。InferSent
是基于PyTorch
的。Universal Sentence Encoder
来自TensorFlow Hub
,是基于TensorFlow
的。SBERT
是基于PyTorch
的。
为了改进
sentence embedding
的计算,我们实施了一个smart batching
策略:具有相似长度的句子被分在一组,并且在一个mini-batch
中填充到最长的元素。这极大地减少了padding tokens
的计算开销。性能是在一台配备英特尔i7-5820K CPU @ 3.30GHz
、Nvidia Tesla V100 GPU
、CUDA 9.2
、以及cuDNN
的服务器上测得的。结果如下表所示。在
CPU
上,InferSent
比SBERT
快大约65%
。这是由于网络结构简单得多。InferSent
使用单个Bi-LSTM layer
,而BERT
使用12
个堆叠的transformer layer
。然而,
transformer network
的一个优势是在GPU
上的计算效率。此时,带有smart batching
的SBERT
比InferSent
快约9%
、比Universal Sentence Encoder
快约55%
。smart batching
在CPU
上实现了89%
的提速,在GPU
上实现了48%
的提速。average GloVe embeddings
显然在很大程度上是计算sentence embedding
的最快方法。
为什么
InferSent
和Universal Sentence Encoder
没有用smart batching
?这是不公平的比较。Universal Sentence ENcoder
也是transformer-based
模型,也可以采用smart batching
。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论