【NLP面试QA】预训练模型

目录

  • 自回归语言模型与自编码语言
  • Bert
    • Bert 中的预训练任务

      • Masked Language Model
      • Next Sentence Prediction
    • Bert 的 Embedding
    • BERT-wwm
    • Roberta 与 Bert 的区别
    • ERNIE 与 Bert 的区别
  • XLNet
    • 排列语言模型(Permutation Language Model,PLM)
    • 双流注意力机制(Two-Stream Self-Attention)
    • 部分预测(Partial Prediction)
    • Transformer-XL
  • ALBERT
    • 对Embedding因式分解
    • 跨层参数共享
    • 句间连贯性损失

自回归语言模型与自编码语言

  • 自回归语言模型

    • 通过给定文本的上文,对下一个字进行预测
    • 优点:对文本序列联合概率的密度估计进行建模,使得该模型更适用于一些生成类的NLP任务,因为这些任务在生成内容的时候就是从左到右的,这和自回归的模式天然匹配。
    • 缺点:联合概率是按照文本序列从左至右进行计算的,因此无法提取下文信息;
    • 代表模型:ELMo/GPT1.0/GPT2.0/XLNet(XLNet 做了些改进使得能够提取到下文特征)
  • 自编码语言模型
    • 其通过随机 mask 掉一些单词,在训练过程中根据上下文对这些单词进行预测,使预测概率最大化。其本质为去噪自编码模型,加入的 [MASK] 即为噪声,模型对 [MASK] 进行预测即为去噪。
    • 优点:能够利用上下文信息得到双向特征表示
    • 缺点:其引入了独立性假设,即每个 [MASK] 之间是相互独立的。这实际上是语言模型的有偏估计,另外,由于预训练中 [MASK] 的存在,使得模型预训练阶段的数据与微调阶段的不匹配,使其难以直接用于生成任务。
    • 代表模型:Bert/Roberta/ERNIE

Bert

Bert 中的预训练任务
Masked Language Model

在预训练任务中,15%的 Word Piece 会被 mask,这15%的 Word Piece 中,80%的时候会直接替换为 [Mask] ,10%的时候将其替换为其它任意单词,10%的时候会保留原始Token

  • 没有 100% mask 的原因

    • 如果句子中的某个Token100%都会被mask掉,那么在fine-tuning的时候模型就会有一些没有见过的单词
  • 加入 10% 随机 token 的原因
    • Transformer 要保持对每个输入token的分布式表征,否则模型就会记住这个 [mask] 是token ’hairy‘
    • 另外编码器不知道哪些词需要预测的,哪些词是错误的,因此被迫需要学习每一个 token 的表示向量
  • 另外,每个 batchsize 只有 15% 的单词被 mask 的原因,是因为性能开销的问题,双向编码器比单项编码器训练要更慢
Next Sentence Prediction

仅仅一个MLM任务是不足以让 BERT 解决阅读理解等句子关系判断任务的,因此添加了额外的一个预训练任务,即 Next Sequence Prediction。

具体任务即为一个句子关系判断任务,即判断句子B是否是句子A的下文,如果是的话输出’IsNext‘,否则输出’NotNext‘。

训练数据的生成方式是从平行语料中随机抽取的连续两句话,其中50%保留抽取的两句话,它们符合IsNext关系,另外50%的第二句话是随机从预料中提取的,它们的关系是NotNext的。这个关系保存在图4中的[CLS]符号中

但实际上这个任务是过于简单了的,对于模型的预训练并没有太大的帮助,在 Roberta 的模型中将其去掉了

Bert 的 Embedding

BERT的输入表征由三种Embedding求和而成:

  • Token Embeddings:即传统的词向量层,每个输入样本的首字符需要设置为 [CLS],可以用于之后的分类任务,若有两个不同的句子,需要用 [SEP] 分隔,且最后一个字符需要用 [SEP] 表示终止
  • Segment Embeddings:为 \([0, 1]\) 序列,用来在 NSP 任务中区别两个句子,便于做句子关系判断任务
  • Position Embeddings:与 Transformer 中的位置向量不同,BERT 中的位置向量是直接训练出来的
BERT-wwm
  • Whole Word Masking 即全词 Mask,打破了传统 Bert 的独立性假设,即每个 [MASK] 之间是相互独立的。这使得同一个词中不同字符的预测的上下文语境是相同的,加强同一个词不同字符之间的相关性。
Roberta 与 Bert 的区别
  • 训练参数经过了仔细的挑参,训练数据更大,训练 Batch Size 更大
  • 认为 Next Sentence Prediction 任务没有太大帮助,将 NSP loss 去掉,输入改为从一个文档中连续抽取句子,当到达文档末尾时,加一个分隔符再抽样下一个文档的句子。
  • Bert 的语料在预处理的时候就会被 Mask,在训练阶段保持不变;而 Roberta 中改为动态的 Mask,使得每次读取到的数据都不一样(具体是将数据复制10遍,统一随机 Mask)
