前言
自监督学习(二)BERT简介
Supervised learning:训练时要有标签的资料
Self-supervised learning:在没有label的情况下做supervised learning。将x分为两部分x’和x’’,一部分作为输入,另一部分当做label。也可以说是unsupervised learning的一种。
一、BERT
BERT做的两件事:
1.Masking Input
2.Next Sentence Prediction
Masking Input
Bert是一个transformer的encoder,输入一排向量,输出一排向量,输入多长输出多长。之后将输入的随机一部分token盖住。盖住有两种方式,一是将它用特殊符号代替,二是将它用一个随机的字代替。
Bert的输出是另外一个sequence,盖住部分对应的输出的向量,做linear transform(乘一个矩阵),然后softmax得到一个分布,这个分布包含所有可能的字和这个字对应的分数。
盖住的部分bert不知道,但是我们知道。Bert学习的目标就是让输出和“湾”越接近越好。“湾”可以表示为一个one hot vector,minimize输出和“湾”的cross entropy。实际是一个分类的问题。Bert和linear model一起训练。
Next Sentence Prediction
Bert在训练时除了做masking还会做next sentence prediction。next sentence prediction是说拿出两个句子从资料库中,在两个句子中间加入一个特殊符号表示分割。并在第一个句子前面加入一个特殊符号。将这两个句子和特殊符号拼成一个长的sequence输入到bert。句子开头的特殊符号输出后经过一个linear model输出yes/no,表示这两个句子是否是相接的。但是后来的研究表示next sentence prediction这个对bert的效果没有多大的帮助。可能的原因是选出来的两句肯定很不像,对bert分辨来说是比较容易的,没有通过这个任务学到很多东西。
BERT这样看来只能做一个填空题,但是bert可以应用在各式各样你所关注的下游任务(downstream tasks)。Bert在做这些downstream tasks还是需要一些标注的资料。
二、使用BERT的可能例子
文字处理可以同理到语音、图片的,应为语音图片都可以看做是向量
Case1:sentiment analysis。输入一个sequence输出一个类别
做这个任务的时候需要下游任务的标注资料,任然需要大量的句子和句子对应的标注。训练的时候linear和bert都会用gradient descent去update,只不过linear部分是随机初始化的,bert部分的初始参数是从学习做填空题的那个bert来的,这样做的结果比随机初始化的参数的结果要好。
有pre-train的即有bert初始化的比都随机初始化的,loss下降更快,并且loss更低。
Case2:输入一个sequence输出同样长度的sequence。Example:pos tagging词性标注。
Case3:输入两个sequence输出一个类别。Example:natural language inferencee。给前提能否得到推论。
只关注cls对应的输出,class:矛盾的/不矛盾的。
Case4:文章问答(假设答案是文章中的一段原话)。输入:文章、问题,输出:两个正整数,表示答案的开头和结尾的数字。
文章和问题之间有一个符号,问题前面有一个符号。从头开始训练的有两个向量,向量和bert的输出向量维数一样。把文章经过bert的输出和其中一个向量做点乘,做softmax得到数值,哪里分数最高表示答案的起始就是哪里,同理另外一个表示答案的结束位置。
三、Pre-train seq2seq model
将encoder的输入弄坏,希望decoder输出的和弄坏前一样。弄坏的方法有很多种,如像bert一样把一部分盖起来、删掉、弄乱顺序、反转等等。
总结
学习视频地址:https://www.bilibili.com/video/BV13Z4y1P7D7/?p=19&spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=3a369b537e1d34ff9ba8f8ab23afedec