Pretraning in NLP(预训练ELMo,GPT,BERT,XLNet)

本文详述了从ELMo到BERT,再到XLNet的预训练语言模型发展历程,包括各自的创新点、优缺点及应用场景,展示了自然语言处理技术的迭代与进步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
图像中的Pretraning往往是在大规模图像集上进行训练后,再在特定的任务上进行fine-turning。而nlp领域的fine-turning就是word embedding了。而词嵌入(例如word2vec,GloVe)通常是在一个较大的语料库上利用词的共现统计预训练得到的。例如king和queen上下文时常相同或相似,所以词向量相似,在向量空间中词距离很近。

但是word2vec在训练完毕后,某个单词的表示向量就已经确定了,这样的向量对于一词多义其实是没有帮助的,换一个语境单词所表达的意思就完全不一样的,即Word2vec的处理其实是与上下文无关的(虽然可能用了多个不同语境的句子进行计算,但是最后总会得到一个向量,无法得到区分)。虽然可以在此基础之上做一些聚类,但是也只是治标不治本。那如何做到静态变动态呢?

ELMo(embedding from language models)
paper:https://arxiv.org/pdf/1802.05365.pdf
官网:https://allennlp.org/elmo
code:https://github.com/allenai/allennlp
在这里插入图片描述
ELMO的fine-turning:在使用中动态调整。
即,对于已经用语言模型训练好了的Word Embedding,虽然无法处理多义词,但在句子中使用这个词向量的时候,会结合当前句子的上下文去调整这个单词的Embedding,就ok了。(有点不同的是,NLP的pre往往是无监督的)

  • 实现细节如上图。想要结合上下文信息,很自然的想法就是利用LSTM,<s>是句子的开头要逐词的预测下一位。(这个bilstm就可以理解为 nlp的fine-turning…有时候也把原输入embedding也拼接,即三个向量的cat)另外由于ELMo的输入是字母为单位,而不是单词,所以对于 hhhhhh 这种没有记录的单词也有很好的效果,至少能给出相近词性的解释。
  • ELMo是基于BiLSTM来抽取文本特征的,即得到左右绿色和蓝色的两个LSTM特征后,直接拼接(或者用alpha做控制)输入到模型中去做下游任务。
  • 最后通过打印出在不同下游预训练任务中哪些特征比较重要,如右下角,在不同的时候某些特征参数会格外的large,这在BERT等其他模型中可以观察到,即预训练模型究竟做了什么,它是怎么根据应用而适时的调整词向量的。
    在这里插入图片描述

缺点:

  • lstm串行,训练时间长。
  • 相比Transformer,仅仅使用特征拼接的话特征提取能力不足

GPT(Generative Pre-Training)
paper:https://www.cs.ubc.ca/~amuham01/LING530/papers/radford2018improving.pdf
code:https://openai.com/blog/language-unsupervised/
在这里插入图片描述
GPT和ELMo一样,也是先语言模型预训练embedding,然后再fine-turning。fine-turning的不同点在于

  • LSTM升级为Transformer提取特征,可以捕捉到更长范围的信息,并行+快速。
  • Bi舍弃,变成单向而不是双向。作者认为如果双向,在编码解码中有些单词可能会间接的作弊,即提前的‘’看到‘’自己。(但是实际证明上下文信息对词语的理解是非常重要了,所以之后的模型还是使用了双向,并使用别的trick解决“作弊”问题)

由于结果固定住了,GPT在使用时需要让 下游任务 往GPT的输出靠拢。

  • 序列标注:中文分词,词性标注,命名实体识别,语义角色标注等。
  • 分类任务:文本分类,情感计算
  • 句子关系判断:Entailment,QA,语义改写,自然语言推理
  • 生成式任务:机器翻译,文本摘要,写诗造句,看图说话
  • 细分下来有,自然语言十项全能挑战(decaNLP),涉及十个任务:问答,机器翻译,摘要,自然语言推理,情感分析,词性标注,关系抽取,目标导向对话,数据库查询生成和代词解析
    在这里插入图片描述

缺点:

  • 需要对输入数据调整
  • 单向

BERT(Bidirectional Encoder Representation from Transformer)
划时代之作。
paper:https://arxiv.org/abs/1810.04805
code:https://github.com/google-research/bert
在这里插入图片描述

  • LSTM太慢了啦 —> 还是Transformer吧,并行而且还没有梯度的问题
  • 人类理解语言会同时考虑上下文的 —> 双向吧,只要不看要预测的部分就可以

