Bert原理

介绍

Bert:Bidirectional Encoder Representations from Transformer,从名字就可以看出来Bert是Transformer Encoder的变种,同时它也是木偶动画《芝麻街》里面的角色:
在这里插入图片描述
它还有个兄弟EMLo。长这样:
在这里插入图片描述
关于Bert这个模型的神奇之处我就不在这里多说了,它直接颠覆了人们对Pretrained model的理解。尽管Bert模型有多得骇人听闻的参数,但是我们可以直接借助迁移学习的想法使用已经预训练好的模型参数,并根据自己的实际任务进行fine-tuning。上海交大的一篇论文《How to Fine-Tune BERT for Text Classification》给出了一些调节Bert参数的建议,有时间把那篇论文也写成博客。本文按照台大李宏毅教授的公开课进行整理。
为了描述得更清楚,还是先把transformer的模型结构列在下面:
在这里插入图片描述
而Bert则是多个Transformer的双向叠加,中间每一个蓝色的圈圈都是一个transformer。
在这里插入图片描述

Training of Bert

1. Masked LM

为了学习单词之间的上下文关系(对于中文来说是字,而不是词),使用[MASK]随机挖掉训练过程中15%的词汇,其中80%用masked token来代替,10%用随机的一个词来替换,10%保持这个词不变。然后,根据Mask掉的输出embedding去预测被扣掉部分的单词到底是啥。由于线性分类器提取特征的能力很弱,倘若能够预测成功,那么说明Bert之后的embedding的表示能力很强。
在这里插入图片描述

2. Next Sentence Prediction

第二个训练任务是通过前一句话预测下一句话。这个明显是为了捕获句子之间的依赖关系。通过添加特殊的字符[CLS]表示句子的开始,并且根据这个字符可以去表示整个句子;然后[SEP]用来表示两个不同句子之间的边界。通过[CLS]的输出结果可以判断这两个句子是否应该接在一起,这是一个简单的二分类问题。(话说一看下面的例句就知道李宏毅老师是个老二次猿了)
在这里插入图片描述

How to use Bert

尽管从直观上来看,Bert可能类似于Word2vec,返回单词们的稠密表示,但是根据不同的任务Bert可以有许多不同的用法。

1. 文本分类

上文也提到了,是根据[CLS]的输出来判断句子的种类。在训练自己的数据的时候只需要进行fine-tune即可。
在这里插入图片描述

2. 单词分类

每个单词都对应一个class。最典型的就是序列标注任务。
在这里插入图片描述

3. 判断两个句子之间的关系

输入两个句子,output一个[CLS]的分类结果。
在这里插入图片描述

4. QA

问答。需要答案落在输入语料里面。输入是文档以及问题,输出是答案Start的token的id(s)和结束的id(e)。
比如,问题“什么导致的降水?”在文中的答案是第17个单词gravity(重力),所以s=17,e=17。
在这里插入图片描述
Bert如何实现这个任务呢?首先,还是学习到文档中每个单词的embedding,对应图中浅黄色的条条;然后再学一个橘黄色的条条,这个维度与单词的embedding是一毛一样的,因此这俩张量之间可以做一个dot product,这个类似于注意力。得到的结果通过softmax对每一个向量都返回一个概率,概率最高的token位置就是s。同理,蓝色的条条表示e。若e<s,那么此题无解。
在这里插入图片描述

未完待续…

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五月的echo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值