BERT 模型架构

BERT 是 Bidirectional Encoder Representations from Transformers 的缩写,是由 Google 发布的先进的嵌入模型,BERT 是自然语言处理领域的一个重大突破,它在许多自然语言处理任务中取得了突出的成果,比如问答任务、文本生成、句子分类等。BERT 之所以能够成功,主要是因为它是基于上下文的嵌入模型,不同于像 word2vec 等其他一些流行的嵌入模型。

从 BERT 的含义来看,它使用多个 Transformer 表示,而且是基于双向 Encoder 的,我们要知道 BERT 的架构是只包含 Encoder 的 Transformer 模型架构。

BERT 模型配置

BERT 在发布模型的时候,给出了多种不同的配置,其中两种标准的配置为 BERT-base 和 BERT-large,另外还有一些小型的配置,如下表所示:

BERT 模型配置 Encoder 层数(L) 注意力头个数(A) FFN 层隐藏神经元个数(H)
BERT-base 12 12 768
BERT-large 24 16 1024
BERT-tiny 2 128
BERT-mini 4 256
BERT-small 4 512
BERT-medium 8 512

BERT-base 模型的网络参数总数可达 1.1 亿个,而 BERT-large 模型的网络参数总数可达 3.4 亿个。标准的 BERT 模型配置BERT-base 和 BERT-large 可以得到更准确的结果,且应用更为广泛,其他的可以用来做测试或研究使用。

BERT 预训练和微调

对于一个新任务,我们不再使用随机的权重来初始化模型,而是用已经训练过的模型的权重来初始化(预训练过的模型)。也就是说,由于模型已经在一个大型数据集上训练过了,因此我们不用为一个新任务从头开始训练模型,而是使用预训练的模型,并根据新任务调整(微调)其权重。所以说,这也是一种类型的迁移学习。

如下图所示,是 BERT 预训练与微调过程的概览图(来自论文《BERT: Pre-training of Deep Bidirectional Transformers forLanguage Understanding》):
BERT-Pre-training-Fine-tuning

BERT 模型预训练

BERT 的输入数据转换为对应的 Embedding,包括 Token Embeddings、Segment Embeddings、Position Embeddings 这三种转换,假设原始输入的英文句子为:
my dog is cute, he likes playing.

转换过程如下图所示:
BERT-Input-Representation

Token Embeddings 就是在句子中插入 Token,上面包括在句子开头插入 [CLS],表示用于分类任务;在每个句子结束插入 [SEP],表示句子结束。
Segment Embeddings 就是通过使用标记 E 来表示输入句子分为两个段,进行分词后,属于第一个句子的词标记成 A 段,属于第二个句子的词标记成 B 段。
Position Embeddings 就是标记上位置信息,因为 BERT 使用 Transformer 架构,所以没有使用任何循环机制,而且是以并行方式处理所有词,所以需要加入词的位置信息,这个比较容易理解。

分别将输入转换为 Token Embeddings、Segment Embeddings、Position Embeddings 后,需要将这三个 Embeddings 相加后作为 BERT 的输入,也就是输入到 Transformer 架构的 Encoder 层进行预训练过程。

从上图中我们可以看到,BERT 模型在两种自然语言处理任务上进行预训练:掩码语言模型构建(Masked Language Model,MLM 或 Masked LM)、下句预测(Next Sentence Prediction,NSP)。语言模型分为自动回归式语言模型和自动编码式语言模型这两类,而 BERT 使用的是自动编码式语言模型,它从两个方向阅读句子,然后进行预测。

语言模型构建任务,是指通过训练模型来预测一连串单词的下一个单词。在掩码语言模型构建任务中,给定一个输入句,我们随机掩盖其中一部分词,使用 [MASK] 标记来掩盖住对应的词,并通过训练模型来预测被掩盖的单词。为了预测被掩盖的词,模型从两个方向阅读该句并进行预测。掩码语言模型构建任务也被称为完形填空任务。

下句预测(NSP)是一个用于训练 BERT 模型的策略,它是一个二分类任务。在下句预测任务中,我们向 BERT 模型提供两个句子,它必须预测第二个句子是否是第一个句子的下一句。通过执行下句预测任务,BERT 模型可以理解两个句子之间的关系。这在许多应用场景中是有用的,比如问答场景和文本生成场景。为了判别两种句子中其中一个是否是另一个的下一个句子,需要将 [CLS] 标记的特征值通过 Softmax 激活函数将其送入前馈网络层,然后返回句子对分别是 isNext 和 notNext 的概率,这样就得到了二分类的结果,能够完成下句预测。

BERT 模型微调

BERT 模型的预训练需要做大量的处理和调优工作,才得到最终的 BERT 模型。而模型微调就比较直接,而且容易多了,只需要基于上面预训练得到的 BERT 模型,在基础上根据下游任务的需要进行参数更新调整,验证微调后的模型能支持特定的任务,比如问答任务、文本分类任务、命名实体识别任务等等。

参考资料

Creative Commons License

本文基于署名-非商业性使用-相同方式共享 4.0许可协议发布,欢迎转载、使用、重新发布,但务必保留文章署名时延军(包含链接:http://shiyanjun.cn),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>