预训练模型综述--Albert,xlnet,bert,word2vec?

论文降重 独有的降重技术

免费使用,100%过查重,多种降重模式,1小时轻松搞定论文

论文查重 检测与学校相同

一站式聚合查重平台,含知网、万方、维普等,正品价格便宜

预训练模型综述--Albert,xlnet,bert,word2vec?

问:BERT:深度双向预训练语言模型?

  • 答:论文标题:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
    论文链接: https://arxiv.org/abs/1810.04805
    BERT(Bidirectional Encoder Representations from Transformers)通过预训练来学习无标注数据中的深度双向表示,预训练结束后通过添加一个额外的输出层进行微调,最终在多个NLP任务上实现了SOTA。
    预训练语言模型在实践中证明对提高很多自然语言处理任务有效,其中包括句子层级的任务,比如自然语言推断(natural language inference)和复述(paraphrasing),还有token层级的任务,比如命名实体识别(named entity recognition)和问答(question answering)。
    在下游任务中应用预训练语言模型表示的方法有两种:feature-based的方法和fine-tuning的方法。举例来说,ELMo这种预训练语言模型使用feature-based的方法,通过将ELMo的预训练的表示作为额外的特征输入到特定于任务的模型中去;GPT使用fine-tuning的方法,通过引入少量的特定于任务的参数,在下游任务中训练时所有的预训练参数。
    截止BERT之前的预训练语言模型都是单向的(unidirectional),包括GPT和ELMo,这样的方法对句子层级的任务不是最优的,而且对于token层级的任务比如问答非常有害。BERT使用masked language model(MLM)的方法来预训练,这种方法能够训练一个双向的(directional)语言模型。除了masked language model的预训练的方法,BERT还使用了next sentence prediction的预训练方法。
    BERT的使用分为两个阶段:预训练(pre-training)和微调(fine-tuning)。预训练阶段模型通过两种不同的预训练任务来训练无标注数据。微调阶段模型使用预训练参数初始化,然后使用下游任务(downstream task)的标注数据来微调参数。
    BERT的一个显著特点是它在不同的任务上有统一的架构,使用时只需要在BERT后面接上下游任务的结构即可使用。
    BERT的模型架构是一个多层双向的Transformer的encoder。我们标记模型的层数(每一层是一个Tranformer的block)为 ,模型的hidden size为 ,self-attention head的数量为 。两个比较通用的BERT架构为 和 。
    对比GPT,BERT使用了双向self-attention架构,而GPT使用的是受限的self-attention, 即限制每个token只能attend到其左边的token。
    BERT的输入表示能够是一个句子或者是一个句子对,这是为了让BERT能够应对各种不同的下游任务。BERT的输入是一个序列,该序列包含一个句子的token或者两个句子结合在一起的token。
    具体地,我们会将输入的自然语言句子通过 WordPiece embeddings 来转化为token序列。这个token序列的开头要加上 [CLS] 这个特殊的token,最终输出的 [CLS] 这个token的embedding可以看做句子的embedding,可以使用这个embedding来做分类任务。
    由于句子对被pack到了一起,因此我们需要在token序列中区分它们,具体需要两种方式:
    ①在token序列中两个句子的token之间添加 [SEP] 这样一个特殊的token;
    ②我们为每个token添加一个用来学习的embedding来区分token属于句子A还是句子B,这个embedding叫做segment embedding。
    具体地,BERT的输入由三部分相加组成:token embeddings、segment embeddings和position embeddings。如下图所示:
    BERT使用两个无监督的任务进行预训练,分别是Masked LM和Next Sentence Prediction(NSP)。如下图所示,我们定义输入的embedding为 ,BERT最终输出的 [CLS] 的embedding为 ,最终输出的第 个token的embedding为 。
    我们有理由相信一个深度双向模型比left-to-right模型和left-to-right和right-to-left简单连接的模型的效果更加强大。不幸的是,标准的条件语言模型只能够够left-to-right或者right-to-left地训练,这是因为双向条件会使每个token能够间接地“看到自己”,并且模型能够在多层上下文中简单地预测目标词。
    为了能够双向地训练语言模型,BERT的做法是简单地随机mask掉一定比例的输入token(这些token被替换成 [MASK] 这个特殊token),然后预测这些被遮盖掉的token,这种方法就是Masked LM(MLM),相当于完形填空任务(cloze task)。被mask掉的词将会被输入到一个softmax分类器中,分类器输出的维度对应词典的大小。在预训练时通常为每个序列mask掉15%的token。与降噪自编码器(denoising auto-encoders)相比,我们只预测被mask掉的token,并不重建整个输入。
    这种方法允许我们预训练一个双向的语言模型,但是有一个缺点就是造成了预训练和微调之间的mismatch,这是因为 [MASK] 这个token不会在微调时出现。为了缓解这一点,我们采取以下做法:在生成训练数据时我们随机选择15%的token进行替换,被选中的token有80%的几率被替换成 [MASK] ,10%的几率被替换成另一个随机的token,10%的几率该token不被改变。然后 将使用交叉熵损失来预测原来的token。
    一些重要的NLP任务如Question Answering (QA)或者Natural Language Inference (NLI)需要理解句子之间的关系,而这种关系通常不会被语言模型直接捕捉到。为了使得模型能够理解句子之间的关系,我们训练了一个二值的Next Sentence Prediction任务,其训练数据可以从任何单语语料库中生成。具体的做法是:当选择句子A和句子B作为训练数据时,句子B有50%的几率的确是句子A的下一句(标签是 IsNext ),50%的几率是从语料库中随机选择的句子(标签是 NotNext )。 [CLS] 对应的最后一个隐层输出向量被用来训练NSP任务,这个embedding就相当于sentence embedding。虽然这个预训练任务很简单,但是事实上在微调时其在QA和NLI任务上表现出了很好的效果。在前人的工作中,只有sentence embedding被迁移到下游任务中,而BERT会迁移所有的参数来初始化下游任务模型。
    Transformer的self-attention机制允许BERT建模多种下游任务。对于包含句子对的任务,通常的做法是先独立地对句子对中的句子进行编码,然后再应用双向交叉注意(bidirectional cross attention)。而BERT使用self-attention机制统一了这两个过程,这是因为对拼接起来的句子对进行self-attention有效地包含了两个句子之间的双向交叉注意(bidirectional cross attention)。
    对于每个任务来说,我们只需要将任务特定的输入输出插入到BERT中然后端到端地微调即可。举例子来说,BERT的预训练输入句子A和句子B在微调时可以类比为:
    ①paraphrasing任务中的句子对;
    ②entailment任务中的hypothesis-premise对;
    ③question answering任务中的question-passage对;
    ④text classification或者sequence tagging任务中的text-∅对(也就是只输入一个text,不必一定需要两个句子)。
    对于BERT的输出,对于一些token-level的任务,BERT的token表示将被输入到一个输出层,比如sequence tagging或者question answering任务;对于entailment或者sentiment analysis这样的任务,可以将 [CLS] 对应的表示输入到一个输出层。
    我们使用 [CLS] 这个token的最后一层的隐层向量 作为聚合的表示,可以认为是sentence embedding。在微调时只引入一个新的权重 ,这里的 代表标签的数量,然后计算标准分类损失 。下图展示了BERT在GLUE上的效果:
    在这个数据集上,我们将question和passage拼接起来作为一个输入序列(中间是 [SEP] )。在微调时引入一个start向量 和一个end向量 ,计算 和 的点积然后通过 函数作为word 是答案的span起始位置的概率: 。答案的终止位置也做上述类似处理。从 到 的候选区间的得分记作 ,我们挑选 的最大得分区间作为预测的结果。下图展示了BERT在SQuAD v1.1上的效果:
    SQuAD v2.0有的question在提供的passage中没有答案存在。在微调时我们设置没有答案的问题的span的起始和结束位置都是 [CLS] 这个token,也就是start和end的可能性空间包含进了 [CLS] 的位置。在预测时,我们比较没有答案的span得分 和最优的有答案得分 。当 时,我们预测这是一个有答案的问题,这里的 用来在dev set上选择最优的 。下图展示了BERT在SQuAD v2.0上的效果:
    微调时我们为BERT构建4个输入序列,每一个是所给的句子(句子A)和一个可能的延续(句子B)。然后引入一个向量,该向量和每一个输入对应的 [CLS] 的embedding的点积再通过一个 层来得到每个选择的得分。下图展示了BERT在SWAG上的效果:

