SVD模型
count based模型的经典代表是SVD(Single Value Decomposition)模型。通常我们先扫过一遍所有数据,然后得到单词同时出现的矩阵co-occurrence matrix,假设矩阵用 X 表示,然后我们对其进行SVD得到X的分解形式 U S V T USV^T USVT 。
如何产生矩阵 X通常有两种选择。一是word-document co-occurrence matrix,其基本假设是在同一篇文章中出现的单词更有可能相互关联。假设单词 i 出现在文章 j中,则矩阵元素 X i j {X_{ij}} Xij 加一,当我们处理完数据库中的所有文章后,就得到了矩阵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:
可以看出,随着词汇量的增大,矩阵 X 的尺度会越来大,为了有效的存储,我们可以对其进行SVD处理,即将其转化为酉矩阵X对角矩阵X酉矩阵的形式:
为了减少尺度同时尽量保存有效信息,可保留对角矩阵的最大的k个值,其余置零,并将酉矩阵的相应的行列保留,其余置零。
这就是经典的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 , X i j {X_{ij}} Xij代表了单词 i 出现在单词 j 上下文中的次数,则 X i = ∑ k X i k X_i=\sum_{k}{X_{ik}} Xi=∑kXik即代表所有出现在单词 i 的上下文中的单词次数。我们用 P i j = P ( j ∣ i ) = X i j X i