文章目录
BERT是什么
- BERT是Transformer的双向编码器表示的缩写。它是由Google在2018年末开发和发布的一种新型语言模型。像BERT这样的预训练语言模型在许多自然语言处理任务中发挥着重要作用,
- 例如问答,命名实体识别,自然语言推理,文本分类等等
语言模型
- 语言模型(Language Modeling)会根据前面单词来预测下一个单词 /NLP中最基础的模型结构(可以应用到各个NLP的应用场景中)。常 用的语言模型有:N-gram、Word2Vec、ELMo、OpenAI GPT、Bert、 XLNet、ALBert;
Mask机制
- Mask:遮挡掩盖的意思,比如:把需要预测的词给挡住。主要出 现出现在OpenAI GPT和Bert中。
BERT
- bert主要的问题就是计算量非常的大,参数量非常的多,所以在使用的时候一定要有好的设备。并且bert是一个与训练好的模型,经常应用于数据的预处理阶段。
- bert中的新特征
-
Bidirectional Transformers (Transformer)
-
Pre-training
- Masked Language Model(掩蔽语言模型)
- Next Sentence Predictio(下一个句子预测)
-
- Bert一共有俩个,一个为小的Bert共12层,大的Bert24层效果更好,相对参数也多。
Bert vs Transformer
- Bert中Encoder Layers是12/24层,而Transformer则是6层;
- Bert中E前馈神经网络单元是768/1024维度的,而Transformer则是512;
- Bert中 Multi Headed Attention是12/16个,而Transformer则是8;
- Bert Encoder中有Mask 机制,而Transformer中没有Mask 机制;
- Bert词嵌入是单词+位置信息+segment,而Transformer单词+位置信息;
- Bert的网络输入存在占位符[CLS], Transformer没有;
Bert Model Input
Bert Model Output
Bert和CNN中的VGG类似,都是提取高阶特征,如下图:
Bert Masked Language Model
Bert Next Sentence Prediction
第一个预测值是与众不同的他是来提取整个序列的信息的。
Bert with Feature Extraction
Bert有12层,每一层的输出都是高阶向量,都可以自由使用。
下面用“hello”做了一个实验,用于命名实体识别任务CoNLL-2003 NER,效果如下图:
Bert应用场景
Bert-GPT-ELMo
EMLo采用的是第一种方法。
ELMo
EMLo的俩种方式
EMLo采用的是第一种,下图红色框。第二中会带来信息泄露。
GPT
- GPT在BooksCorpus(800M单词)训练;BERT在BooksCorpus(800M单词)和维基百科(2,500M单词)训 练。
- GPT使用一种句子分隔符([SEP])和分类符词块([CLS]),它们仅在微调时引入;BERT在预训练期间 学习[SEP],[CLS]和句子A/B嵌入。
- GPT用一个批量32,000单词训练1M步;BERT用一个批量128,000单词训练1M步。
- GPT对所有微调实验使用的5e-5相同学习率;BERT选择特定于任务的微调学习率,在开发集表现 最佳。
- GPT是12层,Bert是24层。
- GTP使用的是Transformer的类似Decoder结构(单向的Transformer,里面没有Encoder-Decoder Attention,只有Mask Self-Attention和FFNN),Bert使用的是Encoder结构(双向Transformer)
vanilla transformer
- 属于一种语言模型的训练方式,来根据之前的字符预测片段中的下一个字符;论 文中采用64层模型,并仅限于处理512个字符的输入,因此如果序列太长会进行分 段,然后每段进行学习训练。
- 论文:https://arxiv.org/pdf/1808.04444.pdf
- 缺陷:
- 上下文长度受限:字符之间的最大依赖距离受输入长度的限制,模型看不到出现在几个句 子之前的单词。
- 上下文碎片:对于长度超过512个字符的文本,都是从头开始单独训练的。段与段之间没有 上下文依赖性,会让训练效率低下,也会影响模型的性能。
- 推理速度慢:在测试阶段,每次预测下一个单词,都需要重新构建一遍上下文,并从头开 始计算,这样的计算速度非常慢。
Transfomer-XL(2019-01)
- RNN和Transformer都可以学习序列之间的依赖关系,但是对于长时依赖 上都存在一定的局限性,在vanilla Transformer的基础上,Transfomer-XL语言模型引入两点创新:
- 循环机制(Recurrence Mechanism)
- 相对位置编码(Relative Positional Encoding)
- 论文:https://arxiv.org/pdf/1901.02860.pdf
- 代码:https://arxiv.org/pdf/1901.02860.pdf .
- 解析:https://www.lyrn.ai/2019/01/16/transformer-xl-sota-languagemodel.
XLNet(2019-06)
- XLNet:Generalized Autoregressive Pretraining for Language Understanding
- 论文: https://arxiv.org/pdf/1906.08237.pdf
- 解决BERT的问题 (解决,Bert中Transformer是双向的,即考虑前面也要考虑后面,所以只能做编码结构不能做解码结构的问题):
- 训练数据和测试数据的不一致,训练数据中使用了Mask,测试数据/预测数据中没 有使用Mask,这个问题叫做:pretrain-finetune discrepancy (预训练微调存在差异性,训练的时候做Mask,而迁移学习是时候不加Mask)
- BERT模型不能用来生成数据。
- 参考:https://blog.csdn.net/weixin_37947156/article/details/93035607k
ALBERT
-
ALBERT:A Lite BERT for Self-supervised Learning of Language Representations
-
解决Bert和XLNet的问题:
- 模型参数变的更少(因式分解,在Embedding之后的全连接做);
- 模型使用更少的内存(参数共享);
- 提升模型效果(损失函数做了一个更新);