[CS224n] word2vector & glove

Glove

首先是两种方法:

  1. 一个是基于奇异值分解(SVD)的LSA算法,该方法对term-document矩阵(矩阵的每个元素为tf-idf)进行奇异值分解,从而得到term的向量表示和document的向量表示。此处使用的tf-idf主要还是term的全局统计特征。
  2. 另一个方法是word2vec算法,该算法可以分为skip-gram 和 continuous bag-of-words(CBOW)两类,但都是基于局部滑动窗口计算的。即,该方法利用了局部的上下文特征(local context)LSA和word2vec作为两大类方法的代表,一个是利用了全局特征的矩阵分解方法,一个是利用局部上下文的方法。

GloVe模型就是将这两中特征合并到一起的,即使用了语料库的全局统计(overall statistics)特征,也使用了局部的上下文特征(即滑动窗口)。为了做到这一点GloVe模型引入了Co-occurrence Probabilities Matrix。首先引入word-word的共现矩阵XX:

  • 两个选项:windows vs. full document
  • Window :与word2vec类似,在每个单词周围都使用Window,包括语法(POS)和语义信息
  • Word-document 共现矩阵的基本假设是在同一篇文章中出现的单词更有可能相互关联。假设单词 i 出现在文章 j 中,则矩阵元素 X_{ij} 加一,当我们处理完数据库中的所有文章后,就得到了矩阵 X ,其大小为 |V|\times M ,其中 |V| 为词汇量,而 M 为文章数。这一构建单词文章co-occurrence matrix的方法也是经典的Latent Semantic Analysis所采用的。

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

I like deep learning.
I like NLP.
I enjoy flying.
则我们可以得到如下的word-word co-occurrence matrix:
[CS224n] word2vector & glove
使用共现次数衡量单词的相似性,但是会随着词汇量的增加而增大矩阵的大小,并且需要很多空间来存储这一高维矩阵,后续的分类模型也会由于矩阵的稀疏性而存在稀疏性问题,使得效果不佳。我们需要对这一矩阵进行降维,获得低维(25-1000)的稠密向量。

Method 1: Dimensionality Reduction on X (HW1)

使用SVD方法将共现矩阵 X 分解为UΣV \sum U \Sigma V^{\top} 是对角线矩阵,对角线上的值是矩阵的奇异值。 U,V 是对应于行和列的正交基。

为了减少尺度同时尽量保存有效信息,可保留对角矩阵的最大的k个值,并将矩阵 U,V 的相应的行列保留。这是经典的线性代数算法,对于大型矩阵而言,计算代价昂贵。
Hacks to X (several used in Rohde et al. 2005)

按比例调整 counts 会很有效

  • 对高频词进行缩放(语法有太多的影响)
    - 使用log进行缩放
    - min(X,t),t100 min(X, t), t \approx 100
    - 直接全部忽视

  • 在基于window的计数中,提高更加接近的单词的计数

  • 使用Person相关系数