基于word2vec训练词向量(一)

1.回顾DNN训练词向量

上次说到了通过DNN模型训练词获得词向量,这次来讲解下如何用word2vec训练词获取词向量。

回顾下之前所说的DNN训练词向量的模型:

DNN模型中我们使用CBOW或者Skip-gram模式结合随机梯度下降,这样每次都只是取训练样本中几个词训练,每完成一次训练就反向传播更新一下神经网络中W和W’。

我们发现其中DNN模型仍存在两个缺点:

首先,每次我们只是使用了几个单词进行训练,但是在计算梯度的过程却要对整个参数矩阵进行运算,这样计算效率低下。

更重要的一个缺点是在输出层中用softmax时,需要对输出层中每个位置求其概率,sotfmax函数如下图:

这里u_0是W’的一个神经元的参数向量,v_c对应的是训练样本与隐藏层参数W相乘激活后得到的向量。可以发现,为了得到输出层的每个位置的概率,我们需要求得所有单词的得分,如果一个词汇表很庞大的话,这是很耗资源的。

2. Word2vec

2.1 前瞻

针对DNN模型训练词向量的缺点,2013年,Google开源了一款用于词向量计算的工具--word2vec,引起了工业界和学术界的关注。Word2vec采用了Hierarchical Softmax或Negative Sampling两种技术来提高训练词向量性能,由于篇幅较长,本次只讲解基于Hierarcical Softmax优化的CBOW模型。

2.2 霍夫曼树

在介绍word2vec的网络结构之前这里需要简短的回顾下霍夫曼树,输入不同的权值的w节点,将其看作是n棵森林,先选取这些节点中最小两个权值w_i,w_j节点进行合并,得到一棵新的树,原来的w_i,w_j成为这个新树的左右子树。新树的权值是圆脸w_i和w_j对应的权值之和,将新树作为新加入的一棵树,删除原来的w_i,w_j树,重新选取两棵最小的树合并,以此类推直到所有的树都合并了。举个例子,假如有(a,b,c,d,e,f)共6个点,节点权值分布是(16,4,8,6,20,3)。规定左分支为0,右分支为1。

其中所有的词都是叶子结点,霍夫曼树的好处就是权值较大的词(即频率较大的词)会在深度更小的叶子处,获得更短的编码。这样频率更高的词会以更小的代价被发现。

2.3 Hierarcical Softmax网络结构

Word2vec有两种优化加速模型,一种是基于Hierarcical Softmax优化,另一种是基于Negative Sampling优化,本次只讲解基于Hierarcical Softmax优化。下图是Word2vec基于Hierarcical Softmax优化的模型,训练模式选用CBOW模型:

该网络结构包含了三层,输入层,投影层(即原来的隐藏层)和输出层,假设存在样本(Context(w),w),Context(w)是由w前后各c个词构成作输入样本train_X,w作输出值train_y。

1)输入层:

包含Context(w)中2c个词向量v(Context(w)_1),v(Context(w)_2),......,v(Context(w)_2c)组成,词向量长度相同。

2)投影层:

将输入层2c个词向量累加后求平均作为X_w。

3)输出层:

输出层是对应一棵霍夫曼树,其中叶子节点就是对应词汇表中的词,非叶子节点即(黄色节点)等价于原来DNN模型中隐藏层到输出层的参数W’,用θ_i表示该节点的权重,是一个向量,根节点是投影层的输出X_w。

2.4 基于Hierarcical Softmax优化的Word2vec优点:

Word2vec相比较于DNN训练词向量,其网络结构有两点很大的不同:

1)舍去了隐藏层,在CBOW模型从输入层到隐藏层的计算改为直接从输入层将几个词的词向量求和平均作为输出。

2)舍去了隐藏层到输出层的全连接结构,换成了霍夫曼树来代替隐藏层到输出层的映射。

第一个改进在于去除了隐藏层,Word2vec训练词向量的网络结构严格上来说不算是神经网络的结构,因为其整个网络结构是线性的,没有激活函数并且取消了隐藏层。这么做对于训练词向量反而是极好的,我们在神经网络中使用激活函数,是因为我们处理的问题很多不是线性相关的,输入的样本之间一般也不是线性相关的。但处理词的问题时,我们知道一个词与其上下文是相关的,也就是说输入的上下文几个词也应该是线性相关的。取消了隐藏层没有了激活函数也就意味着承认了输入的几个上下文词的关系也是呈线性相关的。Google的Tomas Mkolov就发现了如果将DNN模型中的隐藏层移除,训练出来的词向量就会成大量线性相关,于是就有了我们在上一篇开头所说的神奇的地方:

第二个改变是为了针对降低原来DNN的softmax的计算量,我们把softmax计算改成了沿着一棵霍夫曼树找叶子节点的计算,这里霍夫曼树德非叶子节点相当与DNN中隐藏层到输出层的权重,在霍夫曼树中不需要计算所有的非叶子结点,只需要计算找寻某个叶子结点时经过的路径上存在的节点,极大的减少了计算量。

2.5 Hierarcical Softmax优化原理

上图是一个根据词频构建好的霍夫曼树,各叶子节点代表词汇表中的所有词,在计算之前引入一些符号:

假设w使我们要求的目标词,Context(w)是该目标词的上下文词组,一共有c个。

在word2vec中使用了二元逻辑回归的方法,这时候从根节点到叶子节点的过程是一个二分类问题,规定当前节点走到下一个节点,沿着左右子树走的概率分别为:

