共计 2862 个字符,预计需要花费 8 分钟才能阅读完成。
自 BERT 起,预训练语言模型沿着海量训练数据和宏大网络结构的方向在一直倒退着。在 12 月闭幕的 NeurIPS 2020 会议上,最新语言模型 GPT-3 荣膺最佳论文奖。OpenAI 的钻研人员应用了多达 45TB 的文本数据来训练它的 1750 亿个参数。GPT-3 不仅仅是“变得更大”,它用“Few-Shot”学习代替了 FineTune,可能出色完成代码生成、畛域问答、吉他谱曲等高难度的复合型 NLP 工作。
那么,在相同的路线上,当数据受限并且算力有余,是否有轻量级的预训练模型可能帮忙咱们更好地解决文本分类等经典 NLP 问题呢?
AllenAI 团队开源的 Vampire(Variational Methods for Pretraining
In Resource-limited Environments)正是这样一款模型。全文《Variational
Pretraining for Semi-supervised Text Classification》收录于 ACL-2019。
本文将具体介绍一种基于预训练半监督的文本分类轻量型模型,即 Vampire 模型,该模型为解决因为大量数据和昂扬计算力导致的资源有余问题提供了一些思路。
01 变分自编码器
Vampire 从 VAE 中借鉴了不少思路。在具体介绍它之前,先来说说什么是 VAE,VAE 即 Variational AutoEncoder,中文译作变分自编码器。VAE 出自 ICLR-2014 的《Auto-Encoding Variational Bayes》,是一种图像生成技术,近年来也被迁徙到 NLP 中作为一种文本生成模型。原文中有大段大段的公式推导,全副了解须要费不少功夫。不过对于 Vampire 来说,重要的是弄明确 VAE 是建设在什么样的假如之上,以及它是通过什么样的形式来实现文本生成的。
和 Encoder-Decoder 架构一样,VAE 也是通过“编码”和“解码”来实现对输出句子的重建。两者的区别在于,发祥于 CV 的 VAE 并不是一种人造有序的 NLP 模型。在了解 VAE 之前,须要先彻底抛下头脑中对于 Seq2Seq 的 one by one 生成形式的固有印象。输出序列中的每个词能够是相干的,也能够是相互独立的,这取决于你应用什么样的编码器。然而,输入序列中的每个词,肯定是互不依赖的,它们被各自建模,同时生成。为了便于了解,咱们暂且将重建工作看成是对单个词的建模。这一过程能够用更狭义的散布 - 采样概念来形容:
- 对于一个离散样本 X,计算其概率分布,依据散布表达式进行采样,生成新的离散样本 X’。令 X’ 有限迫近 X。
如果用 Encoder-Decoder 的术语来说,“计算概率分布”即“编码”,“散布表达式”即“隐层”,“采样生成”即“解码”。这里有一个难点:X 是个离散变量,它很有可能遵从某个奇奇怪怪的散布,基本就写不出具体的表达式,更别提依据表达式来采样了。因而,VAE 以正态分布作为搭桥,先将 X 变换到正态分布 N(X) 上,再依据公式进行采样失去 Z,对 Z 进行变换生成 X’。至于 X->N(X) 和 Z -> X’,就间接扔进神经网络学进去。一个特定的正态分布,只由均值和方差决定。因而,X -> N(X) 的变换,理论应用了两个神经网络,别离估算均值 u 和方差 sigma。
以上是对于单个词的建模。当输出的是 n 个词组成的句子时,在每个词地位都须要进行上述解决。也就是说,有 n 组正态分布,对应着 n 组均值和 n 组方差。好了,当初能够画出整个前向计算的流程图了:
在前向计算过程中,每个 X 都是 embedding 向量,经编码产生的均值和方差也同样是向量(假如维 度为 dim)。那么,实际上生成了 dim 个正态分布,它们各自独立采样,组成维度为 dim 向量 Z。从 Pytorch 示例代码中能够更直观地看到数据流向:
embed = F.relu(self.fc1(x)) # embedding.
# 编码局部.
u = self.fc21(embed) # 均值.
sigma = self.fc22(embed) # 方差.
# 重参数采样.
# 通过对规范正太散布叠加均值和方差来进行.
std = sigma.mul(0.5).exp_()
eps = torch.FloatTensor(std.size()).normal_()
eps = Variable(eps)
z = eps.mul(std).add_(u)
# 解码局部.
h = F.relu(self.fc3(z))
x_hat = F.sigmoid(self.fc4(h))
VAE 的优化指标分为两局部。第一局部是重建指标,即 X’ = X:
loss1 = nn.MSELoss(x_hat, x)
在不退出额定束缚项时,模型能够很轻松地做到 100% 地还原 X,只有让方差全副为 0,均值取原值即可。显然,这样的模型是不具备真正生成能力的。因而,VAE 的优化指标还蕴含第二局部,应用 KL 散度把 Z(X) 拉向规范正太散布 N(0, I),能够了解为正则化项或是对生成网络加噪。
KLD = u.pow(2).add_(sigma.exp()).mul_(‐1).add_(1).add_(sigma)
loss2 = torch.sum(KLD).mul_(‐0.5)
两个 loss 相互反抗,同步学习优化。
02 Vampire
当初能够正式介绍 Vampire 了。这是一个为算力和数据双双受限的状况设计的轻量预训练模型,它的典型利用场景是 半监督文本分类。Vampire 在实质上是一个文档话题模型,它从一开始就摈弃了序列信息,将句子当作 BOW(Bag of Words)进行建模。模型捕获的是词与词的共现信息,重建的是词频向量。这样的设计使得无论是模型训练还是预测推理的速度都大大放慢。
对于输出句子 X,Vampire 统计词表中每个词的频次,构建词频向量作为句子示意。编码器局部是和 VAE 一样的均值方差预测,而后进行重参数采样:
解码器局部做了适配革新,先对采样变量 Z 做一次 softmax 失去 theta,作者将其解释为对隐话题的散布计算。其中,公式 13 即重建指标 loss1。
在实现预训练后,theta 被记为 vampire embedding,参加上游工作。和 Bert 等模型不同的是,vampire embedding 作为辅助话题信息,并不能独自实现编码训练。它须要和 word embedding 交融在一起,独特进行分类预测:
03 利用场景
在低资源场景下,当算力受限并且也没有可观的畛域数据时,Vampire 等轻量级的预训练模型也能够作为一种备选计划。作者在 AG News、Hatespeech、IMDB 和 Yahoo! 四个工作上,测试了 Vampire 与基线词向量模型在标注数据量从 200~10000 范畴内的分类准确度。从图上能够显著地察看到,在标注数据有余 2000 条时,Vampire 模型的体现较基线有大幅度的晋升。
04 总结
ELMO、BERT 和 GPT 等预训练模型的呈现,彻底变革了半监督 NLP 的钻研。在海量无标注数据上训练的文本向量示意,不仅可能显著晋升上游工作的性能,而且这种助力不局限于繁多的工作类型。
更多技术干货,欢送关注【网易智企技术 +】微信公众号