ERNIE 与 Bert 的区别

由于 Bert 仅对单个的字符进行 Mask 很容易使得模型提取到字搭配的低层次的语义特征,而对于短语和实体层次的语义信息抽取能力较弱。因此将外部知识引入到预训练任务中,主要有三个层次的预训练任务

  • Basic-Level Masking: 跟bert一样对单字进行mask,很难学习到高层次的语义信息;
  • Phrase-Level Masking: 输入仍然是单字级别的,mask连续短语;
  • Entity-Level Masking: 首先进行实体识别,然后将识别出的实体进行mask。

XLNet

XLNet 针对自回归语言模型单向编码以及 BERT 类自编码语言模型的有偏估计的缺点,提出了一种广义自回归语言预训练方法。

排列语言模型(Permutation Language Model,PLM)

通过引入一个排列语言模型,希望语言模型用自回归的方法从左往右预测下一个字符的时候,不仅要包含上文信息,同时也要能够提取到对应字符的下文信息,且不需要引入Mask符号。

首先将句子进行重排列,重排列后的末尾几个字就能够看见其之后的一些词,根据能够看到的对象进行相应的 Mask 即可。在实现上是通过对 Attention 矩阵增加掩码来选择哪些词能够被看见哪些词不能够被看见的。

双流注意力机制(Two-Stream Self-Attention)

由于我们有多层的 Transformer,需要在最后一层预测最末尾的几个字,比如最大长度为 512,最后一层只需要预测最后 10 个词,我们需要所有字的信息都能传输到最后一层,但又希望最后在预测某个字的时候看不到这个字的信息,因此引入了双流注意力机制

Query Stream 的掩码矩阵中仅传输位置信息,用于表明预测顺序是什么样的;Content Stream 与传统的 Transformer 一致,包括内容信息和位置信息,确保所有的字信息都能传输到最后一层。个 Attention Stream 的区别仅在于掩码是否能看见自己,以及输入一个是仅有位置信息,另一个是包括位置和内容信息。

部分预测(Partial Prediction)

如果重排列之后对所有字都进行预测的话模型难以收敛(可能是前几个字看到的字的个数太少),计算量也大。因此仅对最后 15% 的字进行预测

Transformer-XL

传统的 Transformer 的输入长度限制在 512,更长的文本信息模型是学不到的。

  • 片段递归机制(segment-level recurrence mechanism):指的是当前时刻的隐藏信息在计算过程中,将通过循环递归的方式利用上一时刻较浅层的隐藏状态(上一时刻的隐藏状态均存储到一个临时存储空间中),这使得每次的计算将利用更大长度的上下文信息,大大增加了捕获长距离信息的能力。
  • 相对位置编码(Relative Positional Encodings):采用了片段递归机制之后,不同片段的位置信息是一样的然后叠加在了一起,这是不合适的,因此提出了相对位置编码的方式来替代绝对位置编码

ALBERT

ALBERT 贡献在于,其提出了两种模型参数缩减的技术,使得在减小模型重量的同时,模型性能不会受到太大的影响。

对Embedding因式分解

采用了一个因式分解的方式对 Embedding 层的矩阵进行压缩。简单来说,就是先将 one-hot 映射到一个低维空间 \(E\),然后再将其从低维空间映射到高维空间 \(H\),即参数量的变化为 \(O(V \times H) => O(V \times E + E \times H)\),且论文也用实验证明,Embedding的参数缩减对整个模型的性能并没有太大的影响

跨层参数共享

多层 Transformer 共享参数,提高参数利用率,使得参数量得到有效的减少。(参数共享的对象为 Transformer 中的 feed-forward layer 参数和 self-attention 的参数)

句间连贯性损失

ALBERT 针对预训练任务中的 NSP 任务进行改进,即句间连贯性判断。NSP 任务仅需判断两个文段是否是一个主题即可,该任务太简单了。句间连贯性判断任务需要判断两个文段的顺序是否颠倒,强迫模型去学习文段的语意,这相比于 NSP 任务更加巧妙。

该系列文章是个人为面试做的知识储备,如有出错,请大家指正,谢谢!

原文地址:https://www.cnblogs.com/sandwichnlp/p/12590380.html

时间: 2024-10-29 10:23:00

【NLP面试QA】预训练模型的相关文章

【NLP面试QA】词向量

目录 文本表示哪些方法? one-hot存在的问题 SoW & BoW tf-idf PMI 统计语言模型(N-gram模型) 神经网络语言模型(NNLM) word2vec word2vec 与 NNLM 的区别 CBoW Skip-gram 层次softmax 负采样 word2vec的其他细节 GloVe word2vec 和 fastText 对比有什么区别? 文本表示哪些方法? 基于one-hot.tf-idf等的bag-of-words: 基于词向量的固定表征:word2vec.fa