问:[模型]什么是BERT 模型?

  • 答:参考链接: BERT模型图解
    1、BERT 结构图
    如图:
    2、官方论文
    https://arxiv.org/pdf/1810.04805.pdf
    3、BERT 模型简述
    BERT 是基于 Transformer 的双向编码表示模型,被用于作为预训练模型,给下游任务使用。它由对 Transformer 的编码器进行堆叠而成。每个编码器都包含了两个子层,第一个子层是多头注意力层,可以在对某个特定字进行编码时,也可以注意到其他字;第二个子层则是前向反馈层。而 BERT 还是一个遮蔽语言模型,因为输入给 BERT 的语料中,有部分的字会被随机替换为 mask 符号。

问:05-ELMo/BERT/GPT-NLP预训练模型?

  • 答: 这里可以参考CSDN上的文章-BERT原理和实践: https://blog.csdn.net/jiaowoshouzi/article/category/9060488

    在解释BERT,ELMO这些预训练模型之前,我们先看一下很久之前的计算机是如何读懂文字的?

    每个字都有自己的独特的编码。但是这样是有弊端的,字和字之间的关联关系是无法得知的,比如计算机无法知道dog和cat都是动物,它反而会觉得bag和dog是比较相近的。

    所以后来就有了Word Class,将一系列的词进行分类然后让一类词语和一类词语之间更有关联,但是这样的方法太过于粗糙,比如dog,cat,bird是一类,看不出哺乳动物鸟类的区别。

    在这个基础之上,我们有了Word Embedding,Word Embedding我们可以想象成是一种soft的word class,每个词都用向量来表示,它的向量维度可能表示这个词汇的某种意思,如图中dog,cat,rabbit的距离相比其他更近。那么word embendding是如何训练出来的,是根据每个词汇的上下文所训练的。

    每个句子都有bank的词汇,四个bank是不同的token,但是同样的type。(注:token-词例, type-词型, class-词类 or token是出现的总次数(还有种理解是token是具有一定的句法语义且独立的最小文本成分。 ),type是出现的不同事物的个数。)
    对于典型的Word Embedding认为,每个词type有一个embedding,所以就算是不同的token只要是一样的type那么word embedding就是一样的,语义也就是一样的。

    而事实上并非如此,1,2句bank指的是银行,3,4为水库。所以我们希望让机器给不同意思的token而且type还一致,给予不同的embedding。在这个问题上,之前的做法是从字典中去查找这个词包含几种意思,但是这样的做法显然跟不上现实中词语的一些隐含的含义。比如bank有银行的意思,与money一起是银行的意思,而与blood一起却是血库的意思。

    所以我们想让机器今天进一步做到每一个word token都可以有自己的embedding(之前是每个type有一个embedding或者有固定的一个或多个embedding),那么怎么知道一个word应该有怎样的embedding呢?我们可以取决于该词的上下文,上下文越相近的token它们就会越相近的embedding。比如之前提到的bank,下面两个句子它们的word token的embedding可能是相近的,而和上面的word token的embedding是相远的。

    所以我们想使用一种能够基于上下文的Contextual word Embedding来解决一词多义的问题。

    这里使用ELMO可以做到这件事情,即每个word token拥有不同的word embedding。(右上角动物是芝麻街(美国公共广播协会(PBS)制作播出的儿童教育电视节目)里的角色)。
    它是基于RNN的预训练模型,它只需要搜集大量语料(句子)且不需要做任何标注,就可以训练这个基于RNN的语言模型,预测下一个token是什么,学习完了之后就得到了上下文的embedding。因为我们可以将RNN的隐藏层中的某一节点拿出来(图中橙蓝色节点),它就是输入当前结点的词汇的word embedding。

    从当计算识别到<BOS>,模型训练开始。首先输入"潮水",然后当作输入输出"退了",退了当做输入输出"就"。

    假设当前要得到”退了”这个词的上下文embedding,首先,因为前边的RNN只考虑到了前文而没有考虑到后文,所以这里就使用了同前文一样的反向的RNN。然后,它从句尾开始进行,比如给它喂”知道”,它就要预测”就”,给它喂”就”,它就要预测”退了”。这时候就不仅考虑每个词汇的前文,还会考虑每个词的后文。最后将正向和逆向得到的两个不同的上下文embedding(因为方向不同训练结果也不一样)拼接起来。

    现在我们训练的程度都会越来越深度,当层数增加,这样就会产生Deep的RNN,因为很多层,而且每一层都会产生上下文Embedding,那么我们到底应该使用哪一层?每一层这种深度LSTM中的每个层都可以生成潜在表示(方框处)。同一个词在不同的层上会产生不同的Embedding,那么我们应该使用哪一层呢?ELMo的策略是每一层得到的上下文embedding都要。

    在上下文embedding的训练模型中,每个词输入进去都会有一个embedding输出来。但是在ELMo中,每个词汇输入进去,都会得到不止一个embedding,因为每层的RNN都会给到一个embedding,ELMo将它们统统加起来一起使用。
    以图中为例,这里假设ELMo有两层RNN,这里是将α1(黄色,第一层得到的embedding)和α2(绿色,第二层得到embedding)加起来得到蓝色的embedding,并做为接下来要进行不同任务的输入。

    但是这里存在一些问题,α1和α2是学习得到的,而且它是根据当前要进行的任务(如QA,POS of tagging ),然后根据接下来要进行的这些任务一起被学习出来。所以就导致不同任务导向下的α1和α2也不一样。

    ELMo的论文中提到,在不同任务下(SRL,Coref,SNLI,SQuAD,SST-5)。蓝色的上下文embedding在经过token(这里为没有经过上下文的embedding),LSTM1,LSTM2后,它在不同阶段需要的weight也不一样。

    BERT相当于是Transformer的Encoder部分,它只需要搜集大量的语料去从中学习而不经过标注(不需要label),就可以将Encoder训练完成。如果之前要训练Encoder,我们需要通过一些任务来驱动学习(如机器翻译)。

    BERT就是句子给进去,每个句子给一个embedding。
    这里可以回忆下,Transformer的Enoder中有self-attention layer,就是给进去一个sequence,输出也得到一个sequence。

    虽然图中使用是用词作为单元进行输入,但是在使用BERT进行中文的训练时,字会是一个更好的选择。比如,我们在给BERT进行输入时,用one-hot给词进行编码,但是词在中文中数量庞大,会导致维度过高。但是,字的话相对会少很多,特别是中文(大约几千个,可以穷举)。这样以字为单位进行输入会占很大优势。

    共有两种方法,一种是Mask LM遮盖语言模型,另一种是Next Sentence Prediction下一句预测。

    下面用上图的例子来理解BERT是怎么样来进行填空的:
    1)这里假设在所有句子中的词汇的第2个位置上设置一个<MASK>;
    2)接下来把所有的词汇输入BERT,然后每个输入的token都会得到一个embedding;
    3)接下来将设置为<MASK>的embedding输入到Linear Multi-class Classifier中中,要求它预测被<MASK>的词汇是哪个词汇?

    但是这个Linear Multi-class Classifier它仅仅是一个线性分类器,所以它的能力十分弱,这也就需要在之前的BERT模型中需要将它的层数等参数设计的相当好,然后得到非常出色的representation,便于线性分类器去训练。
    那么我们怎么知道最后得到的embedding是什么样的呢?如果两个<MASK>下的词汇(输入时设置的<MASK>和最后预测的<MASK>)都放回原来的位置而且没有违和感(就是语句还算通顺),那它们就有类似的embedding(比如退下和落下)。

    如图中,给定两个句子1)醒醒吧 和 2)你没有妹妹。其中特殊符号[SEP]是告诉BERT两个句子的分隔点在哪里。

    特殊符号[CLS]一般放在句子的开头,它用来告诉BERT从这开始分类任务,[CLS]输入BERT后得到embedding然后通过Linear Binary Classifier得出结果说明:经过BERT预测后现在我们要预测的两个句子是接在一起 or 不应该被接在一起。

    这里可能会有疑问,为什么不将[CLS]放在句尾,等BERT训练完两个句子再输出结果?

    对于上图中的任务,BERT现在要做的事情就是给定两个句子,让BERT输出结果这两个句子是不是应该接在一起?
    所以在语料库的大量句子中,我们是知道哪些句子是可以接在一起的,所以也需要我们告诉BERT哪些句子是接在一起的。

    Linear Binary Classifier和BERT是一起被训练的,通过预测下一句这个任务,我们就可以把将BERT部分的最优参数训练出来。

    现在我们知道了任务一和任务二,在原论文中两种任务是要同时进行的,这样才能将BERT的性能发挥到最佳。

    现在我们知道了BERT要做什么事情,那么我们要如何去使用它?共有四种方法。论文中是将【BERT模型和接下来你要进行的任务】结合在一起做训练。

    第一种,假设当前任务是Input一个sentence,out一个class,举例来说输入一句话来判断分类。

    训练流程:1)将做要分类的句子丢给BERT;
    2)需要在句子开始加上分类的特殊符号,这个特殊符号经过BERT输出的embedding经过线性分类器,输出结果为当前的句子属于的类别是真还是假。BERT和Linear Classifier的参数一起进行学习;
    3)这里的Linear Classifier是Trained from Scratch是白手起家从头开始,即它的参数随机初始化设置,然后开始训练;
    4)而BERT则是加上Fine-tune微调策略(一种迁移学习方式*),例如Generative Pre-trained Transformer(OpenAI GPT生成型预训练变换器)(Radford等,2018),引入了最小的任务特定参数,并通过简单地微调预训练参数在下游任务中进行训练。

    *这里不得不提一下迁移学习中的Fine-tune,这里可以参考csdn的一篇文章: https://blog.csdn.net/u013841196/article/details/80919857

    ( https://arxiv.org/abs/1805.12471 )
    第二种,假设当前任务是input一个sentence,输出这个句子中的每个词汇属于正例还是负例。举例现在的任务是slot filling填槽任务(填槽指的是为了让用户意图转化为用户明确的指令而补全信息的过程)(另一种解释是从大规模的语料库中抽取给定实体(query)的被明确定义的属性(slot types)的值(slot fillers))(槽可以理解为实体已明确定义的属性),输入的句子是 arrive Taipei on November 2nd输出的槽是other dest on time time
    训练流程:
    1)将句子输入BERT,句子中的每个词汇都会映射出一个embedding;
    2)每个词汇的embedding输入Linear Classifier,输出结果;
    3)Linear Classifier 白手起家和Bert微调的方式一起去做学习。

    第三种,假设当前任务是input输入两个句子,输出class。举例现在要进行自然语言预测,让机器根据premise前提,预测这个hypothesis假设是True还是False还是unknown不知道。实际上,我们可以把这个任务当成三分类问题。
    训练过程:
    1)在一个sentence前设置特殊符号[CLS],然后在要输入的两个sentence中间设置[SEP]分隔符号;
    2)将两个sentence连同特殊符号一起输入到BERT中;
    3)将[CLS]输入BERT后得到的embedding,再把它输入linear Classifier中,得到class。

    如图所示,假设gravity的token序号是17,即 ,我们现在有一个问题通过QA Model后得到的s=17,e=17,那么答案就是 为gravity;
    同理,假设within a cloud的序号顺序是77到79,即 到 ,我们现在有一个问题通过QA Model后得到的s=77,e=79,那么答案就是 为within a cloud。

    https://arxiv.org/abs/1905.05950
    https://openreview.net/pdf?id=SJzSgnRcKX

    这张图显示了BERT从0-24层的层数在针对不同的NLP任务上的表现。

    https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf

    而所谓的GPT,它其实就是Transformer的Decoder。

    我们简单的描述下GPT的训练过程:这里我们input<BOS>这个token和潮水,想要GPT预测输出“退了”这个词汇。

    1)首先输入[BOS](begin of sentence)和潮水,通过Word Embedding再乘上matrix W变成a 1到a 4,然后把它们丢进self-attention 层中,这时候每一个input都分别乘上3个不同的matrix产生3个不同的vector,分别把它们命名为q,k,v。

    q代表的是query (to match others用来去匹配其它的向量)
    k代表的是key (to be matched用来去被query匹配的向量)
    v代表的是value(information to be extracted用来被抽取的信息的向量)

    2)现在要做的工作就是用每个query q 去对每个 key k做attention(吃2个向量,输出就是告诉你这2个向量有多么匹配或者可以说输入两个向量输出一个分数\alpha(而怎么去吃2个向量output一个分数,有很多不同的做法))。这里要预测潮水的下一个词,所以乘 , 乘上 , 乘上 再经过soft-max分别得到 到 。

    3)我们用 和每一个v相乘, 和 相乘加上 和 相乘。以此类推并相加,最终得到 。

    4)然后经过很多层的self-attention,预测得到”退了”这个词汇。

    同理,现在要预测”退了”的下一个词汇,按照前面的流程可以得到 ,然后经过很多层的self-attention层,得到”就”这个词汇。

    GPT的神奇之处在于它可以在完全没有训练数据的情况下,就可以做到阅读理解,摘要,翻译。折线图中显示了它在参数量上升的情况下,F1的值的效果。

    1.Transformer的问题:
    word Embedding 无上下文
    监督数据太少

    解决方法:
    Contextual Word Embedding

    2.ELMo( E mbeddings from L anguages Mo del)
    - 多层双向的LSTM的NNLM
    - RNN-based language models(trained from lots of sentences)
    ELMo的问题:
    Contextual Word Embedding作为特征
    不适合特定任务

    3.OpenAI GPT的改进
    根据任务Fine-Tuning
    使用Transformer替代RNN/LSTM

    OpenAI GPT的问题:
    单向信息流的问题
    Pretraining(1)和Fine-Tuning(2)不匹配
    解决办法:
    Masked LM
    NSP Multi-task Learning
    Encoder again

    Tips:
    - 使用中文模型
    - max_seq_length可以小一点,提高效率
    - 内存不够,需要调整train_batch_size
    - 有足够多的领域数据,可以尝试Pretraining

