3

词向量系列(4):Glove一个别致的思路

 2 years ago
source link: https://allenwind.github.io/blog/9194/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
Mr.Feng Blog

NLP、深度学习、机器学习、Python、Go

词向量系列(4):Glove一个别致的思路

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

GloVe = 词-词共现矩阵 + word2vec

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

W=⎡⎢ ⎢ ⎢ ⎢ ⎢⎣f1,1f1,2…f1,|V|f2,1f2,2…f2,|V|⋮⋮⋮⋮f|V|,1f|V|,2…f|V|,|V|⎤⎥ ⎥ ⎥ ⎥ ⎥⎦W=[f1,1f1,2…f1,|V|f2,1f2,2…f2,|V|⋮⋮⋮⋮f|V|,1f|V|,2…f|V|,|V|]

|V||V|为词汇表的大小。fi,jfi,j表示在整个语料库中,词wjwj在上下文wiwi中出现的次数。于是,容易计算词wjwj在上下文wiwi中出现的概率,

Pi,j=P(wj|wi)=fi,j|V|∑k=1fikPi,j=P(wj|wi)=fi,j∑k=1|V|fik

其中分母|V|∑k=1fik=fi∑k=1|V|fik=fi​表示词wiwi​的上下文中出现的所有的词的总次数。

GloVe

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

Rki,j=Pi,kPj,kRi,jk=Pi,kPj,k

观察发现用以反映单词之间的相关性。GLoVe假设单词wi,wj,wkwi,wj,wk​的词向量hi,hj,hkhi,hj,hk​通过函数映射后得到,

F(hi,hj,hk)=Rki,j=Pi,kPj,kF(hi,hj,hk)=Ri,jk=Pi,kPj,k

那么F(hi,hj,hk)F(hi,hj,hk)​的具体形式是什么呢?只要找到具体的形式,然后训练hh即可获得词的向量化表示。

考虑到Pi,kPj,kPi,kPj,k的非负性,以及词向量hi,hj,hkhi,hj,hk都在同一个向量空间中,使用内积作为相似度计算最为合适。因此,该映射最容易的设计是,

exp(h⊤ihk−h⊤jhk)=Rki,j=Pi,kPj,kexp⁡(hi⊤hk−hj⊤hk)=Ri,jk=Pi,kPj,k

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

h⊤ihk=logPi,k=logfi,kfih⊤jhk=logPj,k=logfj,kfjhi⊤hk=log⁡Pi,k=log⁡fi,kfihj⊤hk=log⁡Pj,k=log⁡fj,kfj

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

h⊤ihk=h⊤khilogfi,kfi≠logfk,ifkhi⊤hk=hk⊤hilog⁡fi,kfi≠log⁡fk,ifk

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

h⊤ihk+bi+ck=logfi,khi⊤hk+bi+ck=log⁡fi,k

这里把−logfi−log⁡fi部分去掉,因为对于固定的ii来说它是一个常数。为让待训练参数与全局统计fi,jfi,j满足以上关系,只需要最小化目标函数,

L=∑i,k(h⊤ihk+bi+ck−logfi,k)2L=∑i,k(hi⊤hk+bi+ck−log⁡fi,k)2

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

L=∑i,ks(fi,k)(h⊤ihk+bi+ck−logfi,k)2L=∑i,ks(fi,k)(hi⊤hk+bi+ck−log⁡fi,k)2

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

关于s(fi,k)s(fi,k),GloVe的做法是,

s(x)=⎧⎨⎩(xxm)αif x<xm,1if x≥xms(x)={(xxm)αif x<xm,1if x≥xm

这里xmxm是共现次数上限,常用的经验值是xm=100,α=0.75xm=100,α=0.75。

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK