原始Word2Vec
的细节
Word2Vec
通过最大化目标函数来使得拉近相似的word vectors
为什么使用两个vector
:数学上更容易进行优化,可以在最后对两个vector
进行平均得到一个vector
。
模型变体:
Skip-gram model
:从给定的center word
预测context words
Continuous Bag of Words
:从一系列的context words
中预测center word
原始Word2Vec
的优化问题
虽然使用随机梯度下降SGD
更新,但仍存在两个问题导致模型效率低下。
- 每次梯度更新时,仅更新
window
中的word vector
,但计算梯度时计算的整个参数矩阵,如果这个word
未出现在window
中,其偏导为0,则梯度矩阵非常稀疏; - 目标函数中计算条件概率时采用
softmax
函数,其中分母计算所有context word
与center word
的相似度得分计算并求和。
解决方案:
针对稀疏矩阵,可以使用稀疏矩阵去更新特定的
embedding
;或者使用hash
映射到具体的word vector
。针对
softmax
函数计算量过大。解决方案包括:将常见词组作为一个
word
;少采样常见词;Hierarchial Softmax
(通过构建Huffman tree
,复杂度由变为);negative sampling
采用negative sampling
其主要思想为:训练一个二元逻辑斯蒂回归,去判断一对
word
对是否是正负对(其中,center word
跟真实context word
为正对,center word
跟随机采样的word
为负对,希望正对相似度的概率更大,而负对相似度的概率更小)。之前的
skip-gram model
可以看作是希望最大化,而negative sampling
是希望最大化,而最小化,其中分别是的真实context word
与随机context word
。其总的损失函数为:
其中,对于
center word
,希望context word
与为正对,希望不是context word
的与为负对,为采样的概率分布。最大化等价于最小化下式:为了平衡高频词和低频词的影响,取,其中为
unigram
分布(即按词频比作为其概率分布),指数部分的是为了平衡词频的影响,而则是重新归一化为概率分布。由此,对
word vector
进行更新,得到的式子如下:
如何构建共现矩阵?
word-document co-occurrence matrix
:假设同一篇文章中出现的单词有可能互相关联,元素表示word
出现在文章的次数。window-based word-word co-occurrence matrix
:利用定长窗口统计窗口中word
与word
同时出现的次数。
可能存在的问题:随着语料库的增加,维度过高,存储占用过大;存在稀疏性问题,模型不够鲁棒。
解决方法:
使用低维度的
vector
,仅保存最重要的一些维度,构建dense vector
;count based model
的经典工作SVD
:通过统计数据得到co-occurrence matrix
,再对进行奇异值分解得到,为了减少尺度并尽量保留有效信息,选取对角矩阵中最大的个值。
Count based和direct prediction的比较
Count based
(SVD
):优点:训练快速,且有效利用了统计信息;
缺点:偏向于高频词,仅能概括
word
的相关性。direct prediction
(Word2Vec
):优点:在其他任务上效果较好,且可以概括比相关性更复杂的信息;
缺点:受限于语料库的大小,对统计信息利用不够充分。
GloVe
结合
Count based Model
和Direct Prediction Model
的优势。优点:训练更快;可扩展到大型语料库;在小的语料库和
vector
上也有较好的效果。
定义一个矩阵,其中表示word
出现在word
的context
中的次数,则表示出现在word
的context
中的所有word
的次数,表示word
出现在word
的context
中的概率。
引入额外的word
,比较共现概率的比值,发现如下的规律:
相关 | 不相关 | |
---|---|---|
相关 | 接近1 | 很大 |
不相关 | 很小 | 接近1 |
由上表可知,能够反映word
之间的相关性。
怎样在词向量空间中计算共现概率的比值?
假设对于
word vector
,模型函数用来计算共现概率的比值,式子如下:其中,表示想要比较的
word vector
,而表示其它的word vector
。由于向量空间为线性空间,为了计算线性空间中的相似性,假设是
word vector
作差的形式,则:上式左边为矢量,而右边为标量,通过选择矢量的点积来将矢量转化为标量形式,则:
上式左边为差,右边为商,通过选取来进行关联,得到:
由上式,我们希望,即,考虑
word-word co-occurrence
共现矩阵的对称性,希望,但,引入两个偏置项平衡对称性,希望得到:则理想情况下,希望上式左右两部分接近,故目标函数为:
考虑
co-occurence word
的出现次数的影响,加入作为权重,故最终目标函数为:其中,权重项需要满足如下条件:
- (如果两个
word
没有共现,则权重为0); - 为非减函数(两个
word
共现次数越大,权重不减); - 对于较大的,不能取过大的值(避免一些
word
(比如,‘的’)共现次数较大,但其重要性较低)。
文中定义,其图像如下:
- (如果两个
参考文献:
CS224N笔记(二):GloVe - 知乎 (zhihu.com)
cs224n学习笔记L2:word vectors and word senses_三七的博客-CSDN博客