【轩说AI】自监督学习 + BERT

自监督学习self-supervised learning

自监督学习是无监督学习的一种

自监督学习:不需要(X,y)成对的数据;只依靠数据X,将数据X自身的一部分作为训练的label,剩下的部分作为feature,来让网络训练。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uU9yiDhl-1677472740889)(./自监督学习.assets/image-20230224142328568.png)]

BERT

bert名字来源于芝麻街动漫的人物。

BERT本身架构就是一个Transformer的Encoder,应用于seq2seq方面。

任务1:Masked Token Prediction

要求:

输入feature: 序列“台 × 大 学”,其中“×”是一个被mask盖住的special token,或者用一个random随机的汉字来替代这个字。

输出label: mask向量经过bert的输出再经过linear层,输出softmax向量。让缺失的“湾”字成为输出的label。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AYRVqNla-1677472740890)(./自监督学习.assets/image-20230224142334258.png)]

相当于做一个填空题,本质上是对遮盖住的input-mask向量的output-softmax做分类。

训练时,bert+linear一起训练。

任务2:Next Sentence Prediction

bert的cls经过网络后的输出yes/no是二元分类,表明对**Sentence 1和Sentence 2是否在正文中应该是两个相连接的句子(而不是随意排列的)**进行预测。

但是后续有研究表明“任务2”对bert的表现的作用不是很大。有可能是因为bert网络很强大,对于“两个句子是否是直接相连的关系”这一判断并不需要的单独进行训练。

后续工作SOP:把句子是否相连接的判断,改为判断句子顺序。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-er1YuHuO-1677472740891)(./自监督学习.assets/image-20230224142339876.png)]

Bert的Downstream Tasks下游任务

BERT看起来好像只能做**“填空题”masked token prediction和“没有特别大作用和影响“的”语句相连判断题“Next sentence prediction**。但是我们可以fine tune出很多模型,来做海量的下游任务。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l30gwda5-1677472740891)(./自监督学习.assets/image-20230224142343551.png)]

评估BERT

自然语言处理的GLUE标准

  • GLUE由纽约大学, 华盛顿大学, Google联合推出, 涵盖不同NLP任务类型, 截止至2020年1月其中包括11个子任务数据集, 成为衡量NLP研究发展的重要标准。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ntm4RwpA-1677472740891)(./自监督学习.assets/image-20230224142347825.png)]

BERT可以针对9个不同的测试方向,微调出9个不同的model来参与评估。

BERT家族的自然语言处理的表现结果在之前的数据集上已经优于人类。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RRjSGJYD-1677472740891)(./自监督学习.assets/image-20230224142353840.png)]

下游应用1:文本情感分析sentiment analysis

任务

给出一个句子的vector-sequence,给出“情感”分类,比如是positive还是negative。

方法

BERT+Linear

  • 输入:[cls]+“this”+“is”+“good”+“.”+“[end]”

  • 层:只取[cls]经过bert后的对应的输出,这里的bert相当于transformer的encoder,bert输出的黄色vector相当于整合了整个句子信息的一个特征向量。

  • 输出:将中间层得到的vector通过Linear,得到判断的class。

  • 训练:Linear和Bert一起训练。Linear层显然参数随机初始化,特别的地方在于BERT:Bert采用预训练的模型,bert网络是之前已经通过自监督的Masked Token Prediction训练好的网络(一个学会做填空题的model)。然后二者一起做有监督的sentiment analysis任务的梯度下降参数优化。(这个下游的情感分类任务是有监督的,但是预训练Bert这一过程是无监督的)

  • 实验:之所以采用Pre-train的bert网络,而不是随机初始化的transformer-encoder,在于Bert网络的表现更好。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PWen7jHy-1677472740892)(./自监督学习.assets/image-20230224142409994.png)]

整个任务可以看做一个semi-supervised任务。

下游应用2:Pos tagging词性标注

任务

给一个句子单词组成的sequence,求出每个词对应的词性。

方法

bert+linear

  • self-attention做法:给一个encoder,输入时I saw a saw的sequence,输出是N V DET N的sequence。随机初始化Q、K、V,求注意力系数矩阵,再求得输出向量组,再做residual,最后得到输出的seq(如图输出的黄色向量组)。

  • Bert的做法:通过自监督学习,训练好一个BERT网络作为上游网络,这个BERT和上述self-attention方法中构建的网络结构一样,只不过它不直接通过监督学习方法进行优化参数来解决具体问题,而是先通过self-supervised learning来作为pre-train的model。监督学习的部分则作为网络的下游,将Bert的输出作为Linear层的输入,再输出得到分类结果class,与真实的词性label求loss,做参数优化。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RAwOtDh9-1677472740892)(./自监督学习.assets/image-20230224142414196.png)]

下游应用3:Natural Language Inference自然语言推断

任务

给出两个句子(两个sequence),求出两个句子间的逻辑关系:矛盾、蕴含(推导)、中立(并列)。

方法

输入:[cls]+seq1+[sep]+seq2

中间层:取[cls]经过bert后得到的输出vector,作为下一层的输入

输出:Class,分类,表明seq1和seq2之间的逻辑关系

与上述同理,Linear是随机初始化的,Bert是之前通过自监督训练pre-train之后的model。

在这里插入图片描述

下游应用4:extraction-based Q&A问答

任务

输入:给出一段文字,和若干question

输出:回答answer片段。extraction-based:答案是出现在原文中的。

