转载-原文:(十五)通俗易懂理解——Glove算法原理 - 知乎https://zhuanlan.zhihu.com/p/42073620
一、概述
GloVe:Global Vectors。
模型输入:语料库 corpus
模型输出:每个词的表示向量
论文链接:https://aclanthology.org/D14-1162.pdf
二、基本思想
要讲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,
讲到这里,没有一个例子来说明,那就真是一件很遗憾的事情了,所以必须来个实例,实例永远是帮助理解最好的方式。
(1)统计共现矩阵
(2)模型推导
以下内容看似公式很多,其实挺容易理解的,耐心看
三、Glove的缺点
(1)没有解决OOV的问题
(2)静态词向量,无法解决一词多义的问题
四、Glove的缺陷
glove模型的损失函数:
在glove模型中,对目标词向量和上下文向量做了区分,并且最后将两组词向量求和,得到最终的词向量。模型中最大的问题在于参数 也是可训练的参数,这会带来什么问题呢?
看下面的证明:
也就是说,对于glove训练处的词向量加上任意一个常数向量后,它还是这个损失函数的解!这就是很大的问题了,一旦在词向量上加上一个很大的常数向量,那么所有词向量之间就会非常接近,从而失去了词向量的意义。实践中可以发现,对于glove生成的词向量,停用词的模长远大于word2vec词向量的模长。如果下一步,你不过滤停用词,直接把几个词向量加起来求和用作其他任务时(如文本分类),停用词的词向量在求和词向量中占得比重还比较大,这明显很不合理。
可以看出glove这个模型,有借鉴推荐系统中的FM(Factorization Machines)的思想,在推荐系统中,参数 代表用户对特定商品的偏好,用一个偏移量来描述是合理的,但直接应用到词向量中,就不是很合理了。word2vec里是没有参数 ,所以大家会觉得word2vec效果好些,应用更加普及。