[GloVe]论文实现:GloVe: Global Vectors for Word Representation*

GloVe是一种改进的词嵌入方法,结合了矩阵分解和局部上下文窗口方法的优点,通过构建词共现矩阵并优化损失函数来生成高质量的词向量。它在单词类比任务中表现出色。
摘要由CSDN通过智能技术生成

论文:GloVe: Global Vectors for Word Representation
作者:Jeffrey Pennington, Richard Socher, Christopher D. Manning
时间:2014

一、完整代码

稍后补充

二、论文解读

2.1 当前存在的两种word2vec模型

word2vec的两个主要处理方法:
1) Matrix Factorization Methods,如潜在语义分析(LSA)
2) Shallow Window-Based Methods,如CBOW和Skip-gram

     目前,这两个模型方法都存在明显的缺陷。虽然像LSA这样的方法很有效地利用了统计信息,但它们在单词类比任务上做得相对较差,这表明了一个次优的向量空间结构。像skip-gram这样的方法可能在类比任务上做得更好,但它们很少利用语料库的统计数据,因为它们训练的是单独的局部上下文窗口,而不是全局共现计数。
     而GloVe能结合两种优点,通过只训练词共现矩阵中的非零元素,而不是训练整个稀疏矩阵或大型语料库中的单个上下文窗口,有效地利用了统计信息。产生了一个具有有意义的子结构的向量空间;

2.2 GloVe的原理

2.2.1 构建词共现矩阵

     与LSA利用word和top构建词共现矩阵不同的是,GloVe利用的是word和word构建的词共现矩阵,实现原理很简单,利用Shallow Window-Based Methods 即n-gram构建词共现矩阵,接下来我们开始下一步的推导;

2.2.2 定义和推导

     首先我们定义词共现矩阵为 X X X,其 X i j X_{ij} Xij表示为 w o r d i word_i wordi w o r d j word_j wordj在n-gram中出现的次数;定义 X i = ∑ k X i k X_{i}=\sum_{k}X_{ik} Xi=kXik即所有词包含 w o r d i word_{i} wordi出现的次数之和;最后定义 P i j = P ( j ∣ i ) = X i j X i P_{ij}=P(j|i)=\frac{X_{ij}}{X_{i}} Pij=P(ji)=XiXij,表示 w o r d j word_j wordj出现在包含 w o r d i word_i wordi的上下文出现次数的可能性;

从图中我们可以看出,虽然k在ice和steam出现的概率不高,但是两者的概率的比值根据k值都有一定的变化,再根据k为solid或者gas的结果中我们可以看出,solid大于1对应分子,gas小于1对应分母;再从water和fashion两个与solid和gas几乎无相关的词的值在1附近可以看出,该比率能更好地区分相关单词和不相关单词;

     在这里我们定义 w o r d i word_i wordi w o r d j word_j wordj这两个词的词向量为 w i w_i wi w j w_j wj,随便定义一个映射函数,包含 w i , w j , w ~ k w_i,w_j,\widetilde w_k wi,wj,w k,不需要在意是怎么映射的;
