预训练语言模型笔记

第一章 预训练语言模型简介 

预训练语言模型(Pre-trained Language Model),是通过对这些无标签的数据进行"预训练",获得一个比较好的语言表示,再将其应用到特定的自然语言处理下游任务中。

在图片分类任务中,常使用(Convolutional Neural Network,CNN)网络,对于由多个层级结构组成的CNN来说,不同层学到的图像特征是不一样的,越浅的层学到的特征越通用,越深的层学到的特征和其体任务的关联性越强。

比如通过ImageNet训练出来的CNN网络参数,可以迁移至自己的图像识别的训练任务中。在比较浅层的CNN网络初始化时,可以使用已经训练好的参数,而在模型的高层,其参数可以随机初始化。在训练自己的特定任务时,既可以采用冻结(Frozen)参数的方式使得浅层参数一直保持不变;也可以采用微调的方式让浅层参数仍然随着任务的训练不断发生改变,从而更加适应自己任务的分类。

自然语言表示的几个阶段:

独热表示:one hot会为每一个单词声明一个词表大小的向量表示,当前位置为1,其余位置为0。存在两个问题:维度太高,难以适应下游认为;由于词语词之间是正交的,所以无法表示词之间的相似性。

词袋模型:虽然能够方便计算机快速处理,却无法衡量单词间的语义相似度。

分布式理论:核心思想是上下文相似的词,其语义也相似,是一种统计意义上的分布

分布式表示:改进one hot的文本的一种表示方式,没有统计意义上的分布。相比于独热表示,分布式表示将文本在更低的维度进行表示。把独热表示中的一维特征,分布在更多维度进行表示,模型可以捕捉词的更多特征,从而更好低获取词的语义信息。人为想到的一些特征

word2vec:将单词表示为向量,语义相近的词,其向量也是相似的,使得判断语义相似度成为了可能,但是无法很好地解决一词多义的问题。

ELMo:考虑了上下文的词向量表示方法,以双向LSTM作为特征提取器,同时考虑了上下文的信息,从而较好地解决了多义词的表示问题。

预训练语言模型的两种范式

自回归(Autoregressive):根据上文预测下一个单词,或者根据下文预测前面的单词。例如,ELMo是将两个方向(从左至右和从右至左)的自回归模型进行了拼接,实现了双向语言模型,但本质上仍然属于自回归模型。

自编码(Autoencoder):也称为降噪自编码,可以在输入中随机掩盖一个单词(相当于加入噪声),在预训练过程中,根据上下文预测被掩码词,因此可以认为是一个降噪的过程。这种模型的好处是可以同时利用被预测单词的上下文信息,劣势是在下游的微调阶段不会出现掩码词,因此[MASK]标记会导致预训练和微调阶段不一致的问题。BERT的应对策略是针对掩码词,以80%的概率对这个单词进行掩码操作,10%的概率使用一个随机单词,而10%的概率使用原始单词(即不进行任何操作),这样就可以增强对上下文的依赖,进而提升纠错能力。

BERT系列模型更适用于理解任务,而GPT系列模型更适用于生成任务。

第二章 预训练语言模型基础知识

语言模型:对于语言序列w1,W2,......wn,计算该序列的概率,即P(w1,W2,...,Wa)。从机器学习的角度看,语言模型是对语句的概率分布的建模。

语言模型:给定一句由n个词组成的句子W=w1,W2,......,wn,计算这个子的概率P(w1,W2,...,wn),或者根据前文计算下一个词的概率P(wn/w1,W1,W2..,wn-1)的模型。

2.1 统计语言模型:给定一个句子计算这个句子出现的概率,或者给定前n-1个词,计算第n个词出现的概率。如果使用词表中的所有词与当前句子中的所有词计算共现概率,命中率比较低且计算量大,可以使用待预测词的前k个词预测当前词,P(wn/wn-k,..,wn-1)代替P(wn/w1,W1,W2..,wn-1),k为几,就称为几元语言模型。

word2vec

word2vec主要有两种模型,分别是CBOW(Continuous Bag-of-Words Model)和Skip-gram,其中,CBOW 适用于数据集较小的情况,而Skip-Gram在大型语料中表现得更好。
word2vec 采用了两种计算方法,分别是层次Softmax(Hierarchical Softmax)和负采样(NegativeSampling),大大降低了运算成本。