百度NLP预训练模型ERNIE2.0最强实操课程来袭!【附教程】

2019年3月,百度正式发布NLP模型ERNIE,其在中文任务中全面超越BERT一度引发业界广泛关注和探讨.经过短短几个月时间,百度ERNIE再升级,发布持续学习的语义理解框架ERNIE 2.0,及基于此框架的ERNIE 2.0预训练模型.继1.0后,ERNIE英文任务方面取得全新突破,在共计16个中英文任务上超越了BERT和XLNet, 取得了SOTA效果. 本篇内容可以说是史上最强实操课程,由浅入深完整带大家试跑ERNIE,大家可前往AI Studio fork代码 (https://ais

NLP预训练模型-百度ERNIE2.0的效果到底有多好【附用户点评】

ERNIE是百度自研的持续学习语义理解框架,该框架支持增量引入词汇(lexical).语法 (syntactic) .语义(semantic)等3个层次的自定义预训练任务,能够全面捕捉训练语料中的词法.语法.语义等潜在信息. ERNIE2.0实现了在中英文16个任务上的最优效果,具体效果见下方列表. 一.ERNIE2.0中文效果验证 我们在 9 个任务上验证 ERNIE 2.0 中文模型的效果.这些任务包括:自然语言推断任务 XNLI:阅读理解任务 DRCD.DuReader.CMRC2018:

BERT预训练模型的演进过程!(附代码)

1. 什么是BERT BERT的全称是Bidirectional Encoder Representation from Transformers,是Google2018年提出的预训练模型,即双向Transformer的Encoder,因为decoder是不能获要预测的信息的.模型的主要创新点都在pre-train方法上,即用了Masked LM和Next Sentence Prediction两种方法分别捕捉词语和句子级别的representation. Bert最近很火,应该是最近最火爆的A

预训练模型:XLNet 和他的先辈们

预训练模型 在CV中,预训练模型如ImagNet取得很大的成功,而在NLP中之前一直没有一个可以承担此角色的模型,目前,预训练模型如雨后春笋,是当今NLP领域最热的研究领域之一. 预训练模型属于迁移学习,即在某一任务上训练的模型,经过微调(finetune)可以应用到其它任务上. 在NLP领域,最早的预训练模型可以说是word2vec, Mikolov应用语言模型进行训练,产生的词向量(word embeddings)可以用于其他任务上,这样的词向量在目标任务上,可以固定不变,也可以随着模型训练

XLNet预训练模型,看这篇就够了!(代码实现)

1. 什么是XLNet XLNet 是一个类似 BERT 的模型,而不是完全不同的模型.总之,XLNet是一种通用的自回归预训练方法.它是CMU和Google Brain团队在2019年6月份发布的模型,最终,XLNet 在 20 个任务上超过了 BERT 的表现,并在 18 个任务上取得了当前最佳效果(state-of-the-art),包括机器问答.自然语言推断.情感分析和文档排序. 作者表示,BERT 这样基于去噪自编码器的预训练模型可以很好地建模双向语境信息,性能优于基于自回归语言模型的

中文预训练模型ERNIE2.0模型下载及安装

2019年7月,百度ERNIE再升级,发布持续学习的语义理解框架ERNIE 2.0,及基于此框架的ERNIE 2.0预训练模型, 它利用百度海量数据和飞桨(PaddlePaddle)多机多卡高效训练优势,通过深度神经网络与多任务学习等技术,持续学习海量数据和知识.基于该框架的艾尼(ERNIE)预训练模型,已累计学习10亿多知识,包括词法.句法.语义等多个维度的自然语言知识,有很强的通用语义表示能力,适用于各种NLP应用场景,效果提升明显,使用高效.便捷. 本篇内容教大家如何下载和使用! 一.预训

Caffe学习3-使用预训练模型finetuning

该篇陈述了在采用imagenet大数据集合上使用caffenet预训练得到caffemodel,然后应用该caffemodel进一步fintuning图像风格数据库style.下面为主要步骤: #采用别人的预训练模型,在自己的数据库上进行微调(fine-tunning) #fine-tune是应用别人在大数据集合上训练到一定程度的caffemodel,在这进行微调.这比随机化参数要好,因为该模型可能已经接近最优! #可以省时间,省资源.也可以克服没有大数据的困扰 #这里采用imagenet数据集

预训练模型与Keras.applications.models权重资源地址

什么是预训练模型 简单来说,预训练模型(pre-trained model)是前人为了解决类似问题所创造出来的模型.你在解决问题的时候,不用从零开始训练一个新模型,可以从在类似问题中训练过的模型入手. 比如说,你如果想做一辆自动驾驶汽车,可以花数年时间从零开始构建一个性能优良的图像识别算法,也可以从Google在ImageNet数据集上训练得到的Inception model(一个预训练模型)起步,来识别图像. 一个预训练模型可能对于你的应用中并不是100%的准确对口,但是它可以为你节省大量功夫