Word2Vec原理详解

摘要

一般来说表示词向量最简单的方式就是 one-hot encoding,这种方法的优势显而易见:处理起来十分方便。但是其缺点也十分明显:表示容量太低,在词典大小十分庞大是容易造成维度灾难,无法表示语义等等,Word2Vec词向量编码技术很大程度上解决了one-hot encoding的一部分问题。Word2Vec在大量的语料库上训练,得到单词的向量表示(Distribution representation),与one-hot encoding的稀疏表示不同,word2vec训练得到的向量每一位都是实值,可以大大缩减向量维度,并且可以通过距离计算得到单词之间的相似度。

Word2Vec的Intuition

主观上来讲,在一篇文章中相近的单词语义上更为接近,即中心词与其上下文单词的语义接近,这里的中心词和上下文单词是Word2Vec中的两个概念:中心词就是每次训练时我们关注的词;上下文单词是中心词前window size(window size是一个超参数)个单词和中心词后window size个单词的集合,一共2 * window size个单词(忽略中心词前面或后面没有单词的情况)。

表示单词间的相似度

我们的假设是,中心词与它的上下文单词语义接近,也就是学得的向量相似度大,那么这里如何定义相似度呢?我们采用内积的方式表示相似度。这里我们定义 w w w 表示中心词, c c c 表示相应的上下文单词, V w V_{w} Vw 表示中心词的词向量, V c V_{c} Vc 表示中心词的词向量,那么他们之间的内积 V w T V c V_{w}^{T}V_{c} VwTVc 相比于 V w V_{w} Vw 与其他非上下文单词的内积要大,也就是中心词和其上下文单词的相似度更大。进一步我们定义条件概率 P ( c   ∣   w ) = e x p ( V w T V c ) ∑ c ′ ∈ v o c a b e x p ( V w T V c ′ ) P(c\ | \ w) = \frac{exp({V_{w}^{T}V_{c}})}{\sum\limits_{c^{'}\in{vocab}}exp(V_{w}^{T}V_{c^{'}})} P(c  w)=cvocabexp(VwTVc)exp(VwTVc) 这个公式应该也十分好理解,就是一个简单的softmax。至此我们已经定义了单词间的相似度和给定中心词,上下文单词的条件概率。

Word2Vec的模型

Word2Vec采用了两种模型,CBOW和Skip-Gram,在实践中,Skip-Gram要更加常用。这两种模型都十分的简单直接。CBOW和Skip-gram的图示
简单来说,CBOW是利用上下文单词预测中心词,Skip-gram使用中心词预测上下文单词。最后输出的概率就是上文提到的softmax。训练过程也很直接,label是中心词的上下文单词,反向传播就可以训练出词向量表示。
但是这种训练方法有显而易见的缺点,计算softmax的分母时,我们需要遍历整个词典,如果词典非常大的话,就会造成训练十分缓慢,这时我们需要采用一种计算复杂度更小的近似的方式来进行训练。

Negative Sampling

作者采用了两种近似方式,这里主要阐述比较常用的negative sampling方式。
原始的目标函数可以写作: θ = arg max ⁡ θ ∏ w ∈ c o r p u s ∏ c ∈ c o n t e x t ( w ) P ( c   ∣   w ;   θ ) \theta=\argmax \limits_{\theta}\prod\limits_{w\in{corpus}}\prod\limits_{c\in_{context(w)}}P(c\ |\ w;\ \theta) θ=θargmaxwcorpusccontext(w)P(c  w; θ),进一步可以取对数转换为连加形式: θ = arg max ⁡ θ ∑ w ∈ c o r p u s ∑ c ∈ c o n t e x t ( w ) l o g P ( c   ∣   w ;   θ ) \theta=\argmax \limits_{\theta}\sum\limits_{w\in{corpus}}\sum\limits_{c\in_{context(w)}}logP(c\ |\ w;\ \theta) θ=θargmaxwcorpusccontext(w)logP(c  w; θ)
这里的 θ \theta θ 就是要求的词向量矩阵。由于求条件概率 P ( c   ∣   w ) P(c\ | \ w) P(c  w) 要遍历整个词典,计算复杂度过高,所以这种方法在实践上效果并不好。负采样是一种能够有效降低计算复杂度的方式。
负采样就是每次迭代时,并不遍历整个词典,而是采样一定数量的负样本进行训练(也就是名字负采样的由来)。我们先看一下负采样的目标函数,对照一下原始的目标函数。
KaTeX parse error: Limit controls must follow a math operator at position 14: \theta=argmax\̲l̲i̲m̲i̲t̲s̲_{\theta}\sum\l…
这里的 σ \sigma σ 就是sigmoid函数, D p D_{p} Dp表示中心词和上下文单词对的集合, D n D_{n} Dn表示中心词和非上下文单词对的集合。 w w w表示中心词, c c c表示中心词的上下文单词, c ′ c^{'} c表示非上下文单词, ( w , c ) (w, c) (w,c)表示正样本单词对, ( w , c ′ ) (w, c^{'}) (w,c)表示负样本单词对。
这里使用了逻辑回归的思想,我们把中心词和其上下文单词对作为正样本,我们希望他们的内积越大越好,也就是 σ ( V w T V c ) \sigma(V_{w}^{T}V_{c}) σ(VwTVc) 越大越好,中心词和其上下文单词被分为正样本的概率也就越大;相反,每次迭代过程,我们从负样本集合 D n D_{n} Dn 中采样一定数量的负样本,我们希望负样本单词对中心词和非上下文单词的内积越小越好,也就是 σ ( − V w T V c ′ ) \sigma(-V_{w}^{T}V_{c^{'}}) σ(VwTVc) (其为负样本的概率)越大越好。这与目标函数是一致的,每次迭代过程就是做了一次逻辑回归分类,期望模型能正确区分正负样本。这样每次随机梯度下降计算梯度的代价非常小,大大加快了训练的速度。

参考资料

Word2Vec详解
Distributed Representations of Words and Phrases
and their Compositionality

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值