带你熟悉NLP预训练模型:BERT

💡 原文中文,约2900字,阅读约需7分钟。
📝

内容提要

本文介绍了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编码器的所有参数进行微调,额外的输出层从头开始训练。

🏷️

标签

➡️

继续阅读