BERT模型的结构,特点和实践

一、背景介绍

BERT模型是在2018年被提出( Pre-training of Deep Bidirectional Transformers for Language Understanding),预训练领域的里程碑之作,在多项nlp任务上达到了state-of-art,也开启了预训练模型的新篇章。字面注解是关于语言理解的深度双向transformers的预训练模型。它可以学习文本的语义信息,通过向量形式的输出可以用于分类,语义相识度等任务。它是一种预训练语言模型,也就说,它自己已经在大规模预料上训练好的参数,我们在用的时候只需要在这个基础上训练更新参数。不像其他的语言模型,它是在无监督的预料上,在模型的每一层都会文本左右相关的信息进行训练,关于语言模型可参考第二部分。总的来说,你可以在加最后的额外一层,比如全连接进行分类或者更多的语言推理任务(问答等)

二、BERT与语言模型

语言模型被用来学习文本句子的语义信息具体通过一些文本转化成数学表达比如经典的词向量Wordvec等表示,由于其被认为可以获得部分语义信息,改进了很多的nlp处理任务的效果。 包括句子级的任务例如句子推断,句子间的关系,也可以字符级别的任务比如实体识别。现有的技术将语言表示模型用于下游任务的手段: feature-based和fine-tuning。这两种方法都共享了同样的目标函数在预训练阶段,都用单向的语言模型来学习常规语言表示。

1.feature-based

feature-based只变化了最后一层的参数。通常feature-based方法包括两步:(1)首先在大的语料A上无监督地训练语言模型,训练完毕得到语言模型然后构造task-specific model例如序列标注模型。(2)采用有标记的语料B来有监督地训练task-sepcific model,将语言模型的参数固定,语料B的训练数据经过语言模型得到LM embedding,作为task-specific model的额外特征ELMo是这方面的典型工作

2.fine-tuning

Fine-tuning方式是指在已经训练好的语言模型的基础上,加入少量的task-specific parameters, 例如对于分类问题在语言模型基础上加一层softmax网络,然后在新的语料上重新训练来进行fine-tune。除了最后一层,所有的参数都变化了。GPT的训练方式即采用这种(图1),
  图1

图 1 Transformer LM + fine-tuning模型示意图

首先语言模型采用了Transformer Decoder的方法来训练,采用文本预测作为语言模型训练任务,完成训练后,加一层Linear Project来完成分类/相似度计算等NLP任务。因此总结来说,LM + Fine-Tuning的方法工作也包括两步:
构造语言模型,采用大的语料A来训练语言模型

(1)在语言模型基础上增加少量神经网络层来完成specific task例如序列标注、分类等,

(2)然后采用有标记的语料B来有监督地训练模型,这个过程中语言模型的参数并不固定,依然是trainable variables.

3.BERT的语言模型

现有的方法不足以表现出语言表示的全部威力,限制是因为标准语言模型都是没有方向的,例如在OpenAI GPT中,作者用了一个从左到右的结构,通过前k-1个词预测第k个词,从前往后,不断前进,属于单向的预测,这中做法在一些用到与文本双向有关信息理解的时候,不一定最优。BERT改进了这一点,预训练阶段用到:遮蔽语言模型MLM。这可以用到文本的左右的相关信息,训练出一个双向transformer模型。除了双向语言模型之外BERT用到了"预测下一句" 任务句子间联合训练文本对的表示。BERT论文采用了LM + fine-tuning的方法,同时也讨论了BERT + task-specific model的方法。

三、BERT整体概览

1. BERT框架

BERT整体框架包含pre-train和fine-tune两个阶段。pre-train阶段模型是在无标注的标签数据上进行训练,fine-tune阶段,BERT模型首先是被pre-train模型参数初始化,然后所有的参数会用下游的有标注的数据进行训练。

两个阶段

图 2 BERT框架

2. BERT模型结构

BERT的模型结构是一个多层的双向transformer结构的encoder部分。首先来看看BERT输入长什么样子,然后讨论这样的输入训练什么样的模型任务。

2.1输入部分

BERT的输入的编码向量(长度是512)是3个嵌入特征的单位和(图3)。

(1) WordPiece 嵌入 [6]:WordPiece是指将单词划分成一组有限的公共子词单元,能在单词的有效性和字符的灵活性之间取得一个折中的平衡。例如图4的示例中‘playing’被拆分成了‘play’和‘ing’;
(2)位置嵌入(Position Embedding):位置嵌入是指将单词的位置信息编码成特征向量,位置嵌入是向模型中引入单词位置关系的至关重要的一环。位置嵌入的具体内容参考我之前的分析;
(3)分割嵌入(Segment Embedding):用于区分两个句子,例如B是否是A的下文(对话场景,问答场景等)。对于句子对,第一个句子的特征值是0,第二个句子的特征值是1。

在这里插入图片描述

图 3 BERT输入部分
2.2 BERT的预训练任务

BERT预训练是采用多任务的方式,包括遮蔽语言模型(MLM)和下一个句子预测(NSP)。

任务1:Masked Language Model(MLM)