层次Softmax的思想:由于输出层最后预测的是一个多分类问题,类别数量为V|(字典大小),通过层次Softmax构造的哈夫曼树(Huffman Tree),可以将V分类的问题变成log(V)次的二分类问题进行求解。

另一种计算方法是负采样。在训练网络的过程中,如果词汇表数特别大,则每次进行所有权重的更新将变得非常消耗资源。因此,训练每个样本时,可以只调整部分网络参数,而不是全量参数。负采样方法本质上是对训练集进行了采样,从而减小了训练集的大小。举例来说,之前提到的字典维度为10000,词向量维度为300的权重矩阵一共有10000×300=30000000个权值。如果只采样1个"正样本"和5个"负样本",则参数量可以降低至6×300=1800。

word2vec的论文中,负样本的选取和单词频次相关,频次越大,采样的概率越大。在训练过程中,仅更新一小部分样本的权重,包括正样本及选择出来的负样本,可以大大降低训练复杂度。
word2vec缺点:这些词表示方式本质上是静态的,每一个词都有一个唯一确定的词向量,不能根据句子的不同而改变,无法处理自然语言处理任务中的多义词问题。

 Word2vec

Word2vec 是“word to vector”的简称,它是一个生成对“词”的向量表达的模型。

想要训练 Word2vec 模型,需要准备由一组句子组成的语料库。假设其中一个长度为 T 的句子包含的词有 w1,w2……wt,并且假定每个词都跟其相邻词的关系最密切。根据模型假设的不同,Word2vec 模型分为两种形式,CBOW 模型和 Skip-gram 模型。按照一般的经验,Skip-gram 模型的效果会更好一些。

  • CBOW 模型假设句子中每个词的选取都由相邻的词决定,所以CBOW 模型的输入是 wt周边的词,预测的输出是 wt
  • Skip-gram 模型假设句子中的每个词都决定了相邻词的选取,所以Skip-gram 模型的输入是 wt,预测的输出是 wt周边的词

Word2vec 训练样本的生成:从语料库(电商网站中所有物品的描述文字)中抽取一个句子,选取一个长度为 2c+1(目标词前后各选 c 个词)的滑动窗口,将滑动窗口由左至右滑动,每移动一次,窗口中的词组就形成了一个训练样本。Skip-gram 模型是中心词决定了它的相邻词,所以模型的输入是样本的中心词,输出是所有的相邻词。

如,以“Embedding 技术对深度学习推荐系统的重要性”作为句子样本。首先,对它进行分词,去除停用词,生成词序列,再选取大小为 3 的滑动窗口从头到尾依次滑动生成训练样本,然后我们把中心词当输入,边缘词做输出,就得到了训练 Word2vec 模型可用的训练样本。

图4 生成Word2vec训练样本的例子

Word2vec的结构本质上是一个三层的神经网络。

  • 它的输入层和输出层的维度都是 V,这个 V 其实就是语料库词典的大小。假设语料库一共使用了 10000 个词,那么 V 就等于 10000。根据语料库生成训练样本,这里的输入向量自然就是由输入词转换而来的 One-hot 编码向量,输出向量则是由多个输出词转换而来的 Multi-hot 编码向量,显然,基于 Skip-gram 框架的 Word2vec 模型解决的是一个多分类问题。
  • 隐层的维度是 N,N 的选择需要对模型的效果和模型的复杂度进行权衡,来决定 N 的取值,并且最终每个词的 Embedding 向量维度也由 N 来决定
  • 最后是激活函数的问题,需要注意的是,隐层神经元是没有激活函数的,或者说采用了输入即输出的恒等函数作为激活函数,而输出层神经元采用了 softmax 作为激活函数。

图5 Word2vec模型的结构

为什么要这样设置 Word2vec 的神经网络,为什么要这样选择激活函数呢?是因为这个神经网络其实是为了表达从输入向量到输出向量的这样的一个条件概率关系,我们看下面的式子:

这个由输入词 WI 预测输出词 WO 的条件概率,其实就是 Word2vec 神经网络要表达的东西。通过极大似然的方法去最大化这个条件概率,就能够让相似词的内积距离更接近,这就是我们希望 Word2vec 神经网络学到的。

为了节约训练时间,Word2vec 经常会采用负采样(Negative Sampling)或者分层 softmax(Hierarchical Softmax)的训练方法。

