BERT(Bidirectional Encoder Representations from Transformers)是一个双向transformer编码器的言表示模型。来自论文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
。由Google公司的研发,BERT的出现使得我们能够在一个大的数据集上面训练好一个比较深的神经网络,简化了NLP任务的训练,又提升了它的性能,使得自然语言处理有了质的飞跃。
论文:Pre-training
of Deep
Bidirectional
Transformers for Language Understanding
地址:arxiv.org/abs/1810.04…
BERT全称:Bidirectional Encoder Representations from Transformers
源码:github.com/google-rese…
关键字:Pre-training(预训练)、Deep(深度)、Bidirectional(双向)
BERT的主要创新点都在pre-train方法上,即用了Masked LM和Next Sentence Prediction两种方法分别捕捉词语和句子级别的representation。
在海量语料的基础上通过前期的Pre-training,让其达到一定的语言表达;后期再通过少量的样本,比如文本分类(正向、负向、中性等情感类文本分类)再进行训练,就可以达到很好的效果。
BERT-base采用12层Encoder,层数更深。它使用更强大的机器训练更大规模的数据,使BERT的结果达到了全新的高度,并且Google开源了训练好的多语言BERT模型代码,用户可以直接使用BERT作为Word2Vec的转换矩阵并高效的将其应用到自己的任务中。
通过MLM(masked language model) 任务实现上下文理解。
BERT极大的拓展了Transformers的应用,使其可以在更大的无标签的数据集上训练,其效果比有标签、更小数据集上训练的模型效果还要好。
模型
网络层数L, 隐藏层维度H, Attention多头个数A,总参数TP(Total Parameters)
Bert参数计算见'附:BERT可学习参数计算' 机器学习相关术语 few-shot learning(FSL 少样本学习) zero-shot learning(ZSL 零样本学习) Meta learning(学习其它机器学习任务输出的机器学习算法)
标注数据是AI模型训练里最艰难的工作。NLP的标注更是需要投入大量的人力,文本标注因为没有标准答案比图像标注还要困难.而BERT在文本多分类的任务中,能在极小的数据下带来显著的分类准确率提升。有数据表示采用了BERT之后其效果显著提升。
BERT文本分类就是使用预训练的BERT模型来对文本进行分类,例如文本分类为新闻、科技、娱乐等类别。在这个过程中,BERT 模型可以自动学习到文本的语义信息,从而实现准确的分类。
网上教程:Bert Tutorial 文本分类指南
在深度学习应用中,研究者主要在三个粒度级别上研究情感分析:文档级、语句级和方面级。其中文档级情感分类是指为观点型文档标记整体的情感倾向或极性,即确定文档整体上传达的是积极的还是消极的观点。句子级别的情感分类是确定单个给定句子中表达的情感。而方面级因为情感始终具有目标其情感分类会同时考虑情感和目标信息。
网络好文 基于BERT的中文情感分析指南
命名实体识别(NER 也称为实体识别、实体分块 或 实体提取)是信息提取的一个子任务,旨在将文本中的命名实体定位并分类为预先定义的类别,如人员、组织、位置、时间表达式、数量、货币值、百分比等。而一个命名实体就是一个词语或是一个短语,它能够清晰地将一个物体和与他有相似属性的物体区分开来 (来自基于深度学习的NER综述)。
网络好文 中文命名实体指南
在基于BERT的机器翻译模型中,通常采用编码器-解码器结构。编码器负责将源语言句子编码成一系列的隐藏表示,而解码器则将这些隐藏表示解码成目标语言句子。BERT作为编码器的一部分,能够为解码器提供更加丰富的语义信息,从而提升翻译质量。
网络好文 INCORPORATING BERT INTO NEURAL MACHINE TRANSLATION
BERT是一个预训练的语言表征模型,不再像以往的模型采用传统的单向语言模型或者把两个单向语言模型进行浅层拼接的方法进行预训练,而是采用新的masked language model(MLM) ,以生成深度的双向语言表征。
BERT模型是一个两阶段模型,第一阶段 pre-training,第二阶段 fine-tuning。即预训练和微调。
预训练阶段模型有两个任务,即Masked Language Model (简称MLM) 和Next Sentence Prediction (简称NSP)。
只需要添加一个额外的输出层进行fine-tune,就可以在各种各样的下游任务中取得state-of-the-art的表现。在这过程中并不需要对BERT进行任务特定的结构修改。
除了输出层之外
[CLS]和[SEP] 用于表示句子的开始和结束,或者在处理多个句子时进行分隔 BERT的主要特征是,对于不同的任务都有一个统一的模型结构,是一个泛化能力较强的预训练模型。
在机器学习中,最常见的是有监督学习,即通过人工对数据进行标注,然后在提供输入x 和 标签y^的情况下,对模型进行训练,让模型输出y
尽可能与标签y^一致。
自监督不需要人工标注,通过将数据处理成两部分,一部分作为输入x一部分作为标签X,然后使用这组数据对模型进行训练,让模型输出y尽可能与标签一致。由于自监督不需要大量的人工标注,因此能够极大的降低模型训练成本。BERT的大规模预训练就是基于自监督学习。
图示说明
在每一个训练序列中以15%的概率随机地选中某个token进行MASK,当一个token被选中后,有以下三种处理方式(my dog is hairy 为例):
然后在对该位置的MASK进行预测: 主要是对80%被掩码的数据进行预测,预测被掩码的位置上的数据,如果预测错了,计算损失进行反向传播。
上述操作方法主要是要解决BERT的两个缺点:
[MASK]
标记不会出现,它只出现在预训练任务中。这就造成了预训练和微调之间的不匹配,微调不出现[MASK]
这个标记,模型好像就没有了着力点、不知从哪入手。所以只将80%的替换为[MASK]
,但这也只是缓解、不能解决。除了masked的自监督的构建方式,对于每一个训练样例又以另外一种方式(NSP)进行预测,主要原理:
这就意味着50%的样本是正例,50%的样本是负例,接下来把训练样例输入到BERT模型中,用[CLS]对应的信息去进行二分类:
预测当前句子是否有Next sentence的关系,是否是前后句。
假定1代表是一句话,0代表不是一句话。那么:如果概率>0.5,表不变,标签为0;概率 <0.5,表变化,标签为1
经过上面两个任务的处理,训练数据如下所示(为了方便浏览,制作成表格样式):
两个任务共享Bert,使用不同的输出层,做Muti-Task
示例 | 图示 |
---|---|
Input1=[CLS] 我今天要[MASK] 课 [SEP] ,上完[MASK] 给你打 电话[SEP] Label1 =IsNext Input2= [CLS] 大模型MASK] 技术发展很快[SEP] ,晚 [MASK] 吃什么[SEP] Label2=NotNext 符号说明:句首符号:CLS, 句尾符号:SEP, MASK:掩盖(码) | ![]() |
Bert可以看作Transformer的encoder部分,Bert模型舍弃了GPT的attention mask。双向主要体现在Bert的预训练任务一:遮蔽语言模型(MLM)。如:
我 [MASK] 学 习 英 语。
这句话输入到模型中,[MASK]通过attention均结合了左右上下文的信息,这体现了双向。
attention是双向的, 只是GPT通过attention mask达到单向,即让[MASK]看不到 学 习 英 语这四个字,只看到上文 我 喜 欢 。
语言模型预训练可以改善许多NLP任务,这些任务包括:
在使用预训练模型做特征表示的时候,一般有两类策略
来自李沐老师关于BERT论文精读的内容。
BERT模型可学习参数来自词嵌入层和Transformer块
嵌入层 就是一个矩阵,输入是字典的大小(这城假设是30k),输出是隐藏单元的个数(这里假设是H)
transformer块有两部分:
该段来自哪忘了,反正我感觉蛮好的,总结的不错,加在附录里,偶尔看看。利于学习。
【参考】
阅读量:71
点赞量:0
收藏量:0