zl程序教程

您现在的位置是:首页 >  Java

当前栏目

NLP: Word Embedding 词嵌入(Part3: Glove)

2023-02-18 15:49:47 时间

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_wordcolumn_word在词典中出现的次数

在共现矩阵中,word 与 word 在 Context之间的关系一定在自然数域中, 即 >=1

而 GloVe 计算 word 与 word 在 Context 之间的距离 distance, 并且用 decay = 1/d 来计算weight, 当 words之间的distance越大,weight(decay) 就会越小

2.2 Word Vector 和 共现矩阵的近似关系

用以下公式表示近似关系:

i,j 分别代表两个words的index, b_i 和 b_j 代表 两个 words vector 的 bias term

2.3 构造 Loss Function

根据近似关系,我们就可以创造出loss function:

这个 Loss Function 就是一个 使用 f(X_ij)的 mean square loss, f(X_ij) 是一个weight 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, 得到效果如下图

结果显示 Vector Dimension=300 效果最好, context Windows size 大致在 6-10之间

3. Glove 与 LSA, Word2Vec之间的差别

LSA (Latent Semantic Analysis) 是一种比较早的词向量表征工具(Word Representation Tool)

LSA 是基于共现矩阵,使用SVD(奇异值分解)对大矩阵进行降维; 缺点是比Glove计算代价更大

Word2Vec 的缺点是没有充分使用语料; 一定程度上Glove会比Word2Vec更加精准