当前位置:   article > 正文

Embedding算法之矩阵分解

Embedding算法之矩阵分解

说明

此文章翻译来自2014年nips,Neural Word Embedding as Implicit Matrix Factorization,引用量632。主要贡献是把经典skip-gram算法通过PMI,和矩阵分解联系了起来,并深入探讨了Skip-gram算法的优劣势。作者Omer Levy及Yoav Goldberg,来自Bar-Ilan University。

基于负采样的Skip-gram模型(skip-gram with negative sampling)

把Skip-gram with negative sampling模型简写为SGNS,词对(w,c)在data出现的概率为p(D=1/w,c),不出现的概率为p(D=0/w,c),有:

P(D=1/w,c)=σ(wc)=11+ewc

而基于负采样的模型对于单个的 (w,c)的目标函数是:
logσ(wc)+kEcNPD[logσ(wc)]

其中, k是负采样数目,cN是sample context,而 PD(c) c出现的概率,可以根据已有数据计算PD(c)=#(c)D。总的目标函数为:
=wVWcVC#(w,c)(logσ(wc)+kEcNPD[logσ(wc)])

文章没有看到为什么这里有一个 #(w,c),个人觉得应该是带权重的意思,出现频率越高,词对越重要的,如有理解错误,敬请指正。

SGNS其实是一种隐式的矩阵分解

公式推导

把总体目标函数展开,得到:

=wVWcVC#(w,c)logσ(wc)+wVW#(w)(kEcNPD[logσ(wc)])

注意这里有一个技巧,把 #(w,c)给简化了。再简化:
EcNPD[logσ(wc)]=cNVCPD(cN)logσ(wc)

这里是期望公式,把 PD(cN)=#c(N)/D带入化简为:
EcNPD[logσ(wc)]=#(c)|D|logσ(wc)+cNVCc#(cN)|D|logσ(wcN)

对于一个特定的词对,后面一项便没有了,化简为:
=#(w,c)logσ(wc)+k#(w)#(c)|D|logσ(wc)

此时,我们把 wc作为一个整体求解,求导使得为0,化简后得到:
wc=log(#(w,c)|D|#(w)#(c))logk

等式右边是可以直接计算的,而k是负采样的个数,人为设定的。接下来就是优化等式求得 w c的问题了,word2vec中用的是梯度下降法,这篇文章里用的是svd,经过了处理的svd,后面将展开。这里还要说的是:
PMI(w,c)=log(#(w,c)|D|#(w)#(c))

PMI是pointwise mutual information的简写,是NLP中用得很多的一信息度量指标,带入后化简可以得到:
MijSGNS=WiCj=wc=PMI(wi,cj)logk

显然,当 k=1的时候,就只剩下了一项PMI,此时得到的embedding可以看作就是对PMI的分解,如果 k>1,那就是对PMI平移之后的分解。而另外一种embedding方法:noise-contrasitive estimation(NCE),也可化简为类似的形式:
MijNCE=wc=log(#(w,c)#(c))logk=logP(wc)logk

Pointwise Mutual Information

PMI定义为:

PMI(w,c)=log(#(w,c)|D|#(w)#(c))

由每个词对组成的PMI矩阵,如果直接按照定义进行计算会出现问题,比如,当某一词对未出现过时, PMI(w,c)=log0=.在NLP中常用的方法是将未知的PMI置零。另外还有一个问题就是,由PMI定义,如果分子特别大,分母很小,得到的PMI将为很大的负数,这也不合理,因此处理为:
PPMI(w,c)=max(PMI(w,c),0)

Positive PMI,它是稀疏的,而且这样处理以后会有一种效果,两个词对出现决定了它的值,忽略了未出现的词对效果。

如何解得embeddings

Shifted PPMI (SPPMI),由上一节得到:

SPPMIk(w,c)=max(PMI(w,c)logk,0)

我们假定 MSPPMIk是由所有词对组成的矩阵,这个矩阵我们是可以直接求得的,由上面的推导我们有:
MSPPMIk=WC

等式左边是知道的,就是一个矩阵如何分解成两个矩阵,并且是两个维度更低的矩阵相乘。现今非常成熟的SVD即是一种矩阵分解方法,取特征值最大的特征向量组成矩阵后,使得其前后损失最小,即: MSPPMIkMd,使得:
Md=arg minRank(M=d)MM2

其形式为 Md=UdΣdVdT,由此可以直接取得;
WSVDα=Ud(Σd)α , CSVDα=Vd(Σd)1α

α常常取0,1,1/2.

SVD对比SGNS优劣势分析

优势

1.SVD不需要调参,比如学习率
2.SVD在已知(w,c,#(w,c))的情况下更易于训练,而SGNS需要单独知道每一对(w,c)的观察值

劣势

1.SGNS对未观察到的数据分别处理,利用了未观察到的数据,而SVD都置零了
2.SGNS对每一对词对分别处理,频率较高的词对将得到更好的结果,而对未观察到的词对具有更好的容错性。
3.SGNS每次处理某一词对时并不需要让其他未观察到的词对值为0,不需要对词对矩阵作稀疏处理即可优化得到各自的embedding

stochastic matrix factorization

作者提到了SVD和SGNS的一种middle-groud算法,兼具两者优点。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/870536
推荐阅读
相关标签
  

闽ICP备14008679号