逐步进入BERT

逐步进入BERT

BERT , 代表 双向编码器表示来自 变形金刚 . BERT 由两部分组成: 预训练和微调 G。 BERT 旨在通过联合调节所有层的左右上下文,从未标记的文本中预训练深度双向表示。然后,只需一个额外的输出层就可以对预训练的 BERT 模型进行微调,从而为各种任务创建最先进的模型。 BERT 的一个显着特点是其跨不同任务的统一架构,例如名称实体识别、句子分类和问答。

除了输出层外,预训练和微调都使用相同的架构。相同的预训练模型参数用于为不同的下游任务初始化模型。在微调期间,所有参数都被微调。输入可以是一个句子(用于名称实体识别)或一对句子(用于问答)。在整个工作中,“句子”可以是连续文本的任意跨度,而不是实际的语言句子。 “序列”是指输入到 BERT 的标记序列,它可能是单个或两个打包在一起的句子。在每个输入之前,都会添加一个特殊符号 [CLS]。如果输入是一对,则在其间插入一个特殊的分隔符标记[SEP](例如,分隔问题/答案)。

Fig. 1. Overall structure of BERT: Pre-training and Fine-tuning

建筑学

BERT 是经过训练的 Transformer Encoder 堆栈。想了解Transformer编码器,请参考我之前的帖子: 一步一步进入变压器 .第一个输入标记带有一个特殊的 [CLS] 标记。这里的 CLS 代表分类。每个位置输出一个大小的向量 hidden_​​size (BERT 基地中有 768 个)。对于句子分类示例,我们只关注第一个位置的输出(我们传递了特殊的 [CLS] 标记)。

Fig. 3. BERT is a stack of Transformer Encoders.

就像转换器的编码器一样,BERT 将一系列单词作为输入,这些单词一直在堆栈中向上流动。每一层都应用自我注意,将其结果通过前馈网络传递,然后将其传递给下一个编码器。

Fig. 3. Architecture of Transformer Encoder.

输入表示

为了使 BERT 处理各种下游任务,输入表示能够在一个标记序列中明确表示单个句子和一对句子(例如,h Question、Answer)。它的输入表示是通过对相应的求和来为给定的令牌构造的 令牌嵌入、段嵌入和位置嵌入 .

Fig. 4. BERT input representation. The input embeddings are the sum of the token embeddings, the segmentation embeddings, and the position embeddings.

预训练

BERT 不使用传统的从左到右或从右到左的语言模型来预训练 BERT。相反,我们使用两个无监督任务预训练 BERT:Masked LM 和 Next sentence prediction。

任务 1:Masked LM(语言建模)

我们随机屏蔽一定百分比的输入标记,然后预测那些被屏蔽的标记。此过程称为“掩码 LM”(MLM)。 [MASK] 标记用于替换被屏蔽的单词。缺点是我们在预训练和微调之间造成了不匹配,因为 [MASK] 令牌在微调期间不会出现。为了缓解这种情况,我们并不总是用实际的 [MASK] 标记替换“掩码”单词。相反,我们保留随机抽样一些标记以用随机词替换或保持不变:

Fig. 4. Masking procedure in BERT marked language model.

任务 2:下一句预测 (NSP)

许多重要的下游任务都基于对两个句子之间关系的理解,例如问答 (QA) 和自然语言推理 (NLI),语言建模无法直接捕捉到这些关系。 BERT 为二值化下一句预测任务进行预训练。

为了生成每个训练输入序列,我们从语料库中抽取两段文本,我们将其称为“句子”,尽管它们通常比单个句子长得多(但也可以更短)。第一个句子接收 A 嵌入,第二个句子接收 B 嵌入。 50% 的时间 B 是 A 之后的实际下一个句子,而 50% 的时间是一个随机句子,用于“下一个句子预测”任务。训练损失是均值之和 掩蔽 LM 似然 和平均值 下一句预测可能性 .

微调

对于每个任务,我们将特定于任务的输入和输出插入 BERT 并端到端微调所有参数。在输入端,来自预训练的句子 A 和句子 B 类似于 (1) 释义中的句子对,(2) 蕴涵中的假设-前提对,(3) 问答中的问题-段落对,以及 (4)文本分类或序列标记中的退化文本-∅对。在输出端, 令牌表示被输入输出层 用于令牌级别的任务,例如序列标记或问答。这 [CLS] 表示被送入输出层进行分类 ,例如蕴涵或情感分析。

下图展示了如何为不同的任务适配相同的 BERT 模型:

Fig. 5. BERT is applied to different tasks in the fine-tuning stage such as sentence pair classification, single sentence classification, question answering, and single sentence tagging.

基准数据集包括:

MNLI : Multi-Genre Natural Language Inference 是一项大规模的众包蕴涵分类任务(Williams et al., 2018)。给定一对句子,目标是预测第二个句子相对于第一个句子是蕴涵、矛盾还是中性。

QQP : Quora Question Pairs 是一个二元分类任务,旨在确定 Quora 上提出的两个问题在语义上是否相同。

SST-2: 斯坦福情感树库是一个二元单句分类任务,由从电影评论中提取的句子和人类情感注释组成。

:斯坦福问答数据集 (SQuAD v1.1) 是 100k 众包问答对的集合。

CoNLL-2003: 命名实体识别 (NER) 任务。

下一步

我强烈建议阅读原始论文。您可以找到有关跨不同任务的设置和结果比较的更多详细信息:

BERT:用于语言理解的深度双向转换器的预训练

关于如何在各种任务上微调 BERT 的 TensorFlow 教程,也是如何使用 TPU 进行训练的一个很好的例子:

在 TPU 上使用 BERT 解决 GLUE 任务

预训练 BERT 模型的 Tensorflow 中心,可供下载和使用:

Tensorflow Hub BERT 集合

我希望这篇文章能让你轻松理解 BERT 并开始使用 BERT 来应对你的 NLP 挑战!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/7550/05550108

posted @ 2022-09-01 08:07  哈哈哈来了啊啊啊  阅读(40)  评论(0编辑  收藏  举报