从图看BERT的输入是两个句子A和B进行成对训练,输入以【CLS】(classification token)隔开,句子则是【SEP】(special token)隔开。。然后特征由三个部分组成:词嵌入后的token embedding,句子类别的符号segment embedding句子A,句子B,词的位置信息position embedding,这跟Transformer里面是一致的。这三个部分相加之后作为输入。然后Loss=MLM+NSP进行fine-turning:

  • Masked Language Model(MLM)。灵感来自完型填空,先扣掉(以【MASK】标记),再尝试恢复。【MASK】总词的15%,在15%中:80%用[MASK]标记替换,10%用其他的词随机替换,10%保持原词不做替换,这一部分的loss只针对【MASK】位置的输出。(即其他位置的词输出正确与否,不在MLM计算)
  • Next Sentence Prediction(NSP)。NSP关注两个句子间的关系,所以输出是binarized task即成对训练。对于成对训练的【句子A,句子B】的构建,50%的两个句子对间有上下关系,此时label为IsNext或1,剩下50%的句子无上下关系(随机选择),标记label为NoNext或0。

为什么mask要15%中分为:80%–10%–10%这么复杂?
选择15%mask,其中80%【mask】替换,10%用其他词,10%保持不变。优点在于:

  • 10%的任意词相当于文本纠错的作用,为bert提供了一定的文本纠错能力
  • 10%不变是为了环境fineturn的时候预训练和输入不匹配问题(即预训练的输入有【mask】,而实际测试输入是完整的句子)

缺点自然就是这种机制割裂了连续字组成的词,是模型不容易学习到语义信息。

Training tips

  • 1dupe_factor,从训练文档中重复使用一些数据的比例,训练集数目少的时候可以设置高一些
  • 2max_predictions_per_eq,控制一句话里面被mask的最大数目
  • 3do_whole_word_mask,如果是true就整个词蒙住,如果false则是会倾向蒙住单词里的字母(个人理解这种操作同样也是填空的一种形式,蒙住后的词同样是不认识的新词,需要靠语境来判断)
  • 4length of a sentence is larger than the limit,句子中的最大长度限制

BERT的缺点:

  • 【MASK】只会在预训练中使用,后续任务是不会出现的,所以导致训练环境和测试环境不一样(一个有mask,一个没有mask)。实际处理中,在后续任务时需要同样按相同的比率替换句子。即把输入序列中的k%(一般为15%,k太小:计算代价过大。k太大:剩下的上下文不足以准确预测)的词掩盖住,然后通过上下文预测这些被掩盖住的词。
  • independent assumption。每个词都是独立的,很多短语被强行拆开(如New York)。(这点由于ELMo服从概率完备,用LSTM基于前面的词的隐向量,预测后面的句子,所以可以处理好这个问题,即词和词之间有联系的)
  • 缺乏生成能力。是mased地方的重构。

BERT的本质
BERT的本质是Denoising Autoencoder,降噪自编码。

  • 预训练是无监督的,寻找词自己之间的关系和表达。之后在下游任务中才会有监督。
  • AE:输入–中间特征–输出,约束输入==输出。DAE:输入+噪声–中间特征–输出,在同样的约束下起降噪的作用使结果更加的鲁棒。而BERT:输入+【MASK】–Transformer–输出预测【MASK】。所以实际上,【MASK】的作用就是加了噪音,然后利用Transformer进行降噪。

NSP是否必要?
《crosslingual language model pretraning》中发现,NSP任务可能是没有太大作用。原因可能是BERT的机制本身就是隔离的,无法学习到词之间的远程依赖关系。所以之后的一些工作都移掉了它。

在这里插入图片描述

XLNet(Generalized Autoregressive Pretraining for Language)
集大成者来了。

  • 自回归语言模型(Autoregressive LM)。代表是ELMo 和 GPT,根据前文预测后面的单词或者反过来的思路。优点是:词与词之间是有联系的。缺点是:只能利用上文或者下文的信息,不能同时利用上文和下文的信息(ELMO虽然双向都做,但是是伪双向,即正向的时候用不到反向,反向用不到正向)。
  • 自编码语言模型(Autoencoder LM)。代表BERT。优点:直接就是上下文都能够考虑到。缺点:1 词和词割裂 2使用了【MASK】使训练和测试的环境不一致。

XLNet:我要融合。我要构建一个

  • 考虑上下文双向信息
  • 考虑词间依赖关系
  • 测试环境一致
    在这里插入图片描述

融合思路显然是改装ELMo更为方便,只需要把ELMo变得可以处理真正的上下文就行。那么如何在只看得到前面词的时候,也能揉入后面的词?

  • 乱序全排列语言模型(Permutation Language model),即
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值