https://blog.csdn.net/u014665013/article/details/79642083
https://zhuanlan.zhihu.com/p/42073620
这个算法说是很牛逼,可是看了一些材料说的很多都是应用,对于原理说得不清楚,找到两篇,说得还算不错,不过还是没有完全清楚细节,若干年后学会了再补充。
概述
做自然语言处理的时候很多时候会用的WordEmbedding,目前我常用的方法是word2vec算法训练词向量。不过训练词向量的方法有很多,今天介绍GloVe算法。
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,
3.3.Glove和skip-gram、CBOW模型对比
Cbow/Skip-Gram 是一个local context window的方法,比如使用NS来训练,缺乏了整体的词和词的关系,负样本采用sample的方式会缺失词的关系信息。
另外,直接训练Skip-Gram类型的算法,很容易使得高曝光词汇得到过多的权重
Global Vector融合了矩阵分解Latent Semantic Analysis (LSA)的全局统计信息和local context window优势。融入全局的先验统计信息,可以加快模型的训练速度,又可以控制词的相对权重。
我的理解是skip-gram、CBOW每次都是用一个窗口中的信息更新出词向量,但是Glove则是用了全局的信息(共线矩阵),也就是多个窗口进行更新