分类:Bert相关材料
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后面接上特定任务的分类器。
2.输入与输出
3.三种规模
- BERTBASE :L=12,H=768,A=12。总参数为110M。和GPT一样
- BERTLARGE :L=24,H=1024,A=16。总参数为340M。最优模型
单个位置的输入
每个位置输入三个部分相加而成:
- wordpiece-token向量
- 位置向量:512个。训练
- 段向量:sentence A B两个向量。训练
一些符号:
- CLS:special classification embedding,用于分类的向量,会聚集所有的分类信息
- SEP:输入是QA或2个句子时,需添加SEP标记以示区别
- EA和EB:输入是QA或2个句子时,标记的sentence向量。如只有一个句子,则是sentence A向量
预训练语言模型
单向语言模型的能力很差,单独训练两个方向的语言模型再把结果拼接起来也不好。那么怎么才能训练一个真正的双向语言模型呢?如何让一个单词is conditioned on both left and right context呢?答案就是Masked Language Model
Masked LM
在进行WordPiece之后,随机掩盖一些(15%)词汇,再去预测这些词汇。
但有两个缺点
缺点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后面的句子。这样,就能从大规模预料中学习到一些句间关系。
模型最终能达到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
- 课程主页:Stanford Winter cs224n
- 课程视频:YouTube
- 课程笔记: LooperXX/CS224n-2019
- 国内视频资源:CS224n 斯坦福深度自然语言处理课
论文推荐
- 论文原文: BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
- 相关论文合集: https://github.com/tomohideshibata/BERT-related-papers%23domain-specific
资源推荐
- 第三方代码
Google官方推荐的PyTorch BERB版本实现: pytorch-pretrained-BERT 另一个Pytorch版本实现:Google AI 2018 BERT pytorch implementationBERT-pytorch Tensorflow版本: BERT-tensorflow BERT实战:多标签文本分类:sentiment_analysis_fine_grain BertViz-一个用于可视化 BERT's attention 层的工具
博客推荐
本分类目前不含有任何页面或媒体文件。