从PMI矩阵分解的角度看word2vec
本文需要读者对word2vec中涉及到的Skip-Gram模型、负采样等有基本的了解,如果对这些有不懂的地方,可以阅读文章《一篇浅显易懂的word2vec原理讲解》。
1. 文章的动机
在利用Skip-Gram和负采样(简称SGNS)来求解word2vec的时候,会得到两个矩阵 W 和 C ,其中 W 代表的是输入层到隐藏层的权重矩阵, C 代表的是隐藏层到输出层的权重矩阵。一般情况下,我们会保留 W 作为我们的词向量矩阵,而直接忽略掉矩阵 C。
WC^T=M
我们看上面的公式,这个公式想表达的意思是矩阵 W 和矩阵 C 事实上就是矩阵 M 的分解,所以如果我们能找出矩阵 M,就能证明Skip-Gram加负采样近似等价于对矩阵 M 的分解。
M_{ij}=w_i \cdot c_j
在这里, w_i 是词 w 对应的向量,而 c_j 是 w 的上下文的词对应的向量,那么 M_{ij} 衡量的是词与其上下文之间的联系。
2. 分析SGNS与矩阵分解的关系
SGNS需要最大化的目标函数是
l=\sum_{w}\sum_{c}\#(w,c)(log\sigma(w\cdot c)+k\cdot E_{c_N\sim P_D}[log\sigma(-w\cdot c_N)])
经过一番求导之后得出:当满足下述条件时,函数 l 达到最值。
w\cdot c=log(\frac{\#(w,c)\cdot |D|}{\#(w)\cdot \#(c)}) - log(k)
其中 D 是训练文本, c 是词 w 的上下文, \#(w,c) 是 (w,c) 在 D 中出现的次数, \#(w) 和 \#(c) 以此类推。log(\frac{\#(w,c)\cdot |D|}{\#(w)\cdot \#(c)}) 就是 (w,c) 的pointwise mutual information(简称PMI),即
M_{ij}^{SGNS}=w_i\cdot c_j=PMI(w_i,c_j)-log(k)
至此,我们找到了矩阵 M 。
3. 利用SVD直接分解Shifted PPMI矩阵(论文中提出来的方法)
Shifted PPMI矩阵
M=SPPMI_K(w,c)=max(PMI(w,c)-logk,0)
SVD分解 M
M=U\Sigma V^T
取出 \Sigma 中的前d大的特征值对应的行列组成新矩阵 \Sigma_d ,对于 U 和 V 也是如此,那么得到
M_d=U_d\Sigma_d V_d^T
则
W^\alpha=U_d(\Sigma_d)^{\alpha}
C^{\alpha}=V_d(\Sigma_d)^{\alpha}
其中 \alpha 是可以调节的参数。这样我们就得到了词向量 W 。
参考文献
《Neural Word Embedding as Implicit Matrix Factorization》