Bert原理

我是目录

  • 介绍
  • Training of Bert
    • 1. Masked LM
    • 2. Next Sentence Prediction
  • How to use Bert
    • 1. 文本分类
    • 2. 单词分类
    • 3. 判断两个句子之间的关系
    • 4. QA

介绍

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原理_第1张图片
而Bert则是多个Transformer的双向叠加,中间每一个蓝色的圈圈都是一个transformer。
Bert原理_第2张图片

Training of Bert

1. Masked LM

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

2. Next Sentence Prediction

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

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 在这里插入图片描述

未完待续…

你可能感兴趣的:(自然语言处理,机器学习,算法)