怎样把词向量从 Word2vec 模型中提取出来?

在训练完 Word2vec 的神经网络之后,输入层到隐层的权重矩阵 WVxN 就是我们要得到的Embedding向量。

输入向量矩阵 WVxN 的每一个行向量对应的就是我们要找的“词向量”。比如要找词典里第 i 个词对应的 Embedding,因为输入向量是采用 One-hot 编码的,所以输入向量的第 i 维就应该是 1,其余为0,那么输入向量矩阵 WVxN 中第 i 行的行向量自然就是该词的 Embedding 啦。输出向量矩阵 W′ 也遵循这个道理,但一般来说,我们还是习惯于使用输入向量矩阵作为词向量矩阵。

在实际的使用过程中,我们往往会把输入向量矩阵转换成词向量查找表(Lookup table)。例如,输入向量是 10000 个词组成的 One-hot 向量,隐层维度是 300 维,那么输入层到隐层的权重矩阵为 10000x300 维。在转换为词向量 Lookup table 后,每行的权重即成了对应词的 Embedding 向量。如果我们把这个查找表存储到线上的数据库中,就可以轻松地在推荐物品的过程中使用 Embedding 去计算相似性等重要的特征了。


RNN   
即如图2.9中的右边部分所示,可以看到,

在t时刻,输入变量xt,通过RNN的一个基础模块A,输出变量ht,而t时刻的信息,可以通过一个循环传递到下一个时刻t+1。如果将模块按照时序展开,RNN可以看作多个基础模块A的互连,每一个模块都将当前信息传递给下一个模块。

RNN可以解决时序依赖的问题,但这里的时序一般是短距离的。

循环神经网络(Recurrent Neural Networks RNN)

RNN是一种输出和模型间有反馈,可以对序列型数据进行建模的神经网络模型。传统的前馈神经网络一般输入的都是一个定长的向量,无法处理变长的序列信息,即使通过一些方法把序列处理成定长的向量,模型也很难捕捉序列中的长距离依赖关系。为了解决这个问题,RNN通过将神经元串行来处理序列化的数据,引入了隐状态h的概念(hidden state),h可以对序列形的数据提取特征,由于每个隐状态神经元能用它的内部变量保存之前输入的序列信息,可以据此进行分类或生成新的序列。

https://i-blog.csdnimg.cn/blog_migrate/3f3aa38e1a199c0b699355ed6edc59e3.png

RNN的重要特点:在计算所有隐状态时,每一步使用的参数U,W,b都是一样的,即每个步骤的参数都是共享的。

使用新的参数V和c,通过对h进行计算可以得到输出值(每一步使用的参数V和c也都是一样的)。分类问题使用Softmax函数,将输出转换成各个类别的概率。

注意:输入和输出序列是等长的,https://i-blog.csdnimg.cn/blog_migrate/982fc8d8a3016b5c781df248b7c77183.png

https://i-blog.csdnimg.cn/blog_migrate/e8a40fc6c1413681d45c7cc29e6b0b9f.png

https://i-blog.csdnimg.cn/blog_migrate/c36d6083d64e5909ae122b3d2321abc6.png

优点:模型是时间维度上的深度模型,可以对序列内容建模;h=f(现有的输入+过去记忆总结)

缺点:需要训练的参数较多,容易出现梯度消失梯度爆炸问题;不具有特征学习能力

梯度爆炸与梯度消失

RNN反向传播算法的思路和DNN一样,即通过梯度下降法一轮轮的迭代,得到合适的RNN模型参数U,W,V,b,c。具体来说:RNN每一层的的隐状态都由前一层的隐状态经过变换和激活函数得到,反向传播求导时最终得到的导数会包含每一步梯度的连乘,这会引起梯度爆炸或梯度消失,所以RNN很难处理“长程依赖”问题,即无法学到输入序列中的长距离依赖关系。

梯度爆炸与梯度消失的解决

梯度爆炸:可以通过梯度裁剪来缓解,当梯度大于给定阈值时,对梯度进行等比收缩。

梯度消失:

  1. 对模型本身进行改进:深度残差网络是对前馈神经网络的改进,通过残差学习的方式缓解了梯度消失的现象;而对于RNN来说,LSTM及其变种门控循环单元(Gated recurrent unit,GRU)等模型通过加入门控机制,可以一定程度缓解梯度消失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值