ElitesAI·动手学深度学习PyTorch版Task07打卡

优化算法进阶

11.6 Momentum
在 Section 11.4 中,我们提到,目标函数有关自变量的梯度代表了目标函数在自变量当前位置下降最快的方向。因此,梯度下降也叫作最陡下降(steepest descent)。在每次迭代中,梯度下降根据自变量当前位置,沿着当前位置的梯度更新自变量。然而,如果自变量的迭代方向仅仅取决于自变量当前位置,这可能会带来一些问题。对于noisy gradient,我们需要谨慎的选取学习率和batch size, 来控制梯度方差和收敛的结果。

word2vec

词嵌入基础
我们在“循环神经网络的从零开始实现”一节中使用 one-hot 向量表示单词,虽然它们构造起来很容易,但通常并不是一个好选择。一个主要的原因是,one-hot 词向量无法准确表达不同词之间的相似度,如我们常常使用的余弦相似度。

Word2Vec 词嵌入工具的提出正是为了解决上面这个问题,它将每个词表示成一个定长的向量,并通过在语料库上的预训练使得这些向量能较好地表达不同词之间的相似和类比关系,以引入一定的语义信息。基于两种概率模型的假设,我们可以定义两种 Word2Vec 模型:

Skip-Gram 跳字模型:假设背景词由中心词生成,即建模 P(wo∣wc)P(wo∣wc) ,其中 wcwc 为中心词, wowo 为任一背景词;
在这里插入图片描述
1.CBOW (continuous bag-of-words) 连续词袋模型:假设中心词由背景词生成,即建模 P(wc∣Wo)P(wc∣Wo) ,其中 WoWo 为背景词的集合。
在这里插入图片描述
在这里我们主要介绍 Skip-Gram 模型的实现,CBOW 实现与其类似,读者可之后自己尝试实现。后续的内容将大致从以下四个部分展开:

PTB 数据集
Skip-Gram 跳字模型
负采样近似
训练模型

词嵌入进阶

词嵌入进阶
在“Word2Vec的实现”一节中,我们在小规模数据集上训练了一个 Word2Vec 词嵌入模型,并通过词向量的余弦相似度搜索近义词。虽然 Word2Vec 已经能够成功地将离散的单词转换为连续的词向量,并能一定程度上地保存词与词之间的近似关系,但 Word2Vec 模型仍不是完美的,它还可以被进一步地改进:

子词嵌入(subword embedding):FastText 以固定大小的 n-gram 形式将单词更细致地表示为了子词的集合,而 BPE (byte pair encoding) 算法则能根据语料库的统计信息,自动且动态地生成高频子词的集合;
GloVe 全局向量的词嵌入: 通过等价转换 Word2Vec 模型的条件概率公式,我们可以得到一个全局的损失函数表达,并在此基础上进一步优化模型。
实际中,我们常常在大规模的语料上训练这些词嵌入模型,并将预训练得到的词向量应用到下游的自然语言处理任务中。本节就将以 GloVe 模型为例,演示如何用预训练好的词向量来求近义词和类比词。

GloVe 全局向量的词嵌入
GloVe 模型
先简单回顾以下 Word2Vec 的损失函数(以 Skip-Gram 模型为例,不考虑负采样近似):

−∑t=1T∑−m≤j≤m,j≠0logP(w(t+j)∣w(t))
−∑t=1T∑−m≤j≤m,j≠0log⁡P(w(t+j)∣w(t))

其中

P(wj∣wi)=exp(u⊤jvi)∑k∈Vexp(u⊤kvi)
P(wj∣wi)=exp⁡(uj⊤vi)∑k∈Vexp⁡(uk⊤vi)

是 wiwi 为中心词, wjwj 为背景词时 Skip-Gram 模型所假设的条件概率计算公式,我们将其简写为 qijqij 。

注意到此时我们的损失函数中包含两个求和符号,它们分别枚举了语料库中的每个中心词和其对应的每个背景词。实际上我们还可以采用另一种计数方式,那就是直接枚举每个词分别作为中心词和背景词的情况:

−∑i∈V∑j∈Vxijlogqij
−∑i∈V∑j∈Vxijlog⁡qij

其中 xijxij 表示整个数据集中 wjwj 作为 wiwi 的背景词的次数总和。

我们还可以将该式进一步地改写为交叉熵 (cross-entropy) 的形式如下:

−∑i∈Vxi∑j∈Vpijlogqij
−∑i∈Vxi∑j∈Vpijlog⁡qij

其中 xixi 是 wiwi 的背景词窗大小总和, pij=xij/xipij=xij/xi 是 wjwj 在 wiwi 的背景词窗中所占的比例。

从这里可以看出,我们的词嵌入方法实际上就是想让模型学出 wjwj 有多大概率是 wiwi 的背景词,而真实的标签则是语料库上的统计数据。同时,语料库中的每个词根据 xixi 的不同,在损失函数中所占的比重也不同。

注意到目前为止,我们只是改写了 Skip-Gram 模型损失函数的表面形式,还没有对模型做任何实质上的改动。而在 Word2Vec 之后提出的 GloVe 模型,则是在之前的基础上做出了以下几点改动:

使用非概率分布的变量 p′ij=xijpij′=xij 和 q’ij=exp(u⊤jvi)q′ij=exp⁡(uj⊤vi) ,并对它们取对数;
为每个词 wiwi 增加两个标量模型参数:中心词偏差项 bibi 和背景词偏差项 cici ,松弛了概率定义中的规范性;
将每个损失项的权重 xixi 替换成函数 h(xij)h(xij) ,权重函数 h(x)h(x) 是值域在 [0,1][0,1] 上的单调递增函数,松弛了中心词重要性与 xixi 线性相关的隐含假设;
用平方损失函数替代了交叉熵损失函数。
综上,我们获得了 GloVe 模型的损失函数表达式:

∑i∈V∑j∈Vh(xij)(u⊤jvi+bi+cj−logxij)2
∑i∈V∑j∈Vh(xij)(uj⊤vi+bi+cj−log⁡xij)2

由于这些非零 xijxij 是预先基于整个数据集计算得到的,包含了数据集的全局统计信息,因此 GloVe 模型的命名取“全局向量”(Global Vectors)之意。

载入预训练的 GloVe 向量
GloVe 官方 提供了多种规格的预训练词向量,语料库分别采用了维基百科、CommonCrawl和推特等,语料库中词语总数也涵盖了从60亿到8,400亿的不同规模,同时还提供了多种词向量维度供下游模型使用。

torchtext.vocab 中已经支持了 GloVe, FastText, CharNGram 等常用的预训练词向量,我们可以通过声明 torchtext.vocab.GloVe 类的实例来加载预训练好的 GloVe 词向量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值