前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >预训练语言模型合辑~

预训练语言模型合辑~

作者头像
小爷毛毛_卓寿杰
发布2022-05-10 11:38:24
5880
发布2022-05-10 11:38:24
举报
文章被收录于专栏:Soul Joy Hub

ERNIE 1.0

实体级别连续MASK

针对有两个及两个以上连续字组成的词,随机mask字割裂了连续字之间的相关性,使模型不太容易学习到词的语义信息。比如一句话:‘北京是中国的首都,是一座美丽的城市’,在bert的随机mask LM任务中,可能是把‘京’mask掉在再做预测,这样就把‘北京’两个字的语义割裂了。

针对bert存在的问题,ERNIE改变了mask的方式,不再是单个token的mask,而是加入了实体和短语的mask,这让模型具有了更强的语法学习能力。

在这里插入图片描述
在这里插入图片描述

上图直观地显示了BERT和ERNIE的采取的不同的masking策略,这是ERNIE引入知识(Knowledge Inegration)的主要手段,介绍如下:

  • Basic-Level Masking:这就是BERT中采用的token粒度的随机masked,只能学习到基本的语义信息,对于深层语义信息比较难建模。
  • Phrase-Level Masking:短语是几个字词组成的概念单元。英文中可通过词法分析(lexical analysis and chunking tools)获取短语边界,中文中可以使用分词工具获取word/phrase信息。然后,随机masked掉一些phrase。
  • Entity-Level Masking:通过命名实体识别(Named Entity Recognition)将实体识别出来,并随机masked掉一些entity。

在每个epoch会随机选择句子是mask_word(mask实体和短语) 还是 mask_char(mask单字) 模式

更多的语料

ERNIE除了mask的重大改变,同时在训练数据集上增加了很多。bert使用了中文维基百科,ERNIE也同样使用了,并且在此基础上加入百度自有的数据集:百度百科(实体、强描述性)、百度新闻(专业通顺语料)、百度贴吧(多轮对话)。这三个数据集的侧重点不同,对模型应该也有较好的提升。对语料的处理加入了中文繁体–>简体,英文大写–>小写,词表大小为17964。

多轮对话

针对bert存在的第二个问题,ERNIE对NSP任务做了修改,输入层使用多轮对话来替代句子对分类任务。输入格式为[CLS]S1[SEP]S2[SEP]S3[SEP] ,这种组合可以表示多轮对话,例如QRQ、QRR、QQR,Q是提问,R是回答。随机替换R,然后让模型判断这个多轮对话是真的还是假的。

在这里插入图片描述
在这里插入图片描述

RoBerta

与bert区别

  • 更大的训练集,更大的 batch。
  • 不需要使用 NSP Loss。
  • 使用更长的训练 Sequence。
  • 动态 Mask。

RoBERTa 主要试验了 BERT 中的一些训练设置 (例如 NSP Loss 是否有意义,batch 的大小等),并找出最好的设置,然后再更大的数据集上训练 BERT。

更大的数据集

原来的 BERT 只使用了 16G 的数据集,而 RoBERTa 在更大的数据集上训练 BERT,使用了 160G 的语料

去掉 NSP Loss

BERT 在训练的过程中采用了 NSP Loss,原本用意是为了让模型能够更好地捕捉到文本的语义,给定两段语句 X = [x1, x2, …, xN] 和 Y = [y1, y2, …, yM],BERT 中的 NSP 任务需要预测 Y 是不是 出现在 X 的后面。

但是 NSP Loss 受到不少文章的质疑 ,例如 XLNet,RoBERTa 采用了一个实验验证 NSP Loss 的实用性。实验中采用了四种组合:

  • Segment-Pair + NSP:这个是原来 BERT 的训练方法,使用 NSP Loss,输入的两段文字 X 和 Y 可以包含多个句子,但是 X + Y 的长度要小于 512。
  • Sentence-Pair + NSP:与上一个基本类似,也使用 NSP Loss,但是输入的两段文字 X 和 Y 都分别是一个句子,因此一个输入包含的 token 通常比 Segment-Pair 少,所以要增大 batch,使总的 token 数量和 Sentence-Pair 差不多。
  • Full-Sentences:不使用 NSP,直接从一个或者多个文档中采样多个句子,直到总长度到达 512。当采样到一个文档末尾时,会在序列中添加一个文档分隔符 token,然后再从下一个文档采样。
  • Doc-Sentences:与 Full-Sentences 类似,不使用 NSP,但是只能从一个文档中采样句子,所以输入的长度可能会少于 512。Doc-Sentences 也需要动态调整 batch 大小,使其包含的 token 数量和 Full-Sentences 差不多。

RoBERTa 使用 NSP 和不使用 NSP。使用 Segment-Pair (多个句子) 要好于 Sentence-Pair (单个句子),实验结果显示使用单个句子会使 BERT 在下游任务的性能下降,主要原因可能是使用单个句子导致模型不能很好地学习长期的依赖关系。

