预训练语言模型基础知识串讲

目录

一、预训练

1.1 图像领域的预训练

1.2 预训练的思想

二、语言模型

2.1 统计语言模型

 2.2 神经网络语言模型

三、词向量

3.1 独热(Onehot)编码

3.2 Word Embedding

四、Word2Vec 模型

五、传统神经网络模型无法获取时序信息的BUG


DeepMind 的计算机科学家 Sebastian Ruder 给出了 21 世纪以来,从神经网络技术的角度分析,自然语言处理的里程碑式进展,如下表所示:

年份 2013 年 2014 年 2015 年 2016 年 2017 年
技术 word2vec GloVe LSTM/Attention Self-Attention Transformer
年份 2018 年 2019 年 2020 年
技术 GPT/ELMo/BERT/GNN XLNet/BoBERTa/GPT-2/ERNIE/T5 GPT-3/ELECTRA/ALBERT

一、预训练

1.1 图像领域的预训练

在介绍图像领域的预训练之前,我们首先介绍卷积神经网络(CNN),CNN 一般用于图片分类任务,并且CNN 由多个层级结构组成,不同层学到的图像特征也不同,越浅的层学到的特征越通用(横竖撇捺),越深的层学到的特征和具体任务的关联性越强(人脸-人脸轮廓、汽车-汽车轮廓),如下图所示:

假如,我们有一个任务:有猫、狗、虎的图片各10张,设计一个深度神经网络,通过该网络把它们三者的图片进行分类。对于上述任务,如果亲手设计一个深度神经网络基本是不可能的,因为深度学习一个弱项就是在训练阶段对于数据量的需求特别大,我们只有30张,显然这是不够的。

虽然我们的数据量很少,但是我们是否可以利用网上现有的大量已做好分类标注的图片。比如 ImageNet 中有 1400 万张图片,并且这些图片都已经做好了分类标注。

上述利用网络上现有图片的思想就是预训练的思想,具体做法就是:

  1. 通过 ImageNet 数据集我们训练出一个模型 A
  2. 由于上面提到 CNN 的浅层学到的特征通用性特别强,我们可以对模型 A 做出一部分改进得到模型 B(两种方法)
  • 冻结:浅层参数使用模型 A 的参数,高层参数随机初始化,浅层参数一直不变,然后用 30 张图片训练参数
  • 微调:浅层参数使用模型 A 的参数,高层参数随机初始化,然后用 30 张图片训练参数,但是在这里浅层参数会随着任务的训练不断发生变化

        通过上述的讲解,对图像预训练做个总结(可参照上图):对于一个具有少量数据的任务 A,首先通过一个现有的大量数据搭建一个 CNN 模型 A,由于 CNN的浅层学到的特征通用性特别强,因此在搭建一个 CNN 模型 B,其中模型 B 的浅层参数使用模型 A 的浅层参数,模型 B 的高层参数随机初始化,然后通过冻结或微调的方式利用任务 A 的数据训练模型 B,模型 B 就是对应任务 A 的模型。

1.2 预训练的思想

有了图像领域预训练的引入,我们在此给出预训练的思想:

        任务 A 对应的模型 A 的参数不再是随机初始化的,而是通过任务 B 进行预先训练得到模型 B,然后利用模型 B 的参数对模型 A 进行初始化,再通过任务 A 的数据对模型 A 进行训练。注:模型 B 的参数是随机初始化的。


二、语言模型

此处引用二十三岁的有德

下面将介绍语言模型的两个分支,统计语言模型神经网络语言模型

2.1 统计语言模型

统计语言模型的基本思想就是计算条件概率

 2.2 神经网络语言模型

神经网络语言模型则引入神经网络架构来估计单词的分布,并且通过词向量的距离衡量单词之间的相似度,因此,对于未出现单词,也可以通过相似词进行估计,进而避免出现数据稀疏问题


三、词向量

在描述神经网络语言模型的时候,提到 Onehot 编码和词向量,看看它是啥。

3.1 独热(Onehot)编码

把单词用向量表示,是把深度神经网络语言模型引入自然语言处理领域的一个核心技术。

在自然语言处理任务中,训练集大多为一个字或者一个词,把他们转化为计算机适合处理的数值类数据非常重要。

早期,人们想到的方法是使用独热(Onehot)编码,如下图所示:

        对于上图的解释,假设有一个包含 4 个次的字典 V,“Rome” 位于字典的第 1 个位置,“Paris” 位于字典的第 2个位置,采用独热表示方法,对于 “Rome” 的向量来说,除了第 1 个位置为 1,其余位置为 0;对于 “Paris” 的向量来说,除了第 2个位置为 1,其余位置为 0。

对于独热表示的向量,如果采用余弦相似度计算向量间的相似度,可以明显的发现任意两者向量的相似度结果都为 0,即任意二者都不相关,也就是说独热表示无法解决词之间的相似性问题。

3.2 Word Embedding

由于独热表示无法解决词之间相似性问题,这种表示很快就被词向量表示给替代了,也就是在神经网络语言模型中出现的一个词向量 C(wi),这个 C(wi)其实就是单词对应的 Word Embedding 值,也就是——词向量

例如现在有四个单词w1,w2,w3,w4的独热编码:

w1=[1,0,0,0]

w2=[0,1,0,0]

w3=[0,0,1,0]

w4=[0,0,0,1]

