一、概述

GloVe:Global Vectors。

模型输入:语料库 corpus

模型输出:每个词的表示向量

二、基本思想

要讲GloVe模型的思想方法,我们先介绍两个其他方法:

一个是基于奇异值分解(SVD)的LSA算法,该方法对term-document矩阵(矩阵的每个元素为tf-idf)进行奇异值分解,从而得到term的向量表示和document的向量表示。此处使用的tf-idf主要还是term的全局统计特征。

另一个方法是word2vec算法,该算法可以分为skip-gram 和 continuous bag-of-words(CBOW)两类,但都是基于局部滑动窗口计算的。即,该方法利用了局部的上下文特征(local context)

LSA和word2vec作为两大类方法的代表,一个是利用了全局特征的矩阵分解方法,一个是利用局部上下文的方法。

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

首先引入word-word的共现矩阵XX,

中文glove词向量pytorch glove词向量原理_Glove

中文glove词向量pytorch glove词向量原理_算法_02

讲到这里,没有一个例子来说明,那就真是一件很遗憾的事情了,所以必须来个实例,实例永远是帮助理解最好的方式。

(1)统计共现矩阵

中文glove词向量pytorch glove词向量原理_算法_03

中文glove词向量pytorch glove词向量原理_Glove_04

中文glove词向量pytorch glove词向量原理_自然语言处理_05

(2)模型推导

以下内容看似公式很多,其实挺容易理解的,耐心看

中文glove词向量pytorch glove词向量原理_算法_06

中文glove词向量pytorch glove词向量原理_中文glove词向量pytorch_07

中文glove词向量pytorch glove词向量原理_Glove_08

三、Glove的缺点

(1)没有解决OOV的问题

(2)静态词向量,无法解决一词多义的问题

四、Glove的缺陷

glove模型的损失函数:

中文glove词向量pytorch glove词向量原理_算法_09

在glove模型中,对目标词向量和上下文向量做了区分,并且最后将两组词向量求和,得到最终的词向量。模型中最大的问题在于参数 也是可训练的参数,这会带来什么问题呢?

看下面的证明:

中文glove词向量pytorch glove词向量原理_自然语言处理_10

也就是说,对于glove训练处的词向量加上任意一个常数向量后,它还是这个损失函数的解!这就是很大的问题了,一旦在词向量上加上一个很大的常数向量,那么所有词向量之间就会非常接近,从而失去了词向量的意义。实践中可以发现,对于glove生成的词向量,停用词的模长远大于word2vec词向量的模长。如果下一步,你不过滤停用词,直接把几个词向量加起来求和用作其他任务时(如文本分类),停用词的词向量在求和词向量中占得比重还比较大,这明显很不合理。

可以看出glove这个模型,有借鉴推荐系统中的FM(Factorization Machines)的思想,在推荐系统中,参数

中文glove词向量pytorch glove词向量原理_中文glove词向量pytorch_11

代表用户对特定商品的偏好,用一个偏移量来描述是合理的,但直接应用到词向量中,就不是很合理了。word2vec里是没有参数

中文glove词向量pytorch glove词向量原理_中文glove词向量pytorch_11

,所以大家会觉得word2vec效果好些,应用更加普及。