
BERT有两部分:pre-training和fine-tuning。在pre-training阶段,会在没有标注数据且不同预训练任务上训练模型;在fine-tuning阶段,BERT会根据预训练模型的参数初始化,然后在下游任务的标注数据进行fine-tuned。
BERT是一个多层双向的transformer encoder模型。是的,BERT中的transformer只有encoder,没有decoder!!!
BERT模型中使用的是WordPiece embeddings,最后一层隐藏层的向量会作为每个token的表示。另外,有3个特殊字符如下:
还需要说明的是,BERT模型中sentence并不是语义层面的句子,可以是连续的文本。sequence指的是token 序列,可以是单个sentence也可以是合在一起的 two sentences。
相比之前的预训练模型,BERT在预训练阶段做了两个无监督任务:MLM(masked LM)和next sentence prediction(NSP)。
通过源码能看到:
我没明白为什么传统模型无法双向训练,而用masked LM可以解决双向训练的问题:
某 文章 的解释是:
masked LM的做法:
在masked LM任务中只会预测masked token,其他token不做预测。
有一些任务比如问答(QA)和自然语言推理(NLI)都是对两句话关系的理解,但是语言模型无法捕捉这种信息。为了让训练的模型能获取句子之间的关系,在预训练的时候多加了一个二值化的NSP任务。具体做法:
对这部分我的疑问是:
原文中不理解的地方:
写这篇文章的起因是看ALBERT的时候,对其中参数因式分解,减少参数的方式不理解,后来通过原码来了解原理。后来想到虽然平时基于bert的nlp任务做的挺多的,但对原理还是一知半解的,所以在此记录。后续有时间的话,将常见的,看过的论文做个总结,不然容易忘记。(attention is all your need,bert,albert,roberta,sentence -bert,simcse,consert,simbert,nezha,ernie,spanbert,gpt,xlnet,tinybert,distillbert)
从图一可以明显看出,bert主要分为三块。embedding层,encoder层,以及pooler层,本章为embedding层的原码分析。
可以看出,输入的input,会先经过tokernizer,会补上cls,sep等特殊字符。然后embedding层会获取句子的token embeddings+segment embeddings+position embeddings作为最终的句子embedding。
1 token embedding:
token embedding有两种初始化方式。如果是训练预训练,随机出初始化一个30522768的lookup table(根据wordpiece算法,英文一共有30522个sub-word就可以代表所有词汇,每个sub-word 768纬)。如果是在预训练模型的基础上finetune,读取预训练模型训练好的lookup table。假设输入的句子经过tokernized长度为16。经过lookup table就是16768维的句子表示。
2 position embedding:
position embedding的lookup table 大小512768,说明bert最长处理长度为512的句子。长于512有几种截断获取的方式。position embedding的生成方式有两种:1 根据公式直接生成 2 根据反向传播计算梯度更新。其中,transformer使用公式直接生成,公式为:
其中,pos指的是这个word在这个句子中的位置;2i指的是embedding词向量的偶数维度,2i+1指的是embedding词向量的奇数维度。为什么这个公式能代表单词在句子中的位置信息呢?因为位置编码基于不同位置添加了正弦波,对于每个维度,波的频率和偏移都有不同。也就是说对于序列中不同位置的单词,对应不同的正余弦波,可以认为他们有相对关系。优点在于减少计算量了,只需要一次初始化不需要后续更新。
其中, bert使用的是根据反向传播计算梯度更新。
3 segment embedding:
bert输入可以为两句话。[cls][seq][seq]。每句话结尾以seq分割。从embedding的大小可以看出,lookup table由两个768组成,对应第一句和第二句。该参数也由训练得到。
4 LN以及dropout:
embeddings = dropout(layernorm(token embeddings+segment embeddings+position embeddings))。Normalization 有很多种,但是它们都有一个共同的目的,那就是把输入转化成均值为 0 方差为1的数据。我们在把数据送入激活函数之前进行normalization(归一化),因为我们不希望输入数据落在激活函数的饱和区,发生梯度消失的问题,使得我们的模型训练变得困难。这里不使用bn可以去除batch size对模型的影响。
下一篇为bert核心encoder模块的解析。
数据准备:
New_HOI
New_verb
New_object
Paper reading:
Title: VideoBERT: A Joint Model for Videoand Language Representation Learning
Author: Chen Sun, Austin Myers, CarlVondrick, Kevin Murphy, and Cordelia Schmid
摘要:
Self-supervised learning has becomeincreasingly important to leverage the abundance of unlabeled data available on platforms likeYouTube Whereas most existing approaches learn low-level representations, wepropose a joint visual-linguistic model to learn high-level features withoutany explicit supervision In particular, inspired by its recent success inlanguage modeling, we build upon the BERT model to learn bidirectional jointdistributions over sequences of visual and linguistic tokens, derived fromvector quantization of video data and off-the-shelf speech recognition outputs,respectively We use VideoBERT in numerous tasks, including actionclassification and video captioning We show that it can be applied directly toopenvocabulary classification, and confirm that large amounts of training dataand cross-modal information are critical to performance Furthermore, weoutperform the state-of-theart on video captioning, and quantitative resultsverify that the model learns high-level semantic features
为了利用YouTube等平台上大量未标记的数据,自我监督学习变得越来越重要。现有的方法大多是学习低层表示,而我们提出了一种联合的视觉语言模型来学习高层特征,不需要任何明确的监督。特别是,受其最近在语言建模方面的成功启发,我们在BERT模型的基础上,学习了视觉和语言标记序列上的双向联合分布,它们分别来自视频数据的矢量量化和现成的语音识别输出。我们在许多任务中使用VideoBERT,包括动作分类和视频字幕。我们证明它可以直接应用于开放词汇表分类,并证实大量的训练数据和跨模式信息对性能至关重要。此外,我们在视频字幕方面的表现也超过了现有的技术水平,定量结果验证了该模型能够学习高级语义特征。
要点
摘要:
1 Youtube上存在大量的视频数据,没有标记,给自监督学习提供了大量的数据来源。(视频有语音)
2 目前存在的方法都是低层次的特征表示。本文提出的视频-语义联合模型在没有显式监督的情况下学习到了高层次的特征信息。
3 在BERT的基础上,学习视觉-语义的标记序列的双向联合分布,序列分别来自视频数据的向量量化,和现成的语音识别输出。
4 这个VideoBERT模型用于动作分类和视频字幕。
5 可以直接用于开放词汇表分类
6 实验证实了大量的训练数据和多模态对性能至关重要。数据越多效果越好,用了多模态比不是多模态的要好
7 VideoBERT在视频字幕任务上超过了state-of-the-art
8 定量结果验证了该模型能够学习高级语义特征。
Introduction:
1 深度学习可以从标记数据中学习到内容,但标记数据很难大规模获取。
2 这些方法大多侧重于低层次的特征(如纹理)和短时间尺度(如持续时间不超过一秒的运动模式)。
3 我们感兴趣的是发现高层次的语义特征,这些特征对应于在更长的时间尺度(如分钟)内展开的动作和事件,因为这样的表示对于各种视频理解任务是有用的。
4 特别地,我们提出了一种简单的方法来建模视觉域和语言域之间的关系,结合三种现成的方法:自动语音识别系统(ASR)将语音转换成文本;矢量量化(VQ)在低水平时空视觉特征中的应用以及最近提出的用于学习离散标记序列上联合分布的BERT模型。
5 我们可以执行 文本 - 视频 的预测,它可以用来自动演示一组指令(比如菜谱),如图1和图2的顶部示例所示。
6 我们还可以执行更传统的 视频 - 文本 的任务,即对[10]进行密集的视频字幕,如图6所示。
7 我们的视频字幕方法在YouCook II数据集上达到state-of-the-art
8 该模型可以在比其他深度生成模型更高的抽象级别上生成可信的猜测,它倾向于预测场景低层次方面的细微变化,比如少量对象的位置或姿态。
9 我们在这篇论文的主要贡献是一个简单的方法来学习 高层次的视频表示 ,捕获语义上有意义和长时间序列结构。
Related Work
1 有监督学习:有很多视频表征学习的方法利用已有大量的标记数据集训练卷积神经网络达到视频分类的目的。但是这些方法需要大量的数据;数据集涉及动词和名词范围很小;目前的方法被设计出来用于表示短的视频序列,典型的就只有几秒钟。
2 相比之下,提出的方法可以关注更长的时间序列;同时不需要利用手工标记
3 无监督学习:RNN,VAE-style loss, GAN-style loss, SV2P, SVGLP, SAVP, MoCoGAN 基于gan的方法。
4 我们与无监督学习的不同之处在于,我们使用BERT模型,没有任何显式的随机潜在变量,应用于从视频中导出的视觉标记。
5 我们的模型不是像素的生成模型,而是像素衍生出来的特征的生成模型
6 自监督学习: 避免学习的困难联合模型p (x1: T),它已成为流行的学习条件的模型形式p (xt + 1: T jx1: T) 我们的信号分割成两个或多个块,如灰度、颜色、或前一帧和下一个帧
7 我们的方法是类似的,除了我们使用 量化的视觉文字 而不是像素。
8 此外,虽然我们学习了一个 集合条件分布 ,我们的模型是一个适当的 联合生成模型
Cross-modal learning
9 视频的多模态特性也成为监督学习视频表示的广泛来源,我们的论文就是建立在这个基础上的。
10 由于大多数视频包含同步的音频和视觉信号,这两种模式可以互相监督,以学习强大的自我监督视频表示。
11 在这项工作中,我们使用语音(由ASR提供接口把声音转成文字)而不是低层次声音作为跨模态监控的来源。
Natural language models
12 我们以最近在NLP社区的进展为基础,在那里,大型语言模型如ELMO[22]和BERT[6]已经为各种NLP任务显示了最先进的结果,包括单词级(例如词性标记)和句子级(例如语义分类)。
13 然后将BERT模型扩展到多语言数据的预训练
14 我们的论文建立在BERT模型的基础上,以捕获语言和视觉领域的结构。
Image and video captioning
15 最近有很多关于图像字幕的工作(例如,[11,8,15]),这是一个形式p(y|x)的模型,其中y是手动提供的字幕,x是图像。
16 也有一些工作在视频字幕,使用手动提供的时间分割或估计分段
17 我们用关节p(x|y)建模并将其应用于视频字幕,并达到最先进的结果
Instructional videos
18 各种各样的论文(例如,[16,2,10,38,39])都训练了模型来分析教学视频,比如烹饪。
19 我们不同于这项工作,我们不使用任何手动标记,我们学习了一个大规模生成模型的文字和(离散化)视觉信号。
Model
1 为了获取语序信息,我们可以给每个单词加上它在句子中的位置。
2 BERT模型学习每个单词标记和这些标记的嵌入,然后对嵌入向量求和,以获得每个标记的连续表示。
3 在实践中,我们可以通过采样位置和训练语句随机优化logloss(根据f函数预测的softmax计算)
4 我们通常不仅简单地建模扩展序列,而且对两个句子之间的关系(是连续的,还是随机选择的两个句子)
5 通过将两个句子连接在一起,BERT可以被扩展成两个句子的模型。
6 对应的关节模型可表示为p(x;y;c),其中x是第一个句子,y是第二个句子,c = {0,1}是一个标签,指示源文档中的句子是独立的还是连续的。
7 为了与原文保持一致,我们还在序列的末尾添加了一个[SEP]标记,尽管它并不是严格需要的。
8 本例中对应的类标签是c = 1,表示x和y是连续的。
The VideoBERT model
1 为了将BERT扩展到视频,我们仍然可以利用预先训练好的语言模型和可扩展的实现来进行推理和学习,我们决定进行最小的更改,并将原始的可视数据转换为离散的令牌序列。
2 为此,我们建议使用一个预先训练的模型,对来自视频的特征应用分层向量量化来生成一个“视觉词汇”序列。
3 除了简单之外,这种方法还鼓励模型在视频中关注高级语义和更长期的时间动态。
4 这与大多数现有的视频表示学习的自我监督方法形成了对比,后者学习低水平的属性,如局部纹理和动作
5 我们可以将语言语句(来自ASR视频)与视觉语句结合起来生成数据
6 虽然这个完形填空任务很自然地扩展到语言和视觉标记序列,但是应用下一个句子预测任务(如BERT所使用的)就不那么直接了。
7 我们提出了一个语言-视觉对齐任务,其中我们使用[CLS]标记的最终隐藏状态来预测语言句子是否与视觉句子在时间上对齐。
8 请注意,这是语义关联的一个嘈杂指标,因为即使在教学视频中,说话者可能指的是一些视觉上不存在的东西。
9 为了解决这个问题,我们首先将相邻的句子随机连接成一个长句子,这样即使两个句子在时间上没有很好的对齐,模型也可以学习语义对应。
10 其次,因为即使是相同的动作,不同视频之间的状态转换速度也会有很大的差异,所以我们对视频标记随机选取1到5步的次采样率。
11 这不仅有助于模型对视频速度的变化更加健壮,而且还允许模型捕获更大时间范围内的时间动态,并学习更长期的状态转换。
12 我们把对视频和文本结合的其他方式的研究留给未来的工作。
13 总的来说,我们有三种对应于不同输入数据模式的训练机制:纯文本、纯视频和纯视频文本。
14 对于纯文本和纯视频,标准的掩码完成目标用于训练模型。
15 对于文本-视频,我们使用前面描述的语言-视觉对齐分类目标。
16 总体培训目标是个体目标的加权和。
17 文本目标迫使VideoBERT做好语言建模;视频目标迫使其学习“视频语言模型”,该模型可用于学习动态和预测;而文本-视频的客观要求它学习这两个领域之间的对应关系。
18 一旦我们训练了这个模型,我们就可以在各种下游任务中使用它,在这项工作中,我们定量地评估两个应用程序。
19 在第一个应用程序中,我们将其视为概率模型,并要求它预测或输入被掩盖的符号。
20 我们在44节中对此进行了说明,在这里我们执行“零镜头”分类。
21 在第二个应用程序中,我们提取了[CLS]令牌的预测表示(来自模型的内部激活),并使用该密集向量表示整个输入。
22 这可以与其他特征相结合,这些特征来自于下游监督学习任务的输入。
Experiments and Analysis
1 在语言和视觉领域的深度学习模型,在不断增长的大型数据集中,一直显示出显著的性能提升。
2 例如,“大”BERT模型(我们使用的)是在BooksCorpus(8亿字)和英语维基百科(2500亿字)的连接上预先训练的。
3 wefocus on cooking videos specifically
4 不幸的是,这样的数据集相对较小,所以 我们转向 YouTube 来收集大规模的视频数据集 进行训练。
5 我们使用YouTube视频注释系统从YouTube上提取了一组公开的烹饪视频,检索与“烹饪”和“食谱”相关的主题的视频。
6 收集的视频中,删除了15分钟以上视频。最终得到213K个视频。该数据集的总持续时间为23186小时,大约966天。已有YouCook II 要大两个数量级,YouCook II 是由2K个视频组成,总时长为176个小时
7 为了从视频中获取文本,我们使用YouTube Data API[1]提供的YouTube自动语音识别(ASR)工具包来检索带有时间戳的语音信息。API返回单词序列和预测的语言类型。在312K的视频中,有180K是可以通过API检索到的ASR,预计有120K是英文的。在我们的实验中,虽然我们将 所有的视频都用于纯 - 视频目的 ,但我们只将来自 英语 ASR 的文本用于 VideoBERT 的纯 - 文本和视频 - 文本目的 。
8 我们在YouCook II数据集[38]上评估了VideoBERT,它包含了2000个YouTube视频,平均时长526分钟,总共176个小时。
9 我们使用提供的数据集分割,其中1333个视频用于培训,457个用于验证。
Video and Language Preprocessing
1 对于每个输入的视频,我们以每秒20帧的速度采样,并在视频上创建30帧(15秒)不重叠窗口的剪辑。
2 对于每个30帧的剪辑,我们应用一个预先训练的视频卷积网络来提取其特征。
3 在这项工作中,我们使用了S3D[34],它将可分离的时域卷积添加到Inception网络[25]骨干网中。
4 我们在最终的线性分类器之前进行特征激活,然后应用3D平均池得到一个1024维的特征向量。
5 我们在动力学[9]数据集上对S3D网络进行了预培训,该数据集涵盖了来自YouTube视频的广泛 *** 作,并作为每个单独片段的通用表示。
6 我们用层次知识表示视觉特征。我们通过可视化地检查集群的一致性和代表性来调整层次级别d的数量和每级别k的集群数量。我们设置d=4, k = 12,得到124 = 20736个簇。图4说明了这个“矢量量化”过程的结果
7 对于每个ASR单词序列,我们使用一个现成的基于lstm的语言模型添加标点符号,从而将单词流分解为句子。对于每个句子,我们遵循BERT[6]中的标准文本预处理步骤,并将文本标记为单词[33]。我们使用BERT的作者提供的相同词汇表,其中包含30,000个令牌
8 不像语言可以自然地分解成句子,它不清楚如何将视频分解成语义连贯的片段。我们使用一个简单的启发式方法来解决这个问题:当一个ASR语句可用时,它与开始和结束时间戳相关联,并且我们将属于那个时间段的视频标记作为一个片段。当ASR不可用时,我们简单地将16个令牌视为一个段。
Model Pre-training
1 我们从文本预先训练的checkpoint 初始化BERT权重。具体来说,我们使用由[6]的作者发布的BERTLARGE模型,使用相同的主干架构:它有24层Transformer块,每个Transformer块有1024个隐藏单元和16个self-attention
head。
2 我们为每个新的“可视单词”在单词嵌入查找表中添加了20736个条目,从而增加了对视频标记的支持。我们使用S3D特性从相应的簇中心初始化这些条目。输入嵌入在训练前被冻结。
3 我们的模型训练过程在很大程度上遵循BERT的设置:我们在Pod配置中使用了4个Cloud
TPUs,总批处理大小为128,我们训练了50万个迭代,或大约8个epoch的模型。我们使用Adam优化器,初始学习率为1e-5,线性衰减学习率计划。培训过程大约需要2天。
Zero-shot action classification
1 一旦pretrained, VideoBERT模型可以用于“zero-shot”分类新数据集,如YouCook
II(通过“zero-shot”我们指的是模型不是对准YouCook II具有相同标签的数据也没有本体用于YouCook II)。更确切地说,我们要计算p (y|x)其中x是视觉符号序列,y是一个序列的单词。由于模型被训练来预测句子,我们将y定义为固定的句子,“现在让我向您展示如何[屏蔽][屏蔽]”,并分别从第一个和第二个屏蔽槽中预测的标记中提取动词和名词标签。
2 为了进行定量评估,我们使用了YouCook II数据集。在[37]中,作者为YouCook II的验证集收集了63个最常见对象的ground truth边界框。然而,对于行为没有ground truth标签,许多其他常见对象也没有标签。因此,我们收集来自ground truth标题的动作和对象标签来解决这个缺点。我们在ground truth标题上运行一个现成的词性标记来检索100个最常见的名词和45个最常见的动词,并使用它们来派生ground truth标签。虽然VideoBERT的词块词汇表为它提供了有效执行开放词汇表分类的能力,但它因此更有可能做出语义上正确的预测,而这些预测并不完全符合更有限的ground true。因此,我们报告了排名前1和前5的分类准确性指标,后者旨在缓解这个问题,我们将更复杂的评估技术留给未来的工作。最后,如果有一个以上的动词或名词与一个视频片段相关联,我们认为预测是正确的,如果它符合其中任何一个。我们报告了YouCook II验证集的性能
3 我们也使用来自文本BERT模型的先验语言,这在烹饪视频中没有得到很好的调整。我们可以看到VideoBERT比两个基线都好得多。正如所料,VideoBERT的语言先验适用于烹饪句子,并且优于vanilla BERT模型。
4 然后,我们与使用YouCook II的训练分割训练的完全监督分类器进行比较。我们使用预先计算好的S3D特性(与VideoBERT的输入相同),随着时间的推移应用平均池,然后使用线性分类器。表1显示了结果。正如我们所看到的,supervised framework在动词准确性方面超过了VideoBERT,这并不奇怪,因为VideoBERT拥有一个非常开放的词汇表。(有关 *** 作标签的模糊性,请参见图5。)然而,排名前5的精度指标显示,VideoBERT在没有使用任何来自YouCook II的监督的情况下,实现了与完全监督的S3D基线相当的性能,这表明该模型能够在这种“0次学习”设置下进行竞争。
Benefits of large training sets
1 我们还研究了训练前数据集大小的影响。在这个实验中,我们从训练前的视频集中随机选取10K、50K和100K的子集,使用与上面相同的设置,对相同的epoch进行训练前的VideoBERT。表2显示了性能。我们可以看到, 准确性随着数据量的增加而单调增加,没有饱和的迹象 。这表明VideoBERT可能会受益于更大的训练前数据集。
Transfer learning for captioning
1 我们进一步证明了VideoBERT作为特征提取器的有效性。
2 我们使用与他们相同的模型,即变压器编码器-解码器,但我们将编码器的输入替换为上面描述的VideoBERT派生的特性。
3 我们还将视频沙漠功能与平均汇集的S3D功能连接起来;作为基准,我们也考虑只使用S3D功能而不使用VideoBERT。
4 我们设置transformer层数为2,隐藏单元大小为128,dropout
rate为04。我们在训练分割上使用5倍交叉验证来设置超参数,并在验证集上报告性能。我们训练了批大小为128的40K迭代的模型。我们使用相同的亚当优化在VideoBERT前训练,并设置初始学习率为1e-3与线性衰减时间表。
Discussion and conclusion
1 使用空间细粒度的视觉表示非常重要,而不是只在框架或剪辑级别工作,这样我们就可以区分单个对象及其属性。
2 我们计划在其他视频理解任务和烹饪之外的其他领域评估我们的方法。
BERT: Pre-training of Deep Bidirectional Transformers for
Language Understanding
○ 将预训练语言模型应用在下游任务中,一般有两种策略:
作者认为影响当前预训练语言模型的 瓶颈是——“模型是单向的” 。如 GPT 选择从左到右的架构,这使得每个 token 只能注意到它前面的 token,这对 sentence 级的任务影响还是次要的,但对于 token 级的任务来说影响就很巨大。例如问答任务,从两个方向结合上下文是至关重要的。
BERT 通过使用受完形填空任务启发的 Mask Language Model (MLM)缓解了先前模型的单向性约束问题。MLM 随机 mask 掉一些输入文本中的 token,然后根据剩下的上下文预测 masked 的 token。除了 Mask Language Model,作者还提出了 Next Sequence Predict 任务,来联合训练文本对表示。
论文中BERT的改进如下:
预训练前的一般语言表征有着悠久历史,本节我们简要回顾一下最广泛使用的方法。
21 基于特征的无监督方法 :
几十年来,学习广泛适用的词汇表征一直是一个活跃的研究领域,包括非神经系统、神经系统方法。预训练的词嵌入是现代NLP系统的一个组成部分,与从头学习的嵌入相比,它提供了显著的改进(Turian等人,2010)。为了预先训练单词嵌入向量,已经使用了从左到右的语言建模目标(Mnih和Hinton,2009),以及在左右上下文中区分正确单词和错误单词的目标(Mikolov等人,2013)。
这些方法已被推广到更粗糙的粒度,例如句子嵌入(Kiros等人,2015;Logeswaran和Lee,2018)或段落嵌入(Le和Mikolov,2014)。为了训练句子表征,之前的工作已经使用了目标对候选下一个句子进行排序(Jernite等人,2017;Logeswaran和Lee,2018),根据前一个句子的表征从左到右生成下一个句子单词(Kiros等人,2015),或去噪自动编码器衍生的目标(Hill等人,2016)。
ELMo 及其前身(Peters等人,20172018a)从不同的维度概括了传统的单词嵌入研究。它们通过从左到右和从右到左的语言模型中提取上下文敏感的特征。每个标记的上下文表示是从左到右和从右到左表示的 串联 。在将上下文单词嵌入与现有任务特定架构相结合时,ELMo推进了几个主要NLP基准(Peters等人,2018a)的最新技术,包括问答(Rajpurkar等人,2016年)、情感分析(Socher等人,2013年)和命名实体识别(Tjong Kim-Sang和De Meulder,2003年)。Melamud等人(2016年)提出通过一项任务来学习语境表征,即使用 LSTM 从左右语境中预测单个单词。与ELMo类似,他们的模型是基于特征的,而不是深度双向的。Fedus等人(2018)表明,完形填空任务可以用来提高文本生成模型的 稳健性 。
22 无监督微调方法:
与 基于特征feature-based 的方法一样,第一种方法只在未标记文本中预先训练单词嵌入参数的情况下才朝这个方向工作。最近,产生上下文标记表示的句子或文档编码器已经从未标记的文本和文本中预训练出来针对受监督的下游任务进行了 微调fine-tuned 。
这些方法的 优点是 ,很少有参数需要从头学习。至少部分由于这一优势,OpenAI GPT在GLUE基准测试的许多句子级任务上取得了之前的最新成果。从左到右的语言建模和自动编码器目标已用于此类模型的预训练。
注解 :BERT的整体预训练和微调程序。除了输出层之外,在预训练和微调中使用相同的体系结构。相同的预训练模型参数用于初始化不同下游任务的模型。在微调过程中,所有参数都会微调。
23 基于监督数据的迁移学习:
也有研究表明,在大数据集的监督任务中,如自然语言推理和机器翻译可以有效地进行转换。计算机视觉研究也证明了 从大型预训练模型中进行迁移学习的重要性 ,其中一个有效的方法是对使用ImageNet预训练模型进行微调。
本节将介绍BERT及其详细实现。在我们的框架中有两个步骤:预训练和微调。
BERT的一个显著特点是其跨不同任务的统一体系结构 。预训练的体系结构和最终的下游体系结构之间的差异最小。
BERT 的模型架构是 一种多层的双向 transformer encoder ,BERT 在实现上与 transformer encoder 几乎完全相同。
定义:transformer block 的个数为 L ; hidden 大小为 H; self-attentions head 的个数为 A 作者主要展示了两种规模的 BERT 模型:
在这项工作中,我们将层数(即Transformer blocks)表示为L,隐藏大小表示为H,自我注意头的数量表示为A。我们主要报告两种型号的结果:
为了进行比较,选择BERT-base与OpenAI GPT具有相同的模型大小。然而,关键的是, BERT Transformer使用双向自注意力机制self-attention ,而 GPT Transformer使用受限自注意力机制constrained self-attention ,其中每个标记只能关注其左侧的上下文。
为了使 BERT 能处理大量不同的下游任务,作者将模型的输入设计成可以输入单个句子或句子对,这两种输入被建模成同一个 token 序列。作者使用了有 30000 个 token 的 vocabulary 词嵌入。
31 Pre-training BERT :
我们不使用传统的从左到右或从右到左的语言模型来预训练BERT。相反,我们使用本节所述的两个无监督任务对BERT进行预训练。这一步如图1的左半部分所示。
Task #1: Masked LM
标准的语言模型只能实现从左到右或从右到左的训练,不能实现真正的双向训练,这是因为双向的条件是每个单词能直接“看到自己”,并且模型可以在多层上下文中轻松的预测出目标词。
为了能够实现双向的深度预训练,作者选择 随机 mask 掉一些比例的 token ,然后预测这些被 masked 的 token,在这种设置下,被 masked 的 token 的隐向量表示被输出到词汇表的 softmax 上,这就与标准语言模型设置相同。作者将 这个过程称为“Masked LM”,也被称为“完形填空” 。
○ Masked LM 预训练任务的缺点 :
在于由于 [MASK] 标记不会出现在微调阶段,这就造成了预训练和微调阶段的不一致。为了解决该问题,作者提出了 一种折中的方案 :
○ BERT 的 mask策略:
Task #2: Next Sentence Prediction (NSP)
很多下游任务都是基于对两句话之间的关系的理解,语言模型不能直接捕获这种信息。为了训练模型理解这种句间关系,作者 设计了 next sentence prediction 的二分类任务 。具体来说,就是选择两个句子作为一个训练样本,有 50% 的概率是下一句关系,有 50% 的概率是随机选择的句子对, 预测将 [CLS] 的最终隐状态 C 输入 sigmoid 实现 。
○ Pre-training data :
作者选用了BooksCorpus (800M words) 和 English Wikipedia (2,500M words) 作为预训练的语料库,作者只选取了 Wikipedia 中的文本段落,忽略了表格、标题等。为了获取长的连续文本序列,作者选用了 BIllion Word Benchmark 这样的文档级语料库,而非打乱的句子级语料库。
32 Fine-tuning BERT :
因为 transformer 中的 self-attention 机制适用于很多下游任务,所以可以直接对模型进行微调。对于涉及文本对的任务,一般的做法是独立 encode 文本对,然后再应用双向的 cross attention 进行交互。Bert 使用 self-attention 机制统一了这两个阶段,该机制直接能够实现两个串联句子的交叉编码。
对于不同的任务,只需要简单地将特定于该任务的输入输出插入到 Bert 中,然后进行 end2end 的fine-tuning。
与预训练相比,微调相对便宜。从完全相同的预训练模型开始,本文中的所有结果最多可以在单个云TPU上复制1小时,或在GPU上复制几个小时。
在本节中,我们将介绍11个NLP任务的BERT微调结果。
41 GLUE:
GLUE (General Language Understanding Evaluation) 是多个 NLP 任务的集合。作者设置 batch size 为 32;训练 3 个 epochs;在验证集上从(5e-5, 4e-5, 3e-5, 2e-5)中选择最优的学习率。结果如下:
结果见表1。 BERT-base和BERT-large在所有任务上都比所有系统表现出色,与现有技术相比,平均准确率分别提高了45%和70% 。请注意,除了注意掩蔽,BERT-base和OpenAI GPT在模型架构方面几乎相同。
对于最大和最广泛报道的GLUE任务MNLI,BERT获得了46%的绝对准确率提高。在官方的GLUE排行榜10中,BERT-lagle获得805分,而OpenAI GPT在撰写本文之日获得728分。我们发现BERT-large在所有任务中都显著优于BERT-base,尤其是那些训练数据很少的任务。
42 SQuAD v11 :
斯坦福问答数据集(SQuAD v11)收集了10万对众包问答对。给出一个问题和一段维基百科中包含答案的文章,任务是预测文章中的答案文本。
如图1所示,在问答任务中,我们将输入的问题和段落表示为单个压缩序列,问题使用A嵌入,段落使用B嵌入。在微调过程,我们只引入一个起始向量S和一个端向量E。单词i作为答案范围开始的概率计算为Ti和S之间的点积,然后是段落中所有单词的softmax:
答案范围结束时使用类似公式。候选人从位置 i 到位置 j 的得分定义为:S·Ti + E·Tj ,最大得分跨度为 j≥ i 被用作预测。训练目标是正确起始位置和结束位置的对数概率之和。我们微调了3个阶段,学习率为5e-5,批量大小为32。
表2显示了顶级排行榜条目以及顶级发布系统的结果。SQuAD排行榜的前几名没有最新的公共系统描述,并且允许在训练系统时使用任何公共数据。因此,在我们的系统中使用适度的数据扩充,首先在TriviaQA上进行微调,然后再对团队进行微调。
我们表现最好的系统在ensembling方面的表现优于排名第一的系统,在ensembling方面的表现优于排名第一的系统+15 F1,在单一系统方面的表现优于排名第一的系统+13 F1得分。事实上,我们的单BERT模型在F1成绩方面优于顶级合奏系统。如果没有TriviaQA微调数据,我们只会损失01-04 F1,仍然远远超过所有现有系统。
其他实验:略
在本节中,我们对BERT的许多方面进行了消融实验,以便更好地了解它们的相对重要性。其他消融研究见附录C。
51 预训练任务的效果 :
○ 进行了如下消融测试:
○ 结果如下:
52 模型大小的影响 :
○ 结果如下:
作者证明了 :如果模型经过充分的预训练,即使模型尺寸扩展到很大,也能极大改进训练数据规模较小的下游任务。
53 将 Bert 应用于 Feature-based 的方法 :
○ feature-based 的方法是从预训练模型中提取固定的特征,不对具体任务进行微调 。
○ 这样的方法也有一定的优点 :
作者进行了如下实验:在 CoNLL-2003 数据集上完成 NER 任务,不使用 CRF 输出,而是从一到多个层中提取出激活值,输入到 2 层 768 维的 BiLSTM 中,再直接分类。结果如下:
结果说明:无论是否进行微调,Bert 模型都是有效的。
个人认为 Bert 的意义在于:
由于语言模型的迁移学习,最近的经验改进表明,丰富的、无监督的预训练是许多语言理解系统的一个组成部分。特别是,这些结果使得即使是低资源任务也能从深层单向体系结构中受益。我们的主要贡献是将这些发现进一步推广到深层双向体系结构中,使相同的预训练模型能够成功地处理广泛的NLP任务。
以上就是关于BERT模型全部的内容,包括:BERT模型、bert原码解析(embedding)、【Paper Reading】VideoBERT: A Joint Model for Videoand Language Representation Learning等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)