有一个 V×m的矩阵 Q,这个矩阵 Q包含 V=4行,V代表词典大小,每一行的内容代表对应单词的 Word Embedding 值。只不过 Q的内容也是网络参数,需要学习获得,训练刚开始用随机值初始化矩阵 Q,当这个网络训练好之后,矩阵 Q的内容被正确赋值,每一行代表一个单词对应的 Word embedding 值。

分别与w1,w2,w3,w4内积:

w1*Q=c1

w2*Q=c2

w3*Q=c3

w4*Q=c4

也相当于

w = [w1,w2,w3,w4]                c  = [c1,c2,c3,c4]

W*Q = C

softmax (U[tanh(WC+B1)]+B2)== [0.1,0.1,0.2,0.1,0.5]

假如四个词是 “我”,“爱”,“你”,“中”,则下一个词是“国”的概率为0.5。

Q是随机矩阵可学习,是一个参数,也是神经网络语言模型的副产品。相当于即使 one-hot 编码这个矩阵很大维度很高,通过与Q内积可以控制维度大小。通过大量学习,c 被训练的越来越准确,几乎可以代表原来 w 这个词,进而成为 “词向量”。

现在假如给任何一个词,例如“apple”:apple 的 one-hot  编码为 w1 = [1,0,0,0, ... ,0,0]

w1 * Q = c1    c1 就是判断这个词的词向量; 

类似下图的随机矩阵 Q,这个矩阵 Q包含 V 行,V代表词典大小。只不过 Q的内容也是网络参数,需要学习获得,训练刚开始用随机值初始化矩阵 Q,当这个网络训练好之后,矩阵 Q 的内容被正确赋值,每一行代表一个单词对应的 Word embedding 值。

one-hot 编码缺陷很大;例如,高中英语3500词,如果用one-hot 编码,在计算过程中RAM会不够,且每个词之间 COS 相似度为0,无法进行进一步的学习。

同时这个词向量解决了·词之间的相似度问题,计算过程如下:

通过上述词向量的计算,可以发现第 4 个词的词向量表示为 [10 12 19]。

如果再次采用余弦相似度计算两个词之间的相似度,结果不再是 0 ,既可以一定程度上描述两个词之间的相似度。

下图是网上的例子,一个词表达成 Word Embedding 后,很容易找出语义相近的其它词汇。


四、Word2Vec 模型

 简单理解,Word2Vec 是一个神经网络语言模型,他的主要任务是生成词向量 Q ;

Word2Vec 有两种训练方法:

  1. 第一种叫 CBOW,核心思想是从一个句子里面把一个词抠掉,用这个词的上文和下文去预测被抠掉的这个词;
  2. 第二种叫做 Skip-gram,和 CBOW 正好反过来,输入某个单词,要求网络预测它的上下文单词。

举例:如下图所示,NLP的一个问答模型:给定问题 Question-X,给定一个answer-Y,判断句子 Y 是否是问题 X 的正确答案。

句子中每个单词以 Onehot 形式作为输入,然后乘上学好的 Word Embedding 矩阵 Q,就直接取出单词对应的 Word Embedding 了。

Word Embedding矩阵Q其实就是网络 Onehot 层到 embedding 层映射的网络参数矩阵。

使用 Word Embedding 等价于把 Onehot 层到 embedding 层的网络,用预训练好的参数矩阵 Q 初始化。这与图像领域的低层预训练过程其实是一样的,区别无非 Word Embedding 只能初始化第一层网络参数,再高层的参数就无能为力了

下游NLP任务在使用 Word Embedding 的时候也类似图像有两种做法:

  • 一种是 Frozen,就是 Word Embedding 那层网络参数固定不动;
  • 另外一种是 Fine-Tuning,就是 Word Embedding 这层参数使用新的训练集合训练也需要跟着训练过程更新掉。

预训练语言模型总结出来一句话,(我们先使用独热编码,再使用 Word2Vc 预训练好的 矩阵直接得到词向量,然后进行接下来的任务)

  • 1.冻结:可以不改变Q矩阵
  • 2.微调:随着任务的改变,改变Q矩阵


五、传统神经网络模型无法获取时序信息的BUG

传统的神经网络无法获取时序信息, 然而时序信息在自然语言处理任务中非常重要。

在讲解 Word Embedding 时,细心地读者一定已经发现,这些词表示方法本质上是静态的,每一个词都有一个唯一确定的词向量,不能根据句子的不同而改变无法处理自然语言处理任务中的多义词问题

举例:

  • “我吃了一个苹果”,“苹果” 的词性和意思,在这里取决于前面词的信息,如果没有 “我吃了一个” 这些词,“苹果” 也可以翻译为乔布斯搞出来的那个被咬了一口的苹果。
  • 如下图所示,例如多义词 Bank,有两个常用含义,但是 Word Embedding 在对 bank 这个单词进行编码的时候,是区分不开这两个含义的。

尽管这两句含有 bank 的句子中 bank 上下文环境中出现的单词不同,但是在用语言模型训练的时候,不论什么上下文的句子经过 Word2Vec,都是预测相同的单词 bank,而同一个单词占用的是同一行的参数空间,这会导致两种不同的上下文信息都会编码到相同的 Word Embedding 空间里,进而导致Word Embedding 无法区分多义词的不同语义。


那该怎么办呢?明天再写吧?感谢去钓鱼的程序猿的个人空间_哔哩哔哩_bilibili的讲解!

下期内容:从 RNN 到 LSTM 再到 ELMo 来解决这个问题。

猜你喜欢

转载自blog.csdn.net/weixin_68191319/article/details/129207930