带你熟悉NLP预训练模型:BERT
内容提要
本文介绍了BERT预训练模型的原理和应用,通过联合左右上下文预训练深度双向表示模型,可用于广泛任务。BERT的输入经过分词和嵌入层处理,通过Encoder Layer堆叠。输出包括pooler output和sequence output,适用于句子级和词级任务。预训练任务包括MLM和NSP。下游任务中可使用少量标注数据微调BERT。
延伸解读
双向上下文为何关键
文章指出,GPT等单向语言模型从左到右处理,每个token只能关注前一个token,这对句子级任务影响不大,但对词级任务(如问答)很致命。BERT通过联合左右上下文预训练深度双向表示,弥补了这一局限。读者可借此理解:需要细粒度词级理解的任务,双向信息往往比单向更有效。
输入表示的三重编码
BERT的输入并非简单分词,而是将token ids、position ids和token type ids三部分分别嵌入后组合。position ids让模型感知词序,token type ids用于区分句子对中的不同句子。这种设计使BERT能统一处理单句和句子对任务,读者在理解BERT输入时需注意这三类信息的协同作用。
输出选择取决于任务粒度
BERT对每个位置输出hidden size向量。句子级任务(如垃圾邮件分类)取[CLS]经线性层和tanh得到的pooler output;词级任务(如词性标注)则取每个有实际意义token的sequence output。读者应根据任务需要选择不同输出,而非固定使用某一层。
预训练任务与微调策略
MLM随机遮盖15%的token并预测,其中80%替换为[MASK]、10%替换为随机词、10%保持不变,以缩小预训练与推理的差异;NSP判断两句是否连续。下游任务中,用少量标注数据微调全部参数,额外输出层从头训练。这解释了BERT为何能以较小标注成本适配广泛任务。
Q&A
BERT模型和ELMo、GPT有什么区别?
BERT结合了ELMo和GPT的优势:相比ELMo,BERT仅需改动最后的输出层即可微调,而非改变模型架构;相比GPT,BERT在处理词元表示时考虑双向上下文信息,能更好地捕捉句子级和语境信息。
BERT的输入是如何处理的?
BERT输入处理分两步:首先进行分词,在句子首尾添加[CLS]和[SEP]特殊字符,并转换为数字id;然后进行嵌入,将token ids、position ids和token type ids三种信息分别输入Embedding层。
BERT的模型架构是怎样的?
BERT由Transformer的Encoder层堆叠而成,每个Encoder层包含自注意力层和前馈神经网络,中间通过残差连接和LayerNorm连接。BERT有两种规模:BERT BASE(110M参数)和BERT LARGE(340M参数)。
BERT的输出如何用于不同下游任务?
BERT对每个位置输出hidden size向量。对于句子级任务(如垃圾邮件分类),使用[CLS] token经过Bert Pooler后的pooler output;对于词级任务(如词性标注),使用每个token对应的sequence output。
BERT预训练任务MLM和NSP分别是什么?
MLM(Masked Language Modelling)随机遮盖输入中15%的token并预测被遮盖的词,捕捉词语级信息;NSP(Next Sentence Prediction)判断两个句子是否为上下文关系,捕捉句子级信息。
BERT微调时需要大量标注数据吗?
不需要。在下游任务中,BERT使用少量标注数据对预训练Transformer编码器的所有参数进行微调,额外的输出层从头开始训练。