Task2-GloVe原理介绍

Task2-Word Vectors and Word Senses

1.skipgram、cbow回顾

使用skipgram和cbow两种模型进行词向量预训练,我们会发现Word2Vec模型是一个超级大的神经网络(权重矩阵规模非常大)。举个栗子,我们拥有10000个单词的词汇表,我们如果想嵌入200维的词向量,那么我们的输入-隐层权重矩阵和隐层-输出层的权重矩阵都会有 10000 x 200 = 200万个权重,在如此庞大的神经网络中进行梯度下降是相当慢的。更糟糕的是,你需要大量的训练数据来调整这些权重并且避免过拟合。百万数量级的权重矩阵和亿万数量级的训练样本意味着训练这个模型将会是个灾难。
为解决计算灾难我问题,主要有如下两种:

  • 对高频单词进行抽样来减少训练的样本个数
  • 对优化目标采用“negative sampling”方法,这样每个训练样本只会更新一小部分的模型权重

2.Global Vector by Manning

Cbow 或者Skip-Gram取得了很大的成功,不管在训练效率还是在词向量的计算效果上面。
但是cbow和skipgram只是一个local context window的方法,只能看到局部,而忽略了这个句子与词的关系。负样本采用sample的方式会缺失词的关系信息。另外,直接训练Skip-Gram类型的算法,很容易使得高曝光词汇得到过多的权重

Global Vector融合了矩阵分解Latent Semantic Analysis (LSA)的全局统计信息和local context window优势。融入全局的先验统计信息,可以加快模型的训练速度,又可以控制词的相对权重。
首先用符号X来表示词和词之间的表示:
XijXij:词i在词j的window context里面的次数,同样也是j出现在i window context的次数 (说白了就是,在整个语料库中,单词i和单词j共同出现在一个窗口中的次数。 )
Xi=∑kXikXi=∑kXik:词i的window context里面的词的总次数
Pij=P(j∣i)=Xij/Xi

Pij=P(j∣i)=Xij/Xi: 词j出现在词i 的context里面的概率

我们知道solid是ice的形状,gas是steam的状态,如果用概率表示,我们希望
p(solid∣ice)>p(solid∣steam),

p(solid∣ice)>p(solid∣steam),
p(gas|ice)<p(gas|steam),
为了数值化这个相对大小,我们引入他们的比例:p(k|ice)/p(k|steam), 这个比例值越大,代表词和ice更加相关,比例的值越小,代表和steam更加相关。

下一步:PikPjk=p(k|i)/p(k|j) 在机器学习里面怎么计算?
Task2-GloVe原理介绍

3. 总结

论文地址:GloVe: Global Vectors for Word Representation