预训练模型学习(PTM)

Lab Machine Learning Basic

PTM in NLP

背景

语言表示学习

一个核心的任务是对词语进行编码(称为词嵌入)以便后续其他的NLP任务,但容易想到词语的含义依赖于语境,也就是上下文。

非上下文嵌入

早期的词嵌入方法是静态的、上下文无关的。核心的想法类似于查表,通过训练得到一个embedding矩阵,最经典的就是 Word2Vec 。模型规模较小、计算效率高,但上下文无关性以及词汇表有限都是它很大的问题。如果要用它一般得接上一个上下文的编码器。

上下文嵌入

后来为了解决上下文问题,将静态的查表改为了动态的编码,即获得一个编码器,输入一段上下文可以得到对应的编码。各种经典的神经网络模型接踵而至,大致分为三类:基于卷积模型、序列模型和图模型。

前两种模型对局部信息容易掌握,但全局信息或者长期信息难以关联起来。图模型传统上是用结点代表词语,预先定义它的结构来学习,这就很依赖专家知识。后来实践上干脆直接采用全连接的图,让模型自己去学习词之间的关系,具体的是通过注意力机制去计算,而实现这一想法的代表作就是大名鼎鼎的变形金刚。但由于它模型复杂度很高,偏差就很小,导致小数据上非常容易过拟合

为什么要预训练

主要原因是数据问题,NLP中未标记数据占比太大,为了能利用它们想出的这么一个办法,来学习所谓“通用”的知识,作为下游任务的初始化部分,也可以看作是一种正则化。

PTM需要考虑的问题

训练的任务

由于是在未标记的数据上训练,所以很多PTM都是采用无监督或者是自监督。自监督大约就是自己出题自己做。我们也能看到,许多人给自己的模型出了不同的题目,随之产生的模型种类也非常多。

  • LM (Language Model):最常见最普通的无监督任务,就是知道前i个单词,算下一个单词的概率,通过极大似然估计来训练。
  • MLM(Masked Language Model):就是遮住部分单词,去做完形填空,代表作就是BERT。有相当多的衍生和改进版。
  • PLM(permutation):大致就是随机改变某些单词的位置,但假装这就是原始位置(即输入的位置编码还是原始的),让模型再去做从左往右预测下一个单词的任务。这样模型能够随机的看到上下文的信息,不需要mask。代表作是 XLNet。看上去比较有趣。
  • DAE(Denoising autoencoder):主要就是我给模型输入了一个认为注入了噪声的序列,我希望模型能够将噪声去除。噪声就有很多种了,比如加上Mask(这样就是MLM了)、删掉某个单词、打乱句子顺序等等。
  • CTL(Contrastive Learning):如同我在笔记Word2Vec 中提到的,选择一个负样本作为对比来训练,这样降低了计算的复杂度。之前被用在非上下文嵌入上了,最近有新的CTL任务。
    • Deep Infomax :大致就是把word2vec里的查表部分换成了用编码器。训练任务是Mask,让序列的编码和被遮挡的部分的编码尽可能地相似。
    • Replaced Token Detection:上一个任务类似,换了训练目标,预测一个单词是否被替换。
    • ELECTRA:生成器加判别器,先用MLM训练生成器,在用它初始化判别器进行训练,判别器的训练任务是判别哪些词被生成器替换了。emmm
    • Next Sentence Prediction:BERT提了这个任务,就是判断两个句子是不是连续出现的。但是又来有很多人研究发现去除/不用NSP效果会更好的🤣
    • Sentence Order Prediction:把NSP任务里的loss换掉了,作者认为是NSP融合了主题预测和连贯性预测,而前者的子任务更简单所以模型就忽视了后者。SOP是对比学习,把连续的两个句子作为正样本,两个句子顺序交换作为负样本。emmm,很合理。

模型分析

  • 非上下文嵌入虽然是静态的,但他对于一些预测分类很擅长,类似于"Germany"+"captital" \(\approx\) "Berlin" 。
  • 对于BERT,有很多研究表明它对于句法方面的任务很不错,例如词性识别、成分标记等等,但词义等方面一般般。这被称为“语言知识”。除此之外,有部分研究发现BERT对于一些常识性的知识也还不错。“世界知识

模型压缩

PTM太大,有人考虑压缩它。

  • 剪枝。。。
  • 量化(不太明白这个命名的意义),就是降低精度。。。
  • 模型共享,大概就是参数共享等等。有个比较出名的模型叫ALBERT
  • 知识蒸馏,大概就是用一个小的student模型去拟合或近似大模型。这方面的研究还挺多。
  • 模型替换,把PTM中较大的模块换成比较小的模块。

怎么用到下游任务

选择合适的PTM

不同的PTM任务会适合不同的下游任务,PTM模型的结构也多少取决于它的任务,因而也会影响在下游任务的表现。还有数据问题。

选择合适的层

有人发现BERT较低的层捕捉基本的句法信息,更高的层捕获高层次的语义信息。因而不同的下游任务也可以选择不同的层来使用,比如只用静态嵌入(Word2Vec),难以捕捉高层次信息;还有使用顶层的表示;还有将所有层的表示加权一起使用的。。。

是否微调

  • 特征提取:预训练模型参数被冻结。不利预迁移中间层信息。
  • 微调:PTM的参数不被冻结。很多的下游任务都是采用微调。微调的方式也很多。

方向

  • PTM上界:更有效的模型结构,任务等。ELECTRA
  • PTM的计算复杂性优化。Transformer-XL
  • 模型压缩
  • 更高效的微调
  • 可解释性和可靠性。

小感悟

  • 模型大了,数据多了,人们说的话也变抽象了。”知识“来、”知识“去,这很抽象。暴力出奇迹,模型太大了,人都快驾驭不了了的😂
  • 突然发现PTM这块是个不小的领域,有很多的突飞猛进的进展和很多待解决的问题欸。尤其是有这么多的PTM ,感觉入了个大坑。

reference:

Comments