Masked Language Model(MLM),所谓MLM是指在训练的时候随即从输入预料上mask掉一些单词,然后通过的上下文预测该单词,该任务非常像我们在中学时期经常做的完形填空。正如传统的语言模型算法和RNN匹配那样,MLM的这个性质和Transformer的结构是非常匹配的。在BERT的实验中,15%的WordPiece Token会被随机Mask掉。在训练模型时,一个句子会被多次喂到模型中用于参数学习,但是Google并没有在每次都mask掉这些单词,而是在确定要Mask掉的单词之后,80%的时候会直接替换为[Mask],10%的时候将其替换为其它任意单词,10%的时候会保留原始Token。

80%:my dog is hairy -> my dog is [mask]
10%:my dog is hairy -> my dog is apple
10%:my dog is hairy -> my dog is hairy

这么做的原因是如果句子中的某个Token100%都会被mask掉,那么在fine-tuning的时候模型就会有一些没有见过的单词。加入随机Token的原因是因为Transformer要保持对每个输入token的分布式表征,否则模型就会记住这个[mask]是token ’hairy‘。至于单词带来的负面影响,因为一个单词被随机替换掉的概率只有15%*10% =1.5%,这个负面影响其实是可以忽略不计的。
另外文章指出每次只预测15%的单词,因此模型收敛的比较慢。

任务2:Next Sentence Prediction(NSP)

Next Sentence Prediction(NSP)的任务是判断句子B是否是句子A的下文。如果是的话输出’IsNext‘,否则输出’NotNext‘。训练数据的生成方式是从平行语料中随机抽取的连续两句话,其中50%保留抽取的两句话,它们符合IsNext关系,另外50%的第二句话是随机从预料中提取的,它们的关系是NotNext的。这个关系保存在图4中的[CLS]符号中。

3. 训练:fine-tune

在海量单预料上训练完BERT之后,便可以将其应用到NLP的各个任务中了。对于NSP任务来说,其条件概率表示为 P = s o f t m a x ( C W T ) P=softmax(CW^T) P=softmax(CWT),其中 C 是BERT输出中的[CLS]符号, W是可学习的权值矩阵。

对于其它任务来说,我们也可以根据BERT的输出信息作出对应的预测。图5展示了BERT在11个不同任务中的模型,它们只需要在BERT的基础上再添加一个输出层便可以完成对特定任务的微调。这些任务类似于我们做过的文科试卷,其中有选择题,简答题等等。下图中4其中Tok表示不同的Token, E表示嵌入向量, 表示第 T i T_i Ti个Token在经过BERT处理之后得到的特征向量。

在这里插入图片描述

图 4 BERT在不同任务上的fine-tune示意图

微调的任务,这里以(a)和(d)举例说明:

(a)基于句子对的分类任务:
MNLI:给定一个前提 (Premise) ,根据这个前提去推断假设 (Hypothesis) 与前提的关系。该任务的关系分为三种,蕴含关系 (Entailment)、矛盾关系 (Contradiction) 以及中立关系 (Neutral)。所以这个问题本质上是一个分类问题,我们需要做的是去发掘前提和假设这两个句子对之间的交互信息。
QQP:基于Quora,判断 Quora 上的两个问题句是否表示的是一样的意思。
QNLI:用于判断文本是否包含问题的答案,类似于我们做阅读理解定位问题所在的段落。
STS-B:预测两个句子的相似性,包括5个级别。
MRPC:也是判断两个句子是否是等价的。
RTE:类似于MNLI,但是只是对蕴含关系的二分类判断,而且数据集更小。
SWAG:从四个句子中选择为可能为前句下文的那个。

(d)命名实体识别
CoNLL-2003 NER:判断一个句子中的单词是不是Person,Organization,Location,Miscellaneous或者other(无命名实体)。微调CoNLL-2003 NER时将整个句子作为输入,在每个时间片输出一个概率,并通过softmax得到这个Token的实体类别。

四、总结

BERT很受欢迎不是没有原因的,使用Transformer的结构将已经走向瓶颈期的Word2Vec带向了一个新的方向,11个NLP任务的精度大幅提升足以震惊整个深度学习领域;BERT算法还有很大的优化空间,包括依靠位置嵌入和预训练任务MLM这种方式都有其优化空间,以及其参数设置。BERT的训练在目前的计算资源下很难完成,论文中说训练需要在64块TPU芯片上训练4天完成,而一块TPU的速度约是目前主流GPU的7-8倍。预训练模型开源也发展原来越成熟,比如Hugging Face提供了各种预训练语言模型,在第五部分中给出链接,有的既有tensorflow也有pytorch版本,关于hugging face怎么用实际操作已经有很多资料了,官网例子也很详细,配置环境处理好输入输出,直接可以下载拿fine-tune用于咱们的下游任务。

五、相关资料

(1)BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
https://arxiv.org/pdf/1810.04805.pdf
(2)Transformer:Attention Is All You Need
https://arxiv.org/abs/1706.03762
(3)Hugging Face,https://huggingface.co/
https://github.com/huggingface/

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值