GloVe模型

• 17 min read • 3272 words
Tags: Deep Learning NLP Word2vec
Categories: NLP

GloVe模型

1. 引入

我们先前介绍的Skip-gram模型通过在局部上下文窗口中进行预测来学习词嵌入。这些模型展示了捕捉词语相似性的语言模式的能力,但未能利用全局共现统计信息

与Skip-gram不同,GloVe使用全局统计信息,通过最小二乘目标函数预测词 jj 出现在词 ii 上下文中的概率。

2. 共现矩阵及相关概念

在详细讲述GloVe模型之前,我们先声明共现矩阵及其相关概念。

  • XX:词-词共现矩阵
  • XijX_{ij}:词 jj 出现在词 ii 上下文中的次数
  • Xi=kXikX_i = \sum_k X_{ik}:任意词 kk 出现在词 ii 上下文中的总次数
  • Pij=P(wjwi)=XijXiP_{ij} = P(w_j \mid w_i) = \frac{X_{ij}}{X_i}:词 jj 出现在词 ii 上下文中的概率
  • XX 表示词-词共现矩阵,其中 XijX_{ij} 表示词 jj 出现在词 ii 上下文中的次数。
  • Xi=kXikX_i = \sum_k X_{ik} 表示任意词 kk 出现在词 ii 上下文中的总次数。最后,令 Pij=P(wjwi)=XijXiP_{ij} = P(w_j \mid w_i) = \frac{X_{ij}}{X_i} 表示词 jj 出现在词 ii 上下文中的概率。

填充该矩阵需要对整个语料库进行一次遍历以收集统计信息。对于大型语料库,这种遍历可能计算成本较高,但它是一次性的。

3. 最小二乘目标

在Skip-gram中,我们使用了如下的全局交叉熵损失函数:

J=icorpusjcontext(i)logQijJ = - \sum_{i \in \text{corpus}} \sum_{j \in \text{context}(i)} \log Q_{ij}

交叉熵损失的一个显著缺点是它要求分布 QQ 被正确归一化,这涉及对整个词汇表的昂贵求和。于是我们使用最小二乘目标,丢弃 PPQQ 中的归一化因子

J^=i=1Wj=1WXi(P^ijQ^ij)2\hat{J} = \sum_{i=1}^W \sum_{j=1}^W X_i (\hat{P}{ij} - \hat{Q}{ij})^2

其中 P^ij=Xij\hat{P}{ij} = X{ij}Q^ij=exp(u~jv~i)\hat{Q}_{ij} = \exp(\tilde{u}_j^\top \tilde{v}i) 是未归一化的分布。

但是这种形式引入了一个新问题——XijX{ij} 通常取非常大的值,使得优化变得困难。一个有效的改进是最小化 P^\hat{P}Q^\hat{Q} 对数的平方误差:

J^=i=1Wj=1WXi(log(P^)ijlog(Q^ij))2=i=1Wj=1WXi(u~jv~ilogXij)2\hat{J} = \sum_{i=1}^W \sum_{j=1}^W X_i (\log(\hat{P}){ij} - \log(\hat{Q}{ij}))^2 = \sum_{i=1}^W \sum_{j=1}^W X_i (\tilde{u}_j^\top \tilde{v}i - \log X{ij})^2

有时加权因子 XiX_i 并不一定是最优的,于是我们引入一个更通用的加权函数,可以自由地依赖于上下文词:

J^=i=1Wj=1Wf(Xij)(u~jv~ilogXij)2\hat{J} = \sum_{i=1}^W \sum_{j=1}^W f(X_{ij})(\tilde{u}_j^\top \tilde{v}i - \log X{ij})^2

4. 词向量的评估

a.a. 内在评估

词向量的内在评估是对嵌入技术(如 Word2Vec 或 GloVe)生成的一组词向量在特定中间子任务(如类比完成)上的评估。这些子任务通常简单且计算快速,从而帮助我们理解生成词向量的系统。内在评估通常会返回一个数值,表示这些词向量在评估子任务上的表现。

b.b. 外在评估

词向量的外在评估是对嵌入技术生成的一组词向量在实际任务上的评估。这些任务通常复杂且计算缓慢。以上述问答系统为例,允许通过问题评估答案的系统即为外在评估系统。通常,优化表现不佳的外在评估系统无法确定具体是哪个子系统出了问题,这就需要内在评估的支持。