bert是transformer的encoder堆叠而成的
bert是self-supervise learning(自监督学习)model,没有label,基于masking机制。masking有两种方式,一个是将输入的其中一个向量替换为特殊的token,如上图的蓝色方框mask;另一个是将输入向量随机替换成vocabulary中一个向量,如绿色random。如果是第一种方式,比如输入为‘台湾大学’,把‘湾’遮掩掉然后送入bert,输出的向量经过线性变换和softmax,输出包含vocabulary中所有字的概率分布,跟transformer一样,最后值最大的就是预测结果,然后将结果与已知的之前masking的输入对比。总的来说就是,label就在输入中,只不过模型自己不知道,模型猜完之后的结果,我再拿它跟mask掉的内容作对比,得出预测的是否正确。
这部分就像是填空,看起来没什么意义,但是bert最重要的任务是微调后应用于下游任务,这个过程也叫作pre-train(预训练),如下图。
上图是一个完整的model,将输入送入bert处理后,再去进行线性变换,最终输出类别。此时,bert是用上述填空机制已经训练好的,也就是说整个model就线性变换那里的权重矩阵需要训练,因为它是随机初始化的。但是为什么用bert?没有为什么,不明白,反正引入bert就是效果好。
这里引入一个概念‘embedding’。我的理解是bert的输出,或者说bert对于输入的处理,叫做embedding,意思就是比如‘大’这个字,经过bert处理后,输出一个融合上下文语义信息的向量,这个向量代表着这个字的意思。但是同一个字有时也代表不同的意思。比如‘果’,苹果手机的果和吃苹果的果,所以这两个果embedding后的结果也是不一样的。两个果在计算余弦相似度时,差别很大
学习过程中看到个问题,bert可以理解为更为先进性能更好的word embedding吗,感觉上是这样的。
看到一个高级解释:word embedding就是通过训练,把语言里的词映射到高维向量空间,用向量来表示。
bert总结:
概述:一个性能极佳的word embedding,高度融合上下文的语义信息,结果非常精准,甚至可以跨语言(可能表述有问题,关于跨语言我的理解是,语言只是表示,是相通的,机器不懂语言真正的意思,但是在使用方式、语言结构或者传递方式或者其它某些综合方面,其实是有一定的一致性的,一通瞎说,错了不负责)
原理:完全不懂,玄学,离谱。
应用:pre-train,像之前的word2vec、cbow之类的,不如bert。用bert效果极好,所以用它将输入转化为融合上下文语义信息的向量后,意思更加准确,对下游任务更加友好,从而提升模型的整体效果