Sentence-BERT实战

更新时间:2023-07-08 23:19:03 阅读: 评论:0

Sentence-BERT实战
引⾔
本⽂主要介绍了SBERT作者提供的官⽅模块的使⽤实战。
通过Sentence-BERT了解句⼦表⽰
Sentence-BERT(下⽂简称SBERT)⽤于获取固定长度的句向量表⽰。它扩展了预训练的BERT模型(或它的变种)来获取句⼦表⽰。
SBERT常⽤于句⼦对分类、计算句⼦间的相似度等等任务。
在了解SBERT的细节之前,我们先看下如何使⽤预训练的BERT模型来计算句⼦表⽰。
计算句⼦表⽰
考虑句⼦Paris is a beautiful city,假设我们要计算该句⼦的向量表⽰。⾸先,我们需要分词并增加特殊标记:
tokens = [ [CLS], Paris, is, a, beautiful, city, [SEP] ]
接着,我们把这些标记列表喂给预训练的BERT模型,它会返回每个标记的单词表⽰:
它山之石我们已经得到了每个单词的表⽰,那我们如何得到整个句⼦的表⽰呢?我们知道[CLS]标记保存了整个句⼦的压缩表⽰。所以我们可以使⽤该标记对应的向量作为句⼦表⽰:
Sentence reprentation=R[CLS]
但是这样做会有⼀个问题,就是这种句⼦表⽰是不精确的,尤其是我们直接使⽤未经微调的预训练的BERT。所以,除了这种⽅式,我们可以使⽤池化策略。即,我们通过池化所有标记的表⽰来作为句⼦表⽰。
池化可分为平均池化和最⼤池化。平均池化就是取所有单词表⽰向量之和的均值,⽽最⼤池化则是取[CLS]标记的输出来表⽰整个句⼦。
上⾯介绍的都是取最后⼀个编码器层的输出进⾏计算。其实还有其他⽅法,⽐如取第⼀个编码器和最后⼀个编码器输出之和、以及取倒数第⼆个编码器层的输出等。
咳嗽英语怎么说下⾯我们来看下SBERT。
理解SBERT
SBERT也不是从头开始训练的,它是基于预训练的BERT模型(或变种),然后进⾏微调获取句⼦表⽰。
也就是说,SBERT基本上是⼀个预训练的BERT模型,并为获取句⼦表⽰⽽微调。
为了微调与训练的BERT模型来获得句⼦表⽰,SBERT使⽤孪⽣(Siame)⽹络和三重态(Triplet)⽹络,其有助于微调得更快和获取精确的句⼦表⽰。
SBERT使⽤孪⽣⽹络来处理涉及句⼦对输⼊的任务。并且使⽤三重态⽹络来实现三重态损失⽬标函数。
带有孪⽣⽹络的SBERT
SBERT使⽤孪⽣⽹络架构来对句⼦对任务进⾏微调。
特意的近义词
⾸先,我们会看到SBERT是如何完成句⼦对分类任务的,然后我们会学习SBERT是如何⽤于句⼦对回归任务的。
SBERT⽤于句⼦对分类任务
假设我们有⼀个数据集包含句⼦对以及⼆分类标签,该标签显⽰这两个句⼦是相似(1)还是不相似(0)。
现在,我们看看如何⽤上⾯的数据集基于孪⽣⽹络来为句⼦对分类任务微调预训练的BERT模型。⾸先看看数据集中的第⼀对句⼦:
Sentence 1: I completed my assignment
Sentence 2: I completed my homework
我们需要判断给定的句⼦对是相似的(1)还是不相似的(0)。⾸先,还是⽼操作:
Tokens 1 = [ [CLS], I completed, my, assignment, [SEP]]
Tokens 2 = [ [CLS], I, completed, my, homework, [SEP]]鱼游天下>新概念作文
接着,我们把这些标记喂给预训练的BERT模型(后⾯如果没有特殊说明的话,简称为BERT模型)然后获得每个标记的向量表⽰。我们知道了SBERT使⽤孪⽣⽹络。孪⽣⽹络其实就是两个共享权重的相同的⽹络。所以这⾥我们使⽤两个完全相同的BERT模型。
我们把句⼦1的那些标记列表喂给第⼀个BERT,把句⼦2的那些表⽰列表喂给另⼀个BERT,然后计算这两个句⼦的表⽰向量。
为了计算⼀个句⼦的表⽰向量,我们这⾥使⽤平均或最⼤池化。在SBERT中默认使⽤平均池化。在应⽤池化策略之后,我们有了给定句⼦对的句⼦表⽰,如下所⽰:
代表句1的句⼦表⽰;代表句2的句⼦表⽰。现在,我们把它们以及它们的元素之差的结果拼接起来,然后乘以⼀个权重,如下:
注意权重的维度是,其中是句⼦嵌⼊的维度;是类别数量。下⾯,我们把这个结果输⼊⼀个Softmax函数,返回给定句⼦对相似的概率:
上⾯的过程可以⽤下图描述。⾸先呢,我们把句⼦对输⼊到BERT模型,然后通过池化策略得到句⼦表⽰,接着拼接这两个句⼦表⽰并乘以⼀个全球你在
,最后经过Softmax函数得到相似概率。
u v W (W (u ,v ,∣u −t v ∣))
W n ×k n k Softmax(W (u ,v ,∣u −t v ∣))
W黄丽玲
W
我们通过最⼩化交叉熵损失来训练上⾯的⽹络,同时更新权重。这样,我们就可以使⽤SBERT来完成句⼦对的分类任务。
SBERT⽤于句⼦对回归任务
假设我们有⼀个数据集包含句⼦对以及它们的相似度值:
我们看看如何基于上⾯的数据集使⽤孪⽣⽹络来为句⼦对回归任务微调BERT模型。在该任务中,我们的⽬标是预测两个给定句⼦间的语义相似度。同样看看数据集中第⼀对句⼦:
Sentence 1: How old are you
一树高Sentence 2: What is your age
现在我们需要计算这两个句⼦之间的相似度。我们对句⼦进⾏⼀些预处理:
Tokens 1 = [ [CLS], How, old, are, you, [SEP]]
Tokens 2 = [ [CLS], What, is, your, age, [SEP]]鲈鱼怎么烧
然后把这些标记列表输⼊到BERT模型,并获得每个标记的向量表⽰。此任务也是基于孪⽣⽹络,所以我们有两个⼀样的BERT模型。我们把句⼦1喂给第⼀个BERT模型,把句⼦2喂给第⼆个BERT模型,然后计算模型输出的标记表⽰的均值(池化)。

本文发布于:2023-07-08 23:19:03,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1073597.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模型   标记   训练
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图