F ( w i , w j , w ~ k ) = P i k P j k F(w_i,w_j,\widetilde w_k)=\frac{P_{ik}}{P_{jk}} F(wi,wj,w k)=PjkPik然后由于向量空间本质上是线性结构,所以最自然的方法是利用向量差。即可以把 F ( w i , w j , w ~ k ) F(w_i,w_j,\widetilde w_k) F(wi,wj,w k)转化为 F ( w i − w j , w ~ k ) F(w_i-w_j,\widetilde w_k) F(wiwj,w k),即 F ( w i − w j , w ~ k ) = P i k P j k F(w_i-w_j,\widetilde w_k)=\frac{P_{ik}}{P_{jk}} F(wiwj,w k)=PjkPik再可以看到减数和被减数分别代表着分子和分母,然而分子和分母之间又有一个k与他们联系起来,这里我们可以再进行转化一下,把 F ( w i − w j , w ~ k ) F(w_i-w_j,\widetilde w_k) F(wiwj,w k)转化为 F ( ( w i − w j ) T w ~ k ) F((w_i-w_j)^T\widetilde w_k) F((wiwj)Tw k),即 F ( ( w i − w j ) T w ~ k ) = P i k P j k F((w_i-w_j)^T\widetilde w_k)=\frac{P_{ik}}{P_{jk}} F((wiwj)Tw k)=PjkPik在这里就结束了吗?不!我们还给这个函数添加一个新的功能 F ( ( w i − w j ) T w ~ k ) = F ( w i T w ~ k ) F ( w j T w ~ k ) = P i k P i k F((w_i-w_j)^T\widetilde w_k)=\frac{F(w_i^T\widetilde w_k)}{F(w_j^T\widetilde w_k)}=\frac{P_{ik}}{P_{ik}} F((wiwj)Tw k)=F(wjTw k)F(wiTw k)=PikPik得到 F ( w i T w ~ k ) = P i k = X i k X i F(w_i^T\widetilde w_k)=P_{ik}=\frac{X_{ik}}{X_i} F(wiTw k)=Pik=XiXik由于需要满足这个新功能的函数只有指数函数则定义 F ( x ) = e x F(x)=e^x F(x)=ex,则有 w i T w ~ k = l n ( X i k X i ) = l n ( X i k ) − l n ( X i ) w_i^T\widetilde w_k=ln(\frac{X_{ik}}{X_i})=ln(X_{ik}) - ln(X_i) wiTw k=ln(XiXik)=ln(Xik)ln(Xi)从自由度的角度来解释由于公式 X i = ∑ k X i k X_{i}=\sum_{k}X_{ik} Xi=kXik其中 X i X_{i} Xi的值是否固定不影响 X i k X_{ik} Xik的关系,我们可以把其看作一个常数,通过对称性,我们可以把其值表示为 w i T w ~ k + b i + b ~ k = l n ( X i k ) w_i^T\widetilde w_k + b_i + \widetilde b_k = ln(X_{ik}) wiTw k+bi+b k=ln(Xik)同时要注意到词共现矩阵肯定会出现0元素,所以我们需要进行一下优化,有 w i T w ~ k + b i + b ~ k = l n ( X i k + 1 ) o r X i k = X i k + 1 w_i^T\widetilde w_k + b_i + \widetilde b_k = ln(X_{ik}+1) \quad or \quad X_{ik}=X_{ik}+1 wiTw k+bi+b k=ln(Xik+1)orXik=Xik+1 到这一步其实还有一个缺陷:会出现一些无意义的词共现程度非常大,所以我们需要加强一下出现词少的权重,减弱一下出现词多的权重;定义函数如下 f ( x ) = { ( x / x m a x ) α x < x m a x 1 e l s e f(x)=\begin{cases} (x/x_{max})^\alpha \quad & x<x_{max} \\ 1 \quad & else\end{cases} f(x)={(x/xmax)α1x<xmaxelse 在这里我们需要定义两个参数 x m a x x_{max} xmax α \alpha α

最后我们定义损失函数如下: J = ∑ i , j = 1 V f ( X i j ) ( w i T w ~ j + b i + b ~ k − l n ( X i j ) ) 2 J=\sum_{i,j=1}^Vf(X_{ij})(w_i^T\widetilde w_j + b_i + \widetilde b_k - ln(X_{ij}))^2 J=i,j=1Vf(Xij)(wiTw j+bi+b kln(Xij))2
一般来说我们把 x m a x x_{max} xmax, α \alpha α分别固定为100和0.75;

2.2.3 与其他模型的关系

其他模型一般是使用softmax进行分类,即要求 Q i j = e x p ( w i T w ~ j ) ∑ k = 1 V e x p ( w i T w ~ k ) Q_{ij}=\frac{exp(w_i^T\widetilde w_j)}{\sum_{k=1}^{V}exp(w_i^T\widetilde w_k)} Qij=k=1Vexp(wiTw k)exp(wiTw j)达到最大;这样我们就可以定义其损失函数为 J = − ∑ i ∈ c o r p u s , j ∈ c o n t e x t ( i ) l o g ( Q i j ) = − ∑ i V ∑ j V X i j l o g ( Q i j ) J=-\sum_{i \in corpus, j \in context(i)}log(Q_{ij})=-\sum_{i}^V\sum_{j}^VX_{ij}log(Q_{ij}) J=icorpus,jcontext(i)log(Qij)=iVjVXijlog(Qij)

不懂可以考虑一下: ∑ i ∈ c o r p u s , j ∈ c o n t e x t ( i ) = ∑ i ∑ j X i j \sum_{i \in corpus, j \in context(i)} =\sum_{i} \sum_{j}X_{ij} icorpus,jcontext(i)=ijXij ,在这里又可以通过 P i j = P ( j ∣ i ) = X i j X i P_{ij}=P(j|i)=\frac{X_{ij}}{X_{i}} Pij=P(ji)=XiXij转化为 J = − ∑ i V ∑ j V X i j l o g ( Q i j ) = − ∑ i V X i ∑ j V P i j l o g ( Q i j ) J=-\sum_{i}^V\sum_{j}^VX_{ij}log(Q_{ij})=-\sum_{i}^VX_i\sum_{j}^VP_{ij}log(Q_{ij}) J=iVjVXijlog(Qij)=iVXijVPijlog(Qij) 其中 P i j P_{ij} Pij表示 w o r d j word_j wordj出现在包含 w o r d i word_i wordi的上下文出现次数的可能性; ∑ j P i j l o g ( Q i j ) \sum_{j}P_{ij}log(Q_{ij}) jPijlog(Qij)可以写为 H ( P i , Q i ) H(P_i,Q_i) H(Pi,Qi),不同的模型主要差别显示在了这里, P i j P_{ij} Pij l o g ( Q i j ) log(Q_{ij}) log(Qij)都有 w o r d j word_j wordj出现在包含 w o r d i word_i wordi的上下文出现次数的可能性的意思,则应该输出一个平方项,于此同时 l o g ( Q i j ) log(Q_{ij}) log(Qij)是负数,可以把负号给去掉,则应该使其平方和尽可能的小,则可以表示为 J ^ = ∑ i , j V X i ( X i j − e x p ( w i T w ~ j ) ) 2 \hat{J}=\sum_{i,j}^VX_i(X_{ij}-exp(w_i^T\widetilde w_j))^2 J^=i,jVXi(Xijexp(wiTw j))2为了简化计算有 J ^ = ∑ i , j V X i ( l o g X i j − w i T w ~ j ) 2 \hat{J}=\sum_{i,j}^VX_i(logX_{ij}-w_i^T\widetilde w_j)^2 J^=i,jVXi(logXijwiTw j)2再根据优化,减弱出现次数多的权重,加强出现次数少的权重,最后我们可以得到 J = ∑ i , j = 1 V f ( X i j ) ( w i T w ~ j − l n ( X i j ) ) 2 J=\sum_{i,j=1}^Vf(X_{ij})(w_i^T\widetilde w_j - ln(X_{ij}))^2 J=i,j=1Vf(Xij)(wiTw jln(Xij))2

三、过程实现

稍后补充

四、整体总结

GloVe是一种新的全局对数双线性回归模型的无监督学习,在单词类比、单词相似度和命名实体识别任务上优于其他模型(2014年之前)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值