自然然语言处理:预训练-词嵌入(word2vec)

 

要理解文本,我们可以从学习它的表⽰开始。利⽤来⾃⼤型语料库的现有⽂本序列,自监督学习(selfsupervised learning)已被⼴泛⽤于预训练⽂本表⽰,例如通过使⽤周围⽂本的其它部分来预测⽂本的隐藏部分。通过这种⽅式,模型可以通过有监督地从海量⽂本数据中学习,而不需要昂贵的标签标注!
本章我们将看到:当将每个单词或⼦词视为单个词元时,可以在⼤型语料库上使用word2vec、GloVe或子词嵌入模型预先训练每个词元的词元。经过预训练后,每个词元的表⽰可以是⼀个向量。但是,无论上下文是什么,它都保持不变。例如,“bank”(可以译作银行或者河岸)的向量表示在“go to the bank to deposit some money”(去银行存点钱)和“go to the bank to sit down”(去河岸坐下来)中是相同的。因此,许多较新的预训练模型使相同词元的表⽰适应于不同的上下⽂,其中包括基于Transformer编码器的更深的自监督模型BERT。在本章中,我们将重点讨论如何预训练文本的这种表示,如下图中所强调的那样。
image

词嵌入(word2vec)

自然语言是用来表达人脑思维的复杂系统。在这个系统中,词是意义的基本单元。顾名思义,词向量是用于表示单词意义的向量,并且还可以被认为是单词的特征向量或表示。将单词映射到实向量的技术称为词嵌入。近年来,词嵌入逐渐成为自然语言处理的基础知识。

为何独热向量是⼀个糟糕的选择

我们使用独热向量来表示词(字符就是单词)。假设词典中不同词的数量(词典大小)为N,每个词对应⼀个从0到N−1的不同整数(索引)。为了得到索引为i的任意词的独热向量表示,我们创建了一个全为0的⻓度为N的向量,并将位置i的元素设置为1。这样,每个词都被表示为⼀个长度为N的向量,可以直接由神经网络使用。
虽然独热向量很容易构建,但它们通常不是⼀个好的选择。⼀个主要原因是独热向量不能准确表达不同词之间的相似度,比如我们经常使用的"余弦相似度"。对于向量x,yRd,它们的余弦相似度是它们之间角度的余弦:

xy||x||||y||[1,1].

自监督的word2vec

它将每个词映射到⼀个固定⻓度的向量,这些向量能更好地表达不同词之间的相似性和类⽐关系。word2vec⼯具包含两个模型,即跳元模型(skip-gram)和连续词袋(CBOW)。对于在语义上有意义的表⽰,它们的训练依赖于条件概率,条件概率可以被看作使⽤语料库中⼀些词来预测另⼀些单词。由于是不带标签的数据,因此跳元模型和连续词袋都是⾃监督模型。
下⾯,我们将介绍这两种模式及其训练⽅法。

跳元模型(Skip-Gram)

跳元模型假设⼀个词可以用来在文本序列中生成其周围的单词。以文本序列“the”“man”“loves”“his”“son”为例。假设中心词选择“loves”,并将上下⽂窗⼝设置为2,如图所示,给定中心词“loves”,跳元模型考虑⽣成上下⽂词“the”“man”“him”“son”的条件概率:

P("the","man","his","son"|"loves").

假设上下⽂词是在给定中⼼词的情况下独⽴⽣成的(即条件独⽴性)。在这种情况下,上述条件概率可以重写为:

P("the"|"loves")·P("man"|"loves")·P("his"|"loves")·P("son"|"loves")

image
在跳元模型中,每个词都有两个d维向量表⽰,⽤于计算条件概率。更具体地说,对于词典中索引为i的任何
词,分别⽤viRduiRd表示其用作中心词和上下文词时的两个向量。给定中心词wc(词典中的索引c),生成任何上下⽂词wo(词典中的索引o)的条件概率可以通过对向量点积的softmax操作来建模:

P(wo|wc)=exp(uovc)iνexp(uiTvc)