公式(1)

使用了sigmoid函数来计算选取当前节点的概率,因为只存在0,1两种取值,我们可以用指数形式写在一起:

公式(2)

因为计算每一个非叶子是相互独立的,所以在从根节点到找到叶子节点对应的词w的概率可以写成:

公式(3)

这里我们的目标函数可以去对数似然:

公式(4)

将(2)带入(4),得:

公式(5)

为了方便理解,将(5)改成c项之和:

公式(6)

我们的目标是最大化对数似然函数(5),等效成最大化每一项(6)即可。这时对(6)每个变量(X_w,θ_j-1)求偏导,对每一个样本,带入偏导数表达式得到在该函数上增长的梯度,然后让对应的参数加上这个梯度,函数就在偏导数对应的维度上增长了,这就是梯度上升法。

对于(6)每一项有两个参数 \theta _{l_{w}-1}^{w} 和X_w,分别对两个参数求偏导,先对θ求导:

公式(7)

Sigmoid的导数很好求,最后对θ求导的结果为:

公式(8)

于是\theta _{l_{w}-1}^{w} 的更新表达式为:

公式(9)

其中 \eta 是机器学习中常用的学习率。一般在0-1之间,取值太大训练快,但容易在局部区域来回抖动。

同理,对X_w求偏导数,得:

公式(10)

于是X_w的一部分更新表达式也得到了,注意这里(10)只是对(6)求偏导的,(6)只是目标函数(5)的其中一项,还要对(5)其他项求X_w偏导,相加才是X_w在(5)下的偏导。但是在word2vec的CBOW中X_w是上下文的词向量之和,所以要分别更新的是每个输入的单词的词向量:

公式(11)

于是可以得到参数更新的伪代码,在训练开始前要把词汇表放入,统计每个词频构建好霍夫曼树,然后开始进行训练:

如果梯度收敛,则结束梯度迭代,算法结束。

3.总结

基于Hierarcical Softmax优化的Word2vec,相对于DNN,使用霍夫曼树网络结构不需要计算所有非叶子节点,每次只会反向对 p^{w} 路径上的参数求偏导更新 p^w 路径上的节点参数,提高了词向量训练效率。但是仍存在一些问题,比如霍夫曼树的结构是基于贪心的思想,这样训练频率很大的词很有效,但是对词频很低的词很不友好,路径很深。在基于Negative Sampling 的word2vec可以很高效率对词频很低的词训练,下次会继续讲解最后一篇基于Negative Sampling 的word2vec,学习路漫漫,和大家一起分享学得的东西,自己对于word2vec的一些拙见,如有不足或理解错误的地方,望各位指点!

原文发布于微信公众号 - 磐创AI(xunixs)

原文发表时间:2018-04-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能LeadAI

前馈神经网络——深度学习之神经网络核心原理与算法

因上几次读者反映,公式代码有乱码和不规整的问题,小编有改善哟,这篇文章开始亲们会看到效果的哟~

14840
来自专栏机器学习与自然语言处理

深度学习在文本分类中的应用

近期阅读了一些深度学习在文本分类中的应用相关论文(论文笔记),同时也参加了CCF 大数据与计算智能大赛(BDCI)2017的一个文本分类问题的比赛:让AI当法...

58160
来自专栏数据科学与人工智能

【深度学习】深度学习概述:从感知机到深度网络

近些年来,人工智能领域又活跃起来,除了传统了学术圈外,Google、Microsoft、facebook等工业界优秀企业也纷纷成立相关研究团队,并取得了很多令人...

341100
来自专栏PPV课数据科学社区

机器学习评价指标大汇总

在使用机器学习算法的过程中,针对不同场景需要不同的评价指标,在这里对常用的指标进行一个简单的汇总。 一、分类 1. 精确率与召回率 精确率与召回率多用于二分类问...

445100
来自专栏用户2442861的专栏

深度学习概述:从感知机到深度网络

http://www.cnblogs.com/xiaowanyer/p/3701944.html

10110
来自专栏AI科技大本营的专栏

一文概览主要语义分割网络:FCN,SegNet,U-Net...

图像的语义分割是将输入图像中的每个像素分配一个语义类别,以得到像素化的密集分类。虽然自 2007 年以来,语义分割/场景解析一直是计算机视觉社区的一部分,但与计...

62620
来自专栏AI研习社

深度学习在文本分类中的应用

近期阅读了一些深度学习在文本分类中的应用相关论文(论文笔记:http://t.cn/RHea2Rs ),同时也参加了 CCF 大数据与计算智能大赛(BDCI)2...

61560
来自专栏SIGAI学习与实践平台

图像分割技术介绍

图像分割(image segmentation)技术是计算机视觉领域的一个重要的研究方向,是图像语义理解的重要一环。图像分割是指将图像分成若干具有相似性质的区域...

43340
来自专栏专知

概率论之概念解析:极大似然估计

【导读】本文是数据科学家Jonny Brooks-Bartlett概率论基础概念系列博客中的“极大似然估计”一章,主要讲解了极大似然估计的若干概念。分别介绍了参...

37370
来自专栏SIGAI学习与实践平台

目标检测最新总结与前沿展望

从 2006 年以来,在 Hilton、Bengio、LeChun 等人的引领下,大量深度神经网络的论文被发表,尤其是 2012 年,Hinton课题组首次参加...

1.6K20

扫码关注云+社区

领取腾讯云代金券