分类:Bert相关材料

来自Big Physics

Bert

基于变换器的双向编码器表示技术(Bidirectional Encoder Representations from Transformers,BERT)是用于自然语言处理(NLP)的预训练技术,由Google提出。2018年,雅各布·德夫林和同事创建并发布了BERT。Google正在利用BERT来更好地理解用户搜索语句的语义。

最初的英语BERT发布时提供两种类型的预训练模型:(1)BERTBASE模型,一个12层,768维,12个自注意头(self attention head),110M参数的神经网络结构;(2)BERTLARGE模型,一个24层,1024维,16个自注意头,340M参数的神经网络结构。两者的训练语料都是BooksCorpus以及英语维基百科语料,单词量分别是8亿以及25亿。

模型架构

1.总体架构

利用Transformer的Encoder去训练双向语言模型BERT,再在BERT后面接上特定任务的分类器。 Bert-transfer-learning.png

使用方法示例: BERT-classification-spam.png

2.输入与输出

Bert-input-output.png Bert-encoders-input.png Bert-output-vector.png

3.规模

  • BERTBASE :L=12,H=768,A=12。总参数为110M。和GPT一样
  • BERTLARGE :L=24,H=1024,A=16。总参数为340M。最优模型

Bert-base-bert-large.png Bert-base-bert-large-encoders.png

单个位置的输入

每个位置输入三个部分相加而成:

  • wordpiece-token向量
  • 位置向量:512个。训练
  • 段向量:sentence A B两个向量。训练

一些符号:

  • CLS:special classification embedding,用于分类的向量,会聚集所有的分类信息
  • SEP:输入是QA或2个句子时,需添加SEP标记以示区别
  • EA和EB:输入是QA或2个句子时,标记的sentence向量。如只有一个句子,则是sentence A向量

Bert-input.png

预训练语言模型

单向语言模型的能力很差,单独训练两个方向的语言模型再把结果拼接起来也不好。那么怎么才能训练一个真正的双向语言模型呢?如何让一个单词is conditioned on both left and right context呢?答案就是Masked Language Model

Masked LM

在进行WordPiece之后,随机掩盖一些(15%)词汇,再去预测这些词汇。

BERT-language-modeling-masked-lm.png

但有两个缺点

缺点1 大量mask标记,造成预训练和finetune时候的差距,因为finetune没有mask

  • 80%:替换为mask
  • 10%:随机替换为其它词汇
  • 10%:保留原来的词汇。这部分正确的保留,保证了语言能力。

由于Transformer不知道要预测哪个词语,所以它会强制学习到所有单词的上下文表达。

缺点2 收敛很慢,但是效果好

比单向语言模型收敛较慢。

预训练NSP任务

对于像QA、NLI等需要理解多个句子之间关系的下游任务,只靠语言模型是不够的。还需要提前学习到句子之间的关系。

Next Sentence Prediction

NSP(Next Sentence Prediction),是一个二分类任务。输入是A和B两个句子,标记是IsNext或NotNext,用来判断B是否是A后面的句子。这样,就能从大规模预料中学习到一些句间关系。 Bert-next-sentence-prediction.png


模型最终能达到97%-98%的准确率,对QA和NLI都很有效果。

预训练细节

数据组成

语料是下面两个库,合计33亿词汇。采用文档级别的语料,有利于学习长依赖序列。

  • BooksCorpus:8亿个词。(800M)
  • 英文维基百科:25亿个词。(2,500M)

从语料库中随机选择2个片段(较长)作为两个AB句子,构成一条输入数据:

  • 0.5概率A-B两个句子连续,0.5概率随机选择B
  • A使用A embedding,B使用B embedding
  • A和B总长度最大为512 tokens

WordPiece Tokenization 后再mask掉15%的词汇。

训练参数

  • batch_size:256。每条数据长度:512
  • 100万步,40个epoch。语料合计33亿词汇
  • Adam :β1=0.9,β2=0.999
  • L2权值衰减为0.01。所有层的dropout为0.1
  • 学习率的warmup的step为10000
  • GELU激活函数
  • 训练loss:LM和NSP的loss加起来
  • BERT base 16个TPU,Large 64个TPU,训练4天


相关学习资料

CS224n


论文推荐

资源推荐

  • 第三方代码
 Google官方推荐的PyTorch BERB版本实现: pytorch-pretrained-BERT
 另一个Pytorch版本实现:Google AI 2018 BERT pytorch implementation BERT-pytorch
 Tensorflow版本: BERT-tensorflow
 BERT实战:多标签文本分类:sentiment_analysis_fine_grain
 BertViz-一个用于可视化 BERT's attention 层的工具

博客推荐

本分类目前不含有任何页面或媒体文件。