1. Glove 是什么
Glove 全称是 Global Vectors for Word Representation。它是基于全局词频统计的Word Representation Tool
它可以捕捉 words之间的 similarity, analogy 等; 通过vectors之间的数学联系计算words之间的语义相似性
2. Glove 实现步骤
2.1 构建共现矩阵
假设我们有三句话: I like deep learning. I like NLP. I enjoy flying
我们可以获得一个词典: {"I like", "like deep", "deep learning", "like NLP", "I enjoy", "enjoy flying", "I like"}
共现矩阵中的数字代表row_word 和 column_word在词典中出现的次数
在共现矩阵中,word 与 word 在 Context之间的关系一定在自然数域中, 即 >=1
而 GloVe 计算 word 与 word 在 Context 之间的距离 distance, 并且用 decay = 1/d 来计算weight, 当 words之间的distance越大,weight(decay) 就会越小
2.2 Word Vector 和 共现矩阵的近似关系
用以下公式表示近似关系:
2.3 构造 Loss Function
根据近似关系,我们就可以创造出loss function:
weight function (权重函数的作用):
- 让经常一起出现的words weight 远大于 不常一起出现的words weight, 因此 weight function 需要 non-decreasing
- 不希望 weight function 出现 overweighted, 因此需要让weight function 达到边界时不再增加
- 如果两个word没有一起出现, 即 X_ij=0,那么这种情况不应该放入Loss Function, 简而言之 weight func满足 f(0) = 0
这里 weight function 使用下图的这种:
2.4 训练 Glove 模型
采用了AdaGrad的梯度下降算法,对矩阵 X 中的所有非零元素进行随机采样,学习曲率(learning rate)设为0.05,在vector size小于300的情况下迭代了50次,其他大小的vectors上迭代了100次,直至收敛。
最后得到2个vector, 分别是 w 和 w_bar; 最后为了提高鲁棒性,输出 w w_bar, 得到效果如下图
3. Glove 与 LSA, Word2Vec之间的差别
LSA (Latent Semantic Analysis) 是一种比较早的词向量表征工具(Word Representation Tool)
LSA 是基于共现矩阵,使用SVD(奇异值分解)对大矩阵进行降维; 缺点是比Glove计算代价更大
Word2Vec 的缺点是没有充分使用语料; 一定程度上Glove会比Word2Vec更加精准