问:预训练模型综述--Albert,xlnet,bert,word2vec?

  • 答: Albert,xlnet,bert,word2vec

    通过预训练模型实现迁移学习,迁移学习本质上是在一个数据集上训练模型,然后对该模型进行调整,以在不同的数据集上执行不同的自然语言处理功能。

    1. word2vec

    线性模型

    很神奇的地方,从而也说明高维空间映射的词向量可以很好体现真实世界中token之间的关系。如:king-man = queen-woman

    负采样

    由于训练词向量模型的目标不是为了得到一个多么精准的语言模型,而是为了获得它的副产物——词向量。所以要做到的不是在几万几十万个token中艰难计算softmax获得最优的那个词(就是预测的对于给定词的下一词),而只需能做到在几个词中找到对的那个词就行,这几个词包括一个正例(即直接给定的下一词),和随机产生的噪声词(采样抽取的几个负例),就是说训练一个sigmoid二分类器,只要模型能够从中找出正确的词就认为完成任务。

    这种负采样思想也应用到之后的BERT里,只不过从word-level变成sentence-level,这样能获取句子间关联关系。

    缺点是上下文无关(static):

    因而为了让句子有一个整体含义(context),大家会在下游具体的NLP任务中基与词向量的序列做encoding操作。

    下面是一个比较表格,模型不细讲了,预测目标这里的next word下一个词,是所有传统语言模型都做的事——寻找下一个词填什么。

    BERT模型进一步增加词向量模型泛化能力,充分描述字符级、词级、句子级甚至句间关系特征。

    真正的双向encoding:

    Masked LM,类似完形填空,尽管仍旧看到所有位置信息,但需要预测的词已被特殊符号代替,可以放心双向encoding。

    Transformer做encoder实现上下文相关(context):

    使用transformer而不是bi-LSTM做encoder,可以有更深的层数、具有更好并行性。并且线性的Transformer比lstm更易免受mask标记影响,只需要通过self-attention减小mask标记权重即可,而lstm类似黑盒模型,很难确定其内部对于mask标记的处理方式。

    提升至句子级别:

    学习句子/句对关系表示,句子级负采样。首先给定的一个句子,下一句子正例(正确词),随机采样一句负例(随机采样词),句子级上来做二分类(即判断句子是当前句子的下一句还是噪声),类似word2vec的单词级负采样。

    二、BERT细则

    这里主要介绍BERT的三个亮点Masked LM、transformer、sentence-level。

    1. Masked Language Model

    原本叫cloze test,是完形填空的意思。

    随机mask语料中15%的token,然后将masked token 位置输出的最终隐层向量送入softmax,来预测masked token。

    这样输入一个句子,每次只预测句子中大概15%的词,所以BERT训练很慢。。。(但是google设备NB。。)

    而对于盖住词的特殊标记,在下游NLP任务中不存在。因此,为了和后续任务保持一致,作者按一定的比例在需要预测的词位置上输入原词或者输入某个随机的词。如:my dog is hairy

    2. Transformer —— attention is all you need

    Transformer模型是2018年5月提出的,可以替代传统RNN和CNN的一种新的架构,用来实现机器翻译,论文名称是attention is all you need。无论是RNN还是CNN,在处理NLP任务时都有缺陷。CNN是其先天的卷积操作不很适合序列化的文本,RNN是其没有并行化,很容易超出内存限制(比如50tokens长度的句子就会占据很大的内存)。

    下面左图是transformer模型一个结构,分成左边Nx框框的encoder和右边Nx框框的decoder,相较于RNN+attention常见的encoder-decoder之间的attention(上边的一个橙色框),还多出encoder和decoder内部的self-attention(下边的两个橙色框)。每个attention都有multi-head特征。最后,通过position encoding加入没考虑过的位置信息。

    下面从multi-head attention,self-attention, position encoding几个角度介绍。

    multi-head attention:

    将一个词的vector切分成h个维度,求attention相似度时每个h维度计算。由于单词映射在高维空间作为向量形式,每一维空间都可以学到不同的特征,相邻空间所学结果更相似,相较于全体空间放到一起对应更加合理。比如对于vector-size=512的词向量,取h=8,每64个空间做一个attention,学到结果更细化。

    self-attention:

    每个词位的词都可以无视方向和距离,有机会直接和句子中的每个词encoding。比如上面右图这个句子,每个单词和同句其他单词之间都有一条边作为联系,边的颜色越深表明联系越强,而一般意义模糊的词语所连的边都比较深。比如:law,application,missing,opinion。。。

    position encoding:

    因为transformer既没有RNN的recurrence也没有CNN的convolution,但序列顺序信息很重要,比如你欠我100万明天要还和我欠你100万明天要还的含义截然不同。。。

    transformer计算token的位置信息这里使用正弦波↓,类似模拟信号传播周期性变化。这样的循环函数可以一定程度上增加模型的泛化能力。

    但BERT直接训练一个position embedding来保留位置信息,每个位置随机初始化一个向量,加入模型训练,最后就得到一个包含位置信息的embedding(简单粗暴。。),最后这个position embedding和word embedding的结合方式上,BERT选择直接相加。

    3. sentence-level representation

    在很多任务中,仅仅靠encoding是不足以完成任务的(这个只是学到了一堆token级的特征),还需要捕捉一些句子级的模式,来完成SLI、QA、dialogue等需要句子表示、句间交互与匹配的任务。对此,BERT又引入了另一个极其重要却又极其轻量级的任务,来试图把这种模式也学习到。

    句子级负采样

    句子级别的连续性预测任务,即预测输入BERT的两端文本是否为连续的文本。训练的时候,输入模型的第二个片段会以50%的概率从全部文本中随机选取,剩下50%的概率选取第一个片段的后续的文本。 即首先给定的一个句子(相当于word2vec中给定context),它下一个句子即为正例(相当于word2vec中的正确词),随机采样一个句子作为负例(相当于word2vec中随机采样的词),然后在该sentence-level上来做二分类(即判断句子是当前句子的下一句还是噪声)。

    句子级表示

    BERT是一个句子级别的语言模型,不像ELMo模型在与下游具体NLP任务拼接时需要每层加上权重做全局池化,BERT可以直接获得一整个句子的唯一向量表示。它在每个input前面加一个特殊的记号[CLS],然后让Transformer对[CLS]进行深度encoding,由于Transformer是可以无视空间和距离的把全局信息encoding进每个位置的,而[CLS]的最高隐层作为句子/句对的表示直接跟softmax的输出层连接,因此其作为梯度反向传播路径上的“关卡”,可以学到整个input的上层特征。

    segment embedding

    对于句对来说,EA和EB分别代表左句子和右句子;对于句子来说,只有EA。这个EA和EB也是随模型训练出来的。

    如下图所示,最终输入结果会变成下面3个embedding拼接的表示。

    首先,XLNet 是一个类似 BERT 的模型,而不是完全不同的模型。但这是一个非常有前途和潜力的。总之,XLNet是一种通用的自回归预训练方法。

    那么什么是自回归(AR)语言模型?

    AR语言模型是一种使用上下文词来预测下一个词的模型。但是在这里,上下文单词被限制在两个方向,前向或后向。

    AR 语言模型的优势是擅长生成式自然语言处理任务。 因为在生成上下文时,通常是前向的。AR 语言模型很自然地适用于此类 NLP 任务。

    但AR语言模型有一些缺点,它只能使用前向上下文或后向上下文,这意味着它不能同时使用前向和后向上下文。

    自回归语言模型有优点有缺点,缺点是只能利用上文或者下文的信息,不能同时利用上文和下文的信息,当然,貌似ELMO这种双向都做,然后拼接看上去能够解决这个问题,因为融合模式过于简单,所以效果其实并不是太好。它的优点,其实跟下游NLP任务有关,比如生成类NLP任务,比如文本摘要,机器翻译等,在实际生成内容的时候,就是从左向右的,自回归语言模型天然匹配这个过程。而Bert这种DAE模式,在生成类NLP任务中,就面临训练过程和应用过程不一致的问题,导致生成类的NLP任务到目前为止都做不太好。

    与 AR 语言模型不同,BERT 被归类为自动编码器(AE)语言模型。

    AE 语言模型旨在从损坏的输入重建原始数据。

    损坏的输入意味着我们在预训练阶段用 [MASK] 替换原始词 into 。目标是预测 into 得到原始句子。

    AE 语言模型的优势是,它可以从向前和向后的方向看到上下文。

    但 AE 语言模型也有其缺点。它在预训练中使用 [MASK] ,但这种人为的符号在调优时在真实数据中并不存在,会导致预训练-调优的差异。[MASK] 的另一个缺点是它假设预测(掩蔽的)词 在给定未屏蔽的 词 的情况下彼此独立。例如,我们有一句话“它表明住房危机已经变成银行危机”。我们掩蔽“银行业”和“危机”。在这里注意,我们知道掩蔽的“银行业”和“危机”包含彼此的隐含关系。但 AE 模型试图预测“银行业”给予未掩蔽的 词,并预测“危机”分别给出未掩蔽的 词。它忽略了“银行业”与“危机”之间的关系。换句话说,它假设预测(掩蔽)的标记彼此独立。但是我们知道模型应该学习预测(掩蔽)词之间的这种相关性来预测其中一个词。

    作者想要强调的是,XLNet 提出了一种让 AR 语言模型从双向上下文中学习的新方法,以避免 MASK 方法在 AE 语言模型中带来的缺点。
    XLNet的出发点就是:能否融合自回归LM和DAE LM两者的优点。就是说如果站在自回归LM的角度,如何引入和双向语言模型等价的效果;如果站在DAE LM的角度看,它本身是融入双向语言模型的,如何抛掉表面的那个[Mask]标记,让预训练和Fine-tuning保持一致。当然,XLNet还讲到了一个Bert被Mask单词之间相互独立的问题,我相信这个不太重要,原因后面会说。当然,我认为这点不重要的事情,纯粹是个人观点,出错难免,看看就完了,不用较真。

    AR 语言模型只能向前或向后使用上下文,那么如何让它从双向上下文中学习呢?

    语言模型包括两个阶段,即预训练阶段和调优阶段。XLNet 专注于预训练阶段。在预训练阶段,它提出了一个名为排列语言建模的新目标。我们可以从这个名称知道基本思想,它使用排列。

    这里我们举一个例子来解释。序列的次序是 [x1, x2, x3, x4] 。这种序列的所有排列如下。

    因此对于这 4 个词的([图片上传失败...(image-c7a4e0-1570519576567)]

    )句子,有 24([图片上传失败...(image-d738b7-1570519576567)]

    )个排列。

    情景是我们想要预测 x3 。因此在 24 个排列中有 4 种模式,分别 x3 位于第 1 位,第 2 位,第 3 位,第 4 位。

    当然,上面讲的仍然是基本思想。难点其实在于具体怎么做才能实现上述思想。首先,需要强调一点,尽管上面讲的是把句子X的单词排列组合后,再随机抽取例子作为输入,但是,实际上你是不能这么做的,因为Fine-tuning阶段你不可能也去排列组合原始输入。所以,就必须让预训练阶段的输入部分,看上去仍然是x1,x2,x3,x4这个输入顺序,但是可以在Transformer部分做些工作,来达成我们希望的目标。具体而言,XLNet采取了Attention掩码的机制,你可以理解为,当前的输入句子是X,要预测的单词Ti是第i个单词,前面1到i-1个单词,在输入部分观察,并没发生变化,该是谁还是谁。但是在Transformer内部,通过Attention掩码,从X的输入单词里面,也就是Ti的上文和下文单词中,随机选择i-1个,放到Ti的上文位置中,把其它单词的输入通过Attention掩码隐藏掉,于是就能够达成我们期望的目标(当然这个所谓放到Ti的上文位置,只是一种形象的说法,其实在内部,就是通过Attention Mask,把其它没有被选到的单词Mask掉,不让它们在预测单词Ti的时候发生作用,如此而已。看着就类似于把这些被选中的单词放到了上文Context_before的位置了)。具体实现的时候,XLNet是用“双流自注意力模型”实现的,细节可以参考论文,但是基本思想就如上所述,双流自注意力机制只是实现这个思想的具体方式,理论上,你可以想出其它具体实现方式来实现这个基本思想,也能达成让Ti看到下文单词的目标。

    上面说的Attention掩码,我估计你还是没了解它的意思,我再用例子解释一下。Attention Mask的机制,核心就是说,尽管当前输入看上去仍然是x1->x2->x3->x4,但是我们已经改成随机排列组合的另外一个顺序x3->x2->x4->x1了,如果用这个例子用来从左到右训练LM,意味着当预测x2的时候,它只能看到上文x3;当预测x4的时候,只能看到上文x3和x2,以此类推……这样,比如对于x2来说,就看到了下文x3了。这种在输入侧维持表面的X句子单词顺序,但是其实在Transformer内部,看到的已经是被重新排列组合后的顺序,是通过Attention掩码来实现的。如上图所示,输入看上去仍然是x1,x2,x3,x4,可以通过不同的掩码矩阵,让当前单词Xi只能看到被排列组合后的顺序x3->x2->x4->x1中自己前面的单词。这样就在内部改成了被预测单词同时看到上下文单词,但是输入侧看上去仍然维持原先的单词顺序了。关键要看明白上图右侧那个掩码矩阵,我相信很多人刚开始没看明白,因为我刚开始也没看明白,因为没有标出掩码矩阵的单词坐标,它的坐标是1-2-3-4,就是表面那个X的单词顺序,通过掩码矩阵,就能改成你想要的排列组合,并让当前单词看到它该看到的所谓上文,其实是掺杂了上文和下文的内容。这是attention mask来实现排列组合的背后的意思。

    ALBERT相比于BERT的改进
    ALBERT也是采用和BERT一样的Transformer的encoder结果,激活函数使用的也是GELU,在讲解下面的内容前,我们规定几个参数,词的embedding我们设置为E,encoder的层数我们设置为L,hidden size即encoder的输出值的维度我们设置为H,前馈神经网络的节点数设置为4H,attention的head个数设置为H/64。

    在ALBERT中主要有三个改进方向。

    1、对Embedding因式分解(Factorized embedding parameterization)
    在BERT中,词embedding与encoder输出的embedding维度是一样的都是768。但是ALBERT认为,词级别的embedding是没有上下文依赖的表述,而隐藏层的输出值不仅包括了词本生的意思还包括一些上下文信息,理论上来说隐藏层的表述包含的信息应该更多一些,因此应该让H>>E,所以ALBERT的词向量的维度是小于encoder输出值维度的。

    在NLP任务中,通常词典都会很大,embedding matrix的大小是E×V,如果和BERT一样让H=E,那么embedding matrix的参数量会很大,并且反向传播的过程中,更新的内容也比较稀疏。

    结合上述说的两个点,ALBERT采用了一种因式分解的方法来降低参数量。首先把one-hot向量映射到一个低维度的空间,大小为E,然后再映射到一个高维度的空间,说白了就是先经过一个维度很低的embedding matrix,然后再经过一个高维度matrix把维度变到隐藏层的空间内,从而把参数量从O(V×H) O(V×H)O(V×H)降低到了O(V×E+E×H) O(V×E+E×H)O(V×E+E×H),当E<<H时参数量减少的很明显。

    下图是E选择不同值的一个实验结果,尴尬的是,在不采用参数共享优化方案时E设置为768效果反而好一些,在采用了参数共享优化方案时E取128效果更好一些。

    2、跨层的参数共享(Cross-layer parameter sharing)
    在ALBERT还提出了一种参数共享的方法,Transformer中共享参数有多种方案,只共享全连接层,只共享attention层,ALBERT结合了上述两种方案,全连接层与attention层都进行参数共享,也就是说共享encoder内的所有参数,同样量级下的Transformer采用该方案后实际上效果是有下降的,但是参数量减少了很多,训练速度也提升了很多。

    下图是BERT与ALBERT的一个对比,以base为例,BERT的参数是108M,而ALBERT仅有12M,但是效果的确相比BERT降低了两个点。由于其速度快的原因,我们再以BERT xlarge为参照标准其参数是1280M,假设其训练速度是1,ALBERT的xxlarge版本的训练速度是其1.2倍,并且参数也才223M,评判标准的平均值也达到了最高的88.7

    除了上述说了训练速度快之外,ALBERT每一层的输出的embedding相比于BERT来说震荡幅度更小一些。下图是不同的层的输出值的L2距离与cosine相似度,可见参数共享其实是有稳定网络参数的作用的。

    3、句间连贯(Inter-sentence coherence loss)
    BERT的NSP任务实际上是一个二分类,训练数据的正样本是通过采样同一个文档中的两个连续的句子,而负样本是通过采用两个不同的文档的句子。该任务主要是希望能提高下游任务的效果,例如NLI自然语言推理任务。但是后续的研究发现该任务效果并不好,主要原因是因为其任务过于简单。NSP其实包含了两个子任务,主题预测与关系一致性预测,但是主题预测相比于关系一致性预测简单太多了,并且在MLM任务中其实也有类型的效果。

    这里提一下为啥包含了主题预测,因为正样本是在同一个文档中选取的,负样本是在不同的文档选取的,假如我们有2个文档,一个是娱乐相关的,一个是新中国成立70周年相关的,那么负样本选择的内容就是不同的主题,而正样都在娱乐文档中选择的话预测出来的主题就是娱乐,在新中国成立70周年的文档中选择的话就是后者这个主题了。

    在ALBERT中,为了只保留一致性任务去除主题识别的影响,提出了一个新的任务 sentence-order prediction(SOP),SOP的正样本和NSP的获取方式是一样的,负样本把正样本的顺序反转即可。SOP因为实在同一个文档中选的,其只关注句子的顺序并没有主题方面的影响。并且SOP能解决NSP的任务,但是NSP并不能解决SOP的任务,该任务的添加给最终的结果提升了一个点。

    4、移除dropout
    除了上面提到的三个主要优化点,ALBERT的作者还发现一个很有意思的点,ALBERT在训练了100w步之后,模型依旧没有过拟合,于是乎作者果断移除了dropout,没想到对下游任务的效果竟然有一定的提升。这也是业界第一次发现dropout对大规模的预训练模型会造成负面影响。

    参考链接:
    彻底搞懂BERT
    什么是 XLNet,为何它会超越 BERT?
    XLNet:运行机制及和Bert的异同比较
    一文揭开ALBERT的神秘面纱
    不懂word2vec,还敢说自己是做NLP?

问:【Paper Reading】VideoBERT: A Joint Model for Videoand Language Representation Learning?

  • 答:数据准备:
    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. 我们在4.4节中对此进行了说明,在这里我们执行“零镜头”分类。
    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视频,平均时长5.26分钟,总共176个小时。
    9. 我们使用提供的数据集分割,其中1333个视频用于培训,457个用于验证。
    Video and Language Preprocessing
    1. 对于每个输入的视频,我们以每秒20帧的速度采样,并在视频上创建30帧(1.5秒)不重叠窗口的剪辑。
    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为0.4。我们在训练分割上使用5倍交叉验证来设置超参数,并在验证集上报告性能。我们训练了批大小为128的40K迭代的模型。我们使用相同的亚当优化在VideoBERT前训练,并设置初始学习率为1e-3与线性衰减时间表。
    Discussion and conclusion
    1. 使用空间细粒度的视觉表示非常重要,而不是只在框架或剪辑级别工作,这样我们就可以区分单个对象及其属性。
    2. 我们计划在其他视频理解任务和烹饪之外的其他领域评估我们的方法。