其中词表索引集ν=0,1,...,|ν|1。给定⻓度为T的⽂本序列,其中时间步t处的词表⽰为w(t)。假设上下文词是在给定任何中⼼词的情况下独⽴⽣成的。对于上下⽂窗⼝m,跳元模型的似然函数是在给定任何中心
词的情况下⽣成所有上下⽂词的概率:
image
其中可以省略⼩于1或⼤于T的任何时间步。

训练

跳元模型参数是词表中每个词的中⼼词向量和上下⽂词向量。在训练中,我们通过最⼤化似然函数(即极⼤似然估计)来学习模型参数。这相当于最⼩化以下损失函数:
image
当使⽤随机梯度下降来最⼩化损失时,在每次迭代中可以随机抽样⼀个较短的⼦序列来计算该⼦序列的(随机)梯度,以更新模型参数。为了计算该(随机)梯度,我们需要获得对数条件概率关于中⼼词向量和上下⽂词向量的梯度。通常,涉及中⼼词wc和上下⽂词wo的对数条件概率为:
image
通过微分,我们可以获得其相对于中⼼词向量vc的梯度为
image
注意,上式中的计算需要词典中以wc为中⼼词的所有词的条件概率。其他词向量的梯度可以以相同的⽅式获得。对词典中索引为i的词进⾏训练后,得到vi(作为中⼼词)和ui(作为上下⽂词)两个词向量。在⾃然语⾔处理应⽤中,跳元模型的中⼼词向量通常⽤作词表⽰。

连续词袋(CBOW)模型

连续词袋(CBOW)模型类似于跳元模型。与跳元模型的主要区别在于,连续词袋模型假设中⼼词是基于其在⽂本序列中的周围上下⽂词⽣成的。例如,在⽂本序列"the""man""loves""his""son"中,在"loves"为中⼼词且上下⽂窗⼝为2的情况下,连续词袋模型考虑基于上下⽂词“the”“man”“him”“son”⽣成中⼼词"loves"的条件概率,即:

P("loves"|"the","man","his","son").

image
由于连续词袋模型中存在多个上下⽂词,因此在计算条件概率时对这些上下⽂词向量进⾏平均。具体地说,对于字典中索引i的任意词,分别⽤viRduiRd表⽰⽤作上下⽂词和中⼼词的两个向量(符号与跳元模型中相反)。给定上下⽂词wo1,...,wo2m(在词表中索引是o1,...,o2m)⽣成任意中⼼词wc(在词表中索引是c)的条件概率可以由以下公式建模:

P(wc|wo1,...,wo2m)=exp(12mucT(vo1+....,+vo2m))iνexp(12muiT(vo1+...,+vo2m))(1)

为了简洁起见,我们设为ωo=ωo1,...,ωo2mv¯o=(vo1+...,+vo2m)/(2m)。那么公式(1)可以简化为:

P(wc|ωo)=ucTv¯oiνexp(uiTv¯o)

给定⻓度为T的⽂本序列,其中时间步t处的词表⽰为w(t)。对于上下⽂窗⼝m,连续词袋模型的似然函数是在给定其上下⽂词的情况下⽣成所有中⼼词的概率:
image

训练

训练连续词袋模型与训练跳元模型⼏乎是⼀样的。连续词袋模型的最⼤似然估计等价于最⼩化以下损失函数:

image
请注意,
image
通过微分,我们可以获得其关于任意上下⽂词向量voii=1,...,2m的梯度,如下:
image
其他词向量的梯度可以以相同的⽅式获得。与跳元模型不同,连续词袋模型通常使⽤上下⽂词向量作为词表⽰。

⼩结
• 词向量是⽤于表⽰单词意义的向量,也可以看作词的特征向量。将词映射到实向量的技术称为词嵌⼊。
• word2vec⼯具包含跳元模型和连续词袋模型。
• 跳元模型假设⼀个单词可⽤于在⽂本序列中,⽣成其周围的单词;⽽连续词袋模型假设基于上下⽂词来⽣成中⼼单词。

近似训练

posted @   lipu123  阅读(294)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
历史上的今天:
2020-09-29 数论之gcd的应用
2020-09-29 二分+(最小生成树)
2020-09-29 gcd,gcd(欧拉函数)
2020-09-29 dfs密码//
点击右上角即可分享
微信分享提示