一文读懂BERT模型(理论篇)

BERT模型理论解读

序言

BERT(Bidirectional Encoder Representations from Transformers)是一个语言表达模型(language representation model)。在《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》一文中提出,它是Transformer模型中的encoder部分,通过Pre-training和Fine-Tuning两个步骤能够实现问题回答、语言推理等任务,有效的提升了自然语言处理任务。

Embedding

针对输入的自然语言序列,需要进行数据的预处理操作,其中包括Token、Segment和Position层,经过这三层预处理,输入模型的自然语言序列将成为含有自身编码信息、单词所属句子编码信息和单词位置编码信息的词向量序列。
Embedding

  • Token Embeddins层主要是对输入自然语言序列进行分词处理及词向量嵌入,例如:输入"my dog is cute, he likes playing",经过Token Embeddings层处理后输出对应的词向量序列[Emy,Edog,Eis,Ecute,Ehe,Elikes,Eplaying]
  • Seqment Embeddings层主要是标记词向量序列中的每个单词属于那一句话,针对部分任务,需要多个句子作为词向量的输入(如:QA任务),而通过词向量映射获取的词向量序列中并不包含这个信息,所以我们需要将这类信息同样编码成和输入序列对应维度的词向量序列[EA,EA,EA,EA,EB,EB,EB],加入输入的词向量序列中,其中:EA表示第一句话,EB表示第二句话
  • Position Embedding层加入的是句子中每个单词的位置信息,在句子中不同位置的单词可能具有不同的表达意思,因此,我们需要将每个单词的位置信息映射成和输入序列对应维度的词向量序列[E1,E2,E3,E4,E5,E6,E7],加入词向量序列中

图中的输入序列加入了特殊字符[CLS]和[SEP]。其中,[CLS]字符加在输入序列的开始位置,经过模型训练后的[CLS]词向量包含了句子中的所有信息,部分分类任务,只需要将其作为最终的输出结果,[SEP]字符加在两个句子之间,作为两个句子的分隔符

经过Embedding层的处理,我们将输入的自然语句转换成了包含其自身含义、所属句子关系及单词在句子中位置信息的词向量序列。

Pre-training和Fine-tuning

BERT模型框架中包含了Pre-traning和Fine-tuning两个部分,即预训练和微调。其中,预训练是让模型在大量的、未标记的数据上进行预训练,获取训练好的模型参数,微调则是使用预先训练的参数初始化BERT,然后根据实际的任务需要调整下游任务,使用有标记的数据对模型参数进行微调。
Pre-training和Fine-tuning

Pre-training

和传统的从左到右或从右到左的语言训练模型不同,BERT模型的预训练使用了深层双向训练法,使其在未标记数据上进行无监督训练。BERT模型的训练引入了Masked LM和Next Sentence Prediction (NSP)机制

(一) Masked LM机制

为了让其能够在未标记的数据上进行无监督的训练,BERT模型随机的屏蔽掉输入模型序列15%的单词,然后让模型预测那些被屏蔽掉的单词。
Masked LM机制
由于预训练时采用的[mask]标签代替部分输入序列,但是在Fine-tuning任务中没有对应的[mask]标签,为了解决预训练和微调之间不匹配的问题,在随机屏蔽输入序列时,10%的单词会被替换成其它单词,另外10%的单词不被替换,剩下80%的单词才会被替换成[mask]标签。

(二) Next Sentence Prediction (NSP)机制

由于许多自然语言的处理任务,如问答(QA)和自然语言推理(NLI),都是基于理解两个句子之间的关系,而仅仅在单词层上进行预训练的模型不能学习到这些关系,所以,BERT模型引入了Next Sentence Prediction (NSP)机制,选取A和B两个句子作为模型的输入,其中50%的B是A后实际的下一个句子(标记为IsNext),另外50%的B则是从语料库中随机选取的句子(标记为NotNext),通过模型去预测B是否是A后的实际句子,即A与B之间是否相连。

Fine-tuning

我们可以根据实际的问题对BERT模型进行微调,微调操作相对比较简单,只需要针对实际需求,对下游任务建模,就可以将预训练的模型运用在各种自然语言处理的问题中。值得注意的是:在预训练中输入模型的是无标签数据,而在微调过程中,输入模型的则是有标签数据。
BERT下游任务
( a )、( b ) 中主要展现的是文本分类任务,通过获取到BERT模型输出的[CLS]向量(该向量具有整句话中所有的信息),传入全连接层进行文本分类

( c ) 中展现的是SQuAD任务,A表示问题,D表示文章,即在文章中通过训练开始词和停止词的位置寻找输入问题的答案

( d ) 中展现的是NER任务,即多标签文本分类任务

总结

BERT模型使用了Transformer模型中encoder学习词在给定上下文中的词向量表示,是一个深层双向的语言训练模型,核心架构包括Pre-training和Fine-Tuning两个部分,其中,官方已经在许多大型语料库中进行了预训练,在实际使用过程中,仅仅只需要根据实际需求简单的微调便可以解决文本分类、QA问答和多标签分类等自然语言处理的相关任务。

BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer架构的预训练语言模型,由Google在2018年提出[^1]。BERT的主要创新之处在于引入了双向上下文信息,通过同时考虑左右两个方向的上下文,使得模型能够更好地理解语言的语境和含义。 BERT模型的训练过程包括两个阶段:预训练和微调。在预训练阶段,BERT模型使用大规模的无标签文本数据进行训练,通过预测遮蔽词(Masked Language Model,MLM)和下一句预测(Next Sentence Prediction,NSP)任务来学习语言的表示。具体来说,BERT模型通过随机遮蔽输入文本中的一些词,并预测这些被遮蔽的词是什么,从而学习词的上下文表示。同时,BERT模型还通过判断两个句子是否是连续的来学习句子级别的表示。 在微调阶段,BERT模型使用有标签的任务特定数据进行微调,例如文本分类、命名实体识别等。通过在特定任务上进行微调,BERT模型可以将预训练得到的通用语言表示适应到具体任务上,从而提升模型在各种自然语言处理任务上的性能。 DistilBERT是一种基于BERT模型的知识蒸馏方法,旨在通过压缩和提炼BERT模型的知识,来获得一个更轻量级、更高效的模型。DistilBERT通过在预训练阶段使用与BERT相同的训练目标,但使用更小的模型结构和更短的训练时间来训练模型。然后,通过将BERT模型的知识转移到DistilBERT模型中,可以在保持相对较高性能的同时,减少模型的大小和计算资源的消耗。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值