方法

  • 输入:
    • Document:文章单词序列
    • Query:问题单词序列
  • 输出
    • s:start位置的idx
    • e:end位置的idx
  • 答案:
    • Document[s:e]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0sO5ZO2H-1677472740892)(./自监督学习.assets/image-20230219143221548.png)]

如图将[cls]+qestion+[sep]+document输入BERT,然后随机初始化两个和bert输出的vector同维度的vector,如图红色和蓝色的vector,然后做类似attention的Q*K的操作,将得到的一组和document同等长度的inner product值过softmax,红色向量求出s的值,蓝色向量求出e的值。然后做loss+梯度下降,来优化红、蓝向量的取值并对bert进行fine-tune。


BERT的训练

虽然目标很简单——做填空题,但是训练起来十分困难,需要海量的数据超高的算力才可以。称之为:bert embryology胚胎学

bart——除了训练encoder,还想要训练decoder

前面的例子都不是seq2seq的例子,seq2seq要求“输入和输出的长度是不一定的”,所以不能把pos tagging应用看作是seq2seq的应用。典型的seq2seq是transformer。

给一个transformer,encoder输入:一个corrupted的序列{w1,w2,w3<被损坏>,w4},要求decoder能够产生corrupt之前的序列 {w1,w2,w3<被还原>,w4},即对input的重建。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vfNXIMds-1677472740893)(./自监督学习.assets/image-20230219151636318.png)]

corrupt的方法

google尝试做了所有可能的corrupt的方法来训练transformer,model 的大小约为7TB

BERT为什么work

词汇编码

onehot

  • 缺点:
  1. 它是一个词袋模型,不考虑词与词之间的顺序。
  2. 它假设词与词相互独立,不能体现词汇间的相似性
  3. 每个单词的one-hot编码维度是整个词汇表的大小,维度非常巨大,编码稀疏,会使得计算代价变大。
word embedding

把文本分散嵌入(embedding)到另一个数值向量空间,称作分布式表示,又称为词嵌入(word embedding)或词向量。

  • Word Embedding的输入是原始文本中的一组不重叠的词汇,将他们放到一个字典里面,例如:[“cat”, “eat”, “apple”],就可以作为一个输入。
  • Word Embedding的输出就是每个word的数值向量表示,变成一个矩阵。

举一个例子,这是一个单词“king”的词嵌入(在维基百科上训练的GloVe向量):

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ptg07fNu-1677472740893)(./自监督学习.assets/0b63042d5c388feeeae9255dd4d204b1.png)]

我们将忽略数字并仅查看颜色以指示单元格的值。现在让我们将“king”与其它单词进行比较(注意,世间有相似之人,也有相似之词):

Word Embedding的优点
  1. 对比one-hot高维稀疏向量,embedding维度低,连续向量,方便模型训练;
  2. 语意相似的词在向量空间上也会比较相近
  3. 一个向量可以编码一词多义(歧义需要另外处理);
  4. 天然有聚类后的效果,是一种无监督学习。
  5. 罕见词也可以学到不错的表示。

word Embedding的方法

从N-gram模型、NNLM到Word2Vec

cosine similarity

计算两个向量之间相似度得分的常用方法是余弦相似度

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D6Ity18X-1677472740893)(./自监督学习.assets/format,png.png)]

举例:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DUeBN3yx-1677472740894)(./自监督学习.assets/2cce32e676a02e898395a940b7f62af5.png)]

BERT就是在做word Embedding

BERT就是在做word Embedding,并且是在做一种“考虑上下文”的word embedding。

朴素的word embedding思想,可以做到具有简单的聚类性质的非稀疏性编码。但是各种语言都会具有一词多义和不同语境下含义不同的问题。由于bert实际上是源于注意力机制,所以很容易做到考虑上下文。

实验:计算不同语境上下文中汉字的“果“的embedding向量的cosine similarity。

可以看到matrix[:5,:5]中不同语句间“果”字的embedding相似度很高,都是浅黄绿色。(自己和自己的相似度最高,为1,黄色)。matrix[5:,5:]同理。但是交叉起来的位置embedding相似度很低,这意味着bert将苹果手机的"果"和水果苹果的"果"编码为欧式空间中相距很远、相差较大的向量【聚为两个不同的类】。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5sc6CrEZ-1677472740894)(./自监督学习.assets/image-20230220102652544.png)]

类比BERT和CBOW

其他

此外,bert还可以做看似没有context的任务,比如DNA序列分类、蛋白质分类、音乐分类。为什么在这些领域也work,还需要后续研究。

BERT还可以应用于multi-lingual BERT,在pre-train时,用多种语言去训练它。最后embedding的结果是,不仅同种语言内可以很好的embedding,并且不同语言间也会被embedding的很好。想要用实验验证,同样也需要大量的数据和算力。

上述这样优秀的表现的用途在于,在下游任务中,可以实现:训练用english的Q&A,测试用chinese的Q&A.

实际训练结果:

不同语言embedding后也是有差异的,不会因为训练了104种语言,就抹去了语言的差异(抹去差异意味着会输入给中文,embedding到英文单词的错误)。并且差异也是有规律的,这种差异意味着“语言”间的差异。例如:
δ = ∣ ′ 跳 ′ − ′ j u m p ′ ∣ = ∣ ′ 游 ′ − ′ s w i m ′ ∣ = ∣ ′ 兔 ′ − ′ r a b b i t ′ ∣ \delta=|'跳'-'jump'|=|'游'-'swim'|=|'兔'-'rabbit'| δ=jump=swim=rabbit
于是可以做到神奇的事:输入“深度学习”,输出v1,v2,v3,v4,加上delta,得到对应英文的embedding,这样可以做到unsupervised translation。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值