GloVe与word2vec的区别,及GloVe的缺陷

GloVe与word2vec的区别,及GloVe的缺陷

GloVe与word2vec,两个模型都可以根据词汇的“共现co-occurrence”信息,将词汇编码成一个向量(所谓共现,即语料中词汇一块出现的频率)。两者最直观的区别在于,word2vec是“predictive”的模型,而GloVe是“count-based”的模型。具体是什么意思呢

1, Count-based VS Predictive

Predictive的模型,如Word2vec,要么根据context预测中间的词汇,要么根据中间的词汇预测context,分别对应了word2vec的两种训练方式cbow和skip-gram。对于word2vec,采用三层神经网络就能训练,最后一层的输出要用一个Huffuman树进行词的预测。(这一块有些大公司面试会问到,为什么用Huffuman树,大家可以思考一下)。

GloVe与word2vec的区别,及GloVe的缺陷

Count-based模型,如GloVe,本质上是对共现矩阵进行降维。首先,构建一个词汇的共现矩阵,每一行是一个word,每一列是context。共现矩阵就是计算每个word在每个context出现的频率。由于context是多种词汇的组合,其维度非常大,我们希望像network embedding一样,在context的维度上降维,学习word的低维表示。这一过程可以视为共现矩阵的重构问题,即reconstruction loss。(这里再插一句,降维或者重构的本质是什么?我们选择留下某个维度和丢掉某个维度的标准是什么?Find the lower-dimensional representations which can explain most of the variance in the high-dimensional data,这其实也是PCA的原理)。

2. 性能差别

两种方法都能学习词的向量表示,在real world application中,他们效果上有啥差别呢?

答案是performance上差别不大。

两个模型在并行化上有一些不同,即GloVe更容易并行化,所以对于较大的训练数据,GloVe更快。

3. GloVe的缺陷

GloVe与word2vec的区别,及GloVe的缺陷

4. python包

在英文上,glove for GloVe 和 gensim for word2vec是常用的训练词向量的python package,完全可以使用自己的训练语料训练词向量。当然,他们都提供了google news(英文)上训练好的词向量,大家完全可以下载下来,直接使用。对于中文的训练语料,可以使用sogou中文新闻语料

5. reference

Don’t count, predict! A systematic comparison of context-counting vs. context-predicting semantic vectors