GloVe推导

Global Vectors for Word Representation (GloVe)

对比之前的方法

求词向量的两类主要方法:

  1. 基于计数性的:共现矩阵
  • 方法:基于SVD矩阵分解(LSA,HAL)
  • 优点:有效利用全局统计信息
  • 缺点:主要用来刻画词的相似度,在涉及到上下文的词类比任务上表现欠佳
  1. 基于小窗口的:skip-gram和CBOW
  • 方法:通过在局部上下文窗口中做预测来学习词向量
  • 优点:能捕捉到超出词相似度的复杂语言模式(linguistic pattern)
  • 缺点:不能利用全局的共现统计信息

Glove

  • 方法:带权最小二乘模型,在全局的词共现计数的基础上训练
  • 优点:
    ​ a. 生成具有有意义的子结构的向量空间,在词类比任务和词相似度任务上表现突出
    ​ b. 仅针对共现矩阵中的非零元素训练,能更快地实现更好的效果

共现矩阵X

设有共现矩阵 X X X,其中 X i j X_{i j} Xij表示词 j j j在词 i i i的上下文中出现的频次。令 X i = Σ k X i k X_{i}=\Sigma_{k} X_{i k} Xi=ΣkXik表示所有在词 i i i的上下文中出现过的词的总次数,则词 j j j在词 i i i的上下文中出现的概率为: P i j = P ( w j ∣ w i ) = X i j X i P_{i j}=P\left(w_{j} | w_{i}\right)=\frac{X_{i j}}{X_{i}} Pij=P(wjwi)=XiXij

tips:生成共现矩阵需要遍历整个语料库,尽管这是一笔昂贵的计算,但好在它只需要做一次。

最小二乘目标函数

在skip-gram模型中使用的是softmax来计算词 j j j在词 i i i的上下文中出现的概率:

Q i j = exp ⁡ ( u ⃗ j T v ⃗ i ) ∑ w = 1 W exp ⁡ ( u ⃗ w T v ⃗ i ) Q_{i j}=\frac{\exp \left(\vec{u}_{j}^{T} \vec{v}_{i}\right)}{\sum_{w=1}^{W} \exp \left(\vec{u}_{w}^{T} \vec{v}_{i}\right)} Qij=w=1Wexp(u wTv i)exp(u jTv i)

训练的全局交叉熵可以由如下公式计算得到:

J = − ∑ i ∈ corpus ∑ j ∈ context ( i ) log ⁡ Q i j J=-\sum_{i \in \text {corpus}} \sum_{ j \in \text {context}(i)} \log Q_{i j} J=icorpusjcontext(i)logQij

把共现矩阵中的概率 P i j P_{i j} Pij 作为实际的标签,那么优化的过程可以转换为 Q i j Q_{i j} Qij 不断逼近 P i j P_{i j} Pij 的过程:

J = − ∑ i ∈ corpus ∑ j ∈ context ( i ) log ⁡ ∣ Q i j P i j ∣ J=-\sum_{i \in \text {corpus}} \sum_{ j \in \text {context}(i)} \log |\frac{Q_{i j}}{P_{i j}}| J=icorpusjcontext(i)logPijQij

这一过程可以用最小二乘目标函数来表示:

J = − ∑ i ∈ corpus ∑ j ∈ context ( i ) ( log ⁡ Q i j − log ⁡ P i j ) 2 J=-\sum_{i \in \text {corpus}} \sum_{ j \in \text {context}(i)} (\log Q_{i j} - \log P_{i j}) ^2 J=icorpusjcontext(i)(logQijlogPij)2

由于在语料库中词 i i i和词 j j j同时出现的情况可能会多次出现,因此可以将相同的 i i i j j j对归到一块来计算总Loss:

J = ∑ i = 1 W ∑ j = 1 W X i ( log ⁡ Q i j − log ⁡ P i j ) 2 J =\sum_{i=1}^{W} \sum_{j=1}^{W} X_{i} (\log Q_{i j} - \log P_{i j}) ^2 J=i=1Wj=1WXi(logQijlogPij)2

使用softmax的一个明显缺陷就是,概率分布 Q Q Q需要归一化,也就意味着需要在整个词汇表中做昂贵的加法计算。为了避免繁重的计算,可以不做归一化,令 P ^ i j = X i j \hat{P}_{i j}=X_{i j} P^ij=Xij Q ^ i j = exp ⁡ ( u ⃗ j T v ⃗ i ) \hat{Q}_{i j}=\exp \left(\vec{u}_{j}^{T} \vec{v}_{i}\right) Q^ij=exp(u jTv i),则有:

J ^ = ∑ i = 1 W ∑ j = 1 W X i ( log ⁡ P ^ i j − log ⁡ Q ^ i j ) 2 = ∑ i = 1 W ∑ j = 1 W X i ( u ⃗ j T v ⃗ i − log ⁡ X i j ) 2 \hat{J}=\sum_{i=1}^{W} \sum_{j=1}^{W} X_{i}\left(\log \hat{P}_{i j}-\log \hat{Q}_{i j}\right)^{2} \\ =\sum_{i=1}^{W} \sum_{j=1}^{W} X_{i}\left(\vec{u}_{j}^{T} \vec{v}_{i}-\log X_{i j}\right)^{2} J^=i=1Wj=1WXi(logP^ijlogQ^ij)2=i=1Wj=1WXi(u jTv ilogXij)2

通常还采用一个权重函数 f ( x ) = x 3 / 4 f(x)=x ^ {3 / 4} f(x)=x3/4来进一步优化权重 X i X{i} Xi,因为词频 X i j X{i j} Xij过高时,权重不应该过分地增大。

为什么是 3/4?下面的一些例子可能让你有一些直观的了解:

i s : 0. 9 3 / 4 = 0.92 is: 0.9 ^ {3 / 4}=0.92 is:0.93/4=0.92

C o n s t i t u t i o n : 0.0 9 3 / 4 = 0.16 Constitution: 0.09 ^ {3 / 4}=0.16 Constitution:0.093/4=0.16

B o m b a s t i c : 0.0 1 3 / 4 = 0.032 Bombastic: 0.01 ^ {3 / 4}=0.032 Bombastic:0.013/4=0.032

“Bombastic”现在被抽样的概率是之前的三倍,而“is”只比之前的才提高了一点点。

你可能感兴趣的:(nlp,自然语言处理)