cs224n第二讲GloVe

SVD模型

count based模型的经典代表是SVD(Single Value Decomposition)模型。通常我们先扫过一遍所有数据,然后得到单词同时出现的矩阵co-occurrence matrix,假设矩阵用 X 表示,然后我们对其进行SVD得到X的分解形式 USVTUSV^T

如何产生矩阵 X通常有两种选择。一是word-document co-occurrence matrix,其基本假设是在同一篇文章中出现的单词更有可能相互关联。假设单词 i 出现在文章 j中,则矩阵元素 Xij{X_{ij}} 加一,当我们处理完数据库中的所有文章后,就得到了矩阵X ,其大小为 |V|*M ,其中 |V| 为词汇量,而 M为文章数。这一构建单词文章co-occurrence matrix的方法也是经典的Latent Semantic Analysis所采用的。

另一种选择是利用某个定长窗口中单词与单词同时出现的次数来产生window-based word-word co-occurrence matrix。下面以窗口长度为1来举例,假设我们的数据包含以下几个句子:

1.I like deep learning.

2.I like NLP.

3.I enjoy flying。

则我们可以得到如下的word-word co-occurrence matrix:
cs224n第二讲GloVe 可以看出,随着词汇量的增大,矩阵 X 的尺度会越来大,为了有效的存储,我们可以对其进行SVD处理,即将其转化为酉矩阵X对角矩阵X酉矩阵的形式:
cs224n第二讲GloVe 为了减少尺度同时尽量保存有效信息,可保留对角矩阵的最大的k个值,其余置零,并将酉矩阵的相应的行列保留,其余置零。
cs224n第二讲GloVe这就是经典的SVD算法。
**

GloVe算法

**
比较SVD这种count based模型与Word2Vec这种direct prediction模型,它们各有优缺点:Count based模型优点是训练快速,并且有效的利用了统计信息,缺点是对于高频词汇较为偏向,并且仅能概括词组的相关性,而且有的时候产生的word vector对于解释词的含义如word analogy等任务效果不好;Direct Prediction优点是可以概括比相关性更为复杂的信息,进行word analogy等任务时效果较好,缺点是对统计信息利用的不够充分。所以Manning教授他们想采取一种方法可以结合两者的优势,并将这种算法命名为GloVe(Global Vectors的缩写),表示他们可以有效的利用全局的统计信息。

那么如何有效的利用word-word co-occurrence count并能学习到词语背后的含义呢?首先为表述问题简洁需要,先定义一些符号:对于矩阵X , Xij{X_{ij}}代表了单词 i 出现在单词 j 上下文中的次数,则Xi=kXikX_i=\sum_{k}{X_{ik}}即代表所有出现在单词 i 的上下文中的单词次数。我们用Pij=P(ji)=XijXiP_{ij}=P(j|i)=\frac {X_{ij}}{X_i}来代表单词 j 出现在单词 i 上下文中的概率。

我们用一个小例子来解释如何利用co-occurrence probability来表示词汇含义:
cs224n第二讲GloVe例如我们想区分热力学上两种不同状态ice冰与蒸汽steam,它们之间的关系可通过与不同的单词 [公式] 的co-occurrence probability 的比值来描述,例如对于solid固态,虽然 P(solidice)P(solid|ice)P(solidsteam)P(solid|steam) 本身很小,不能透露有效的信息,但是它们的比值 P(solidice)P(solidsteam)\frac{P(solid|ice)}{P(solid|steam)} 却较大,因为solid更常用来描述ice的状态而不是steam的状态,所以在ice的上下文中出现几率较大,对于gas则恰恰相反,而对于water这种描述ice与steam均可或者fashion这种与两者都没什么联系的单词,则比值接近于1。所以相较于单纯的co-occurrence probability,实际上co-occurrence probability的相对比值更有意义。

基于这些观察,视频里直接给出了GloVe的损失函数形式:
cs224n第二讲GloVe基于对于以上概率比值的观察,我们假设模型的函数有如下形式:

F(wi,wj,wk)=PijPijF(w_i,w_j,\overline{w}_k)=\frac{P_{ij}}{P_{ij}}

其中,w\overline{w} 代表了context vector,如上例中的solid,gas,water,fashion等。 [公式] 则是我们要比较的两个词汇,如上例中的ice,steam。

F的可选的形式过多,我们希望有所限定。首先我们希望的是 F 能有效的在单词向量空间内表示概率比值,由于向量空间是线性空间,一个自然的假设是 F是关于向量wi,wjw_i,w_j的差的形式:

F(wiwj,wk)=PikPikF(w_i-w_j,\overline{w}_k)=\frac{P_{ik}}{P_{ik}}

等式右边为标量形式,左边如何操作能将矢量转化为标量形式呢?一个自然的选择是矢量的点乘形式:

F((wiwj)T,wk)=PikPikF({{(w_i-w_j)}}^T,\overline{w}_k)=\frac{P_{ik}}{P_{ik}}
在此,作者又对其进行了对称性分析,即对于word-word co-occurrence,将向量划分为center word还是context word的选择是不重要的,即我们在交换 wwTw-w^TXXTX-X^T 的时候该式仍然成立。如何保证这种对称性呢?
cs224n第二讲GloVe作者试验效果较好的权重函数形式是
cs224n第二讲GloVe

GloVe与Word2Vec性能比较

虽然GloVe的作者在原论文中说GloVe结合了SVD与Word2Vec的优势,训练速度快并且在各项任务中性能优于Word2Vec,但是我们应该持有怀疑的态度看待这一结果,可能作者在比较结果时对于GloVe模型参数选择较为精细而Word2Vec参数较为粗糙导致GloVe性能较好,或者换另一个数据集,改换样本数量,两者的性能又会有不同。实际上,在另一篇论文Evaluation methods for unsupervised word embeddings中基于各种intrinsic和extrinsic任务的性能比较中,Word2Vec结果要优于或不亚于GloVe。实际应用中也是Word2Vec被采用的更多,对于新的任务,不妨对各种embedding方法都做尝试,选择合适自己问题的方法。