中间两行是不使用 NSP Loss 的结果,两种方式都是比使用 NSP 效果要好的,这说明了 NSP Loss 实际上没什么作用,因此在 RoBERTa 中丢弃了 NSP Loss。

动态 Mask

原始的 BERT 在训练之前就把数据 Mask 了,然后在整个训练过程中都是保持数据不变的,称为 Static Mask。即同一个句子在整个训练过程中,Mask 掉的单词都是一样的。

RoBERTa 使用了一种 Dynamic Mask 的策略,将整个数据集复制 10 次,然后在 10 个数据集上都 Mask 一次,也就是每一个句子都会有 10 种 Mask 结果。使用 10 个数据集训练 BERT。

更大的 batch

之前的一些关于神经网络翻译的研究显示了使用一个大的 batch 并相应地增大学习率,可以加速优化并且提升性能。RoBERTa 也对 batch 大小进行了实验,原始的 BERT 使用的 batch = 256,训练步数为 1M,这与 batch = 2K,训练步数 125K 的计算量是一样的,与 batch = 8K 和训练步数为 31K 也是一样的。

Albert

Factorized embedding parameterization

在BERT、XLNet、RoBERTa中,词表的embedding size(E)和transformer层的hidden size(H)都是相等的,这个选择有两方面缺点:

从建模角度来讲,wordpiece向量应该是不依赖于当前内容的(context-independent),而transformer所学习到的表示应该是依赖内容的。所以把E和H分开可以更高效地利用参数,因为理论上存储了context信息的H要远大于E。

从实践角度来讲,NLP任务中的vocab size本来就很大,如果E=H的话,模型参数量就容易很大,而且embedding在实际的训练中更新地也比较稀疏。

因此作者使用了小一些的E(64、128、256、768),训练一个独立于上下文的embedding(VxE),之后计算时再投影到隐层的空间(乘上一个ExH的矩阵),相当于做了一个因式分解。

Cross-layer parameter sharing

跨层参数共享,就是不管12层还是24层都只用一个transformer。

作者对比了每层输入输出的L2距离和相似度,发现了BERT的结果比较震荡,而ALBERT就很稳定,可见ALBERT有稳定网络参数的作用。

Inter-sentence coherence loss

后BERT时代很多研究(XLNet、RoBERTa)都发现next sentence prediction没什么用处,所以作者也审视了一下这个问题,认为NSP之所以没用是因为这个任务不仅包含了句间关系预测,也包含了主题预测,而主题预测显然更简单些(比如一句话来自新闻财经,一句话来自文学小说),模型会倾向于通过主题的关联去预测。因此换成了SOP(sentence order prediction),预测两句话有没有被交换过顺序。实验显示新增的任务有1个点的提升。

MacBERT

MacBert4csc
MacBert4csc
  • 使用全词掩蔽和N-Gram掩蔽策略来选择候选tokens进行掩蔽,从单字符到4字符的掩蔽百分比为40%、30%、20%、10%。
  • 原始BERT模型使用[MASK] token进行掩蔽,但是[MASK] token在微调阶段从未出现,这会造成预训练任务与下游微调任务不一致;因此 MacBERT 使用类似的单词来掩蔽需要被掩蔽的单词。类似的单词可以通过同义词工具包(Synonyms)获得,该工具包是基于word2vec相似度计算来获取同义词的。选择一个N-gram进行掩码时,该论文将分别找到相似的单词。在极少数情况下,当没有相似的词时,会降级使用随机词替换。
  • 使用15%的百分比输入单词进行掩蔽,其中80%将替换为相似的单词,10%将替换为随机单词,剩下的10%将保留原始单词。
  • MacBERT 使用ALBERT提出的句子顺序预测(SOP)任务替换BERT原始的NSP任务,通过切换两个连续句子的原顺序创建负样本。

UniLM

T5

ELECTRA

GPT2

XLNet

  • transformer-xl https://zhuanlan.zhihu.com/p/84159401

https://zhuanlan.zhihu.com/p/70257427

bart

SpanBert

XLM

bilibili.com/video/BV1A64y1176Y?p=30

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ERNIE 1.0
    • 实体级别连续MASK
      • 更多的语料
        • 多轮对话
        • RoBerta
          • 与bert区别
            • 更大的数据集
              • 去掉 NSP Loss
                • 动态 Mask
                  • 更大的 batch
                  • Albert
                    • Factorized embedding parameterization
                      • Cross-layer parameter sharing
                        • Inter-sentence coherence loss
                        • MacBERT
                        • UniLM
                        • T5
                        • ELECTRA
                          • GPT2
                          • XLNet
                          • bart
                          • SpanBert
                          • XLM
                          相关产品与服务
                          批量计算
                          批量计算(BatchCompute,Batch)是为有大数据计算业务的企业、科研单位等提供高性价比且易用的计算服务。批量计算 Batch 可以根据用户提供的批处理规模,智能地管理作业和调动其所需的最佳资源。有了 Batch 的帮助,您可以将精力集中在如何分析和处理数据结果上。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档