GloVe,全称 Global Vectors for Word Representation,以下均用GloVe代替,使用全局词频统计结合局部上下文进行词的全局向量表示。GloVe可以理解成是,

1
GloVe = 词-词共现矩阵 + word2vec

共现矩阵

在语料库中,容易获得单词-上下文矩阵(word-word co-occurrence matrix)为,

$|V|$为词汇表的大小。$f_{i,j}$表示在整个语料库中,词$w_j$在上下文$w_i$中出现的次数。于是,容易计算词$w_j$在上下文$w_i$中出现的概率,

其中分母$\displaystyle \sum_{k=1}^{|V|} f_{ik} = f_i$​表示词$w_i$​的上下文中出现的所有的词的总次数。

GloVe

基于以上计算,GloVe定义一个指标,

观察发现用以反映单词之间的相关性。GLoVe假设单词$w_i,w_j,w_k$​的词向量$\boldsymbol{h}_i, \boldsymbol{h}_j, \boldsymbol{h}_k$​通过函数映射后得到,

那么$F(\boldsymbol{h}_i, \boldsymbol{h}_j, \boldsymbol{h}_k)$​的具体形式是什么呢?只要找到具体的形式,然后训练$h$即可获得词的向量化表示。

考虑到$\frac{P_{i,k}}{P_{j,k}}$的非负性,以及词向量$\boldsymbol{h}_i, \boldsymbol{h}_j, \boldsymbol{h}_k$都在同一个向量空间中,使用内积作为相似度计算最为合适。因此,该映射最容易的设计是,

因此,为让上式成立,只需要满足

但是这里还有一个问题,内积具有对称性,而$\log$不具有,

既然是使用模型取训练,干脆让不对称的问题参数化来处理,即添加一个待训练的偏置项,于是有

这里把$-\log f_i$部分去掉,因为对于固定的$i$来说它是一个常数。为让待训练参数与全局统计$f_{i,j}$满足以上关系,只需要最小化目标函数,

使用平方损失是很常规的事情。考虑到如果两个词的共现次数越多,其对目标函数的影响越大,因此添加一个权重,

这里$h, b, c$​都是待训练的参数。在实现上$h$可以直接使用Embedding的输出,而$b,c$就是一个待训练的向量。

关于$s(f_{i,k})$,GloVe的做法是,

这里$x_m$是共现次数上限,常用的经验值是$x_m = 100, \alpha = 0.75$。

总结

Glove 基本上是一个词统计模型,其设计的统计规则建立在整个数据集中整合全局信息。从原理上看,Glove结合了word2vec以及LSA的优点,其使用的统计方式可谓别致。实验证明由它得到的词向量捕捉到词之间一些语义特性,如相似性。

转载请包括本文地址:https://allenwind.github.io/blog/9194
更多文章请参考:https://allenwind.github.io/blog/archives/