CS224N笔记(二) Lecture1~2 :深入理解Glove原理

1.背景知识

cs224n笔记 word2vec算法详细解析中提到,词的表征方法还可以分成统计型和预测性这两类,统计型就是计算各个词或词序列出现的频次,比如词袋BOW、词频-逆文档频率TF-IDF、n-gram等,预测型的如word2vec,将词隐式地编码成特定大小的短向量,通过词向量空间上的语义相似性预测中心词或者周边词。这两种方法的优缺点都很明显,统计型训练快,使用了语料的统计信息但很难提取出语义信息,也很难衡量词之间但相似性,预测型可以很好地捕捉词的语义信息,能够在向量空间上衡量词之间的相似性,但是它没有用到语料的统计信息。

Glove方法的提出就是要结合统计型和预测型方法的优点,既要能捕捉词之间的相似性,又要能利用上语料的统计信息。

2.基本原理

为了能用上语料的统计信息,Glove还是从共现矩阵入手,构造的方法n-gram中介绍的共现矩阵,但Glove还要求对元素进行归一化,由频次转换成概率值,为了区分下文将这种矩阵命名为共现概率矩阵,该矩阵即代表了语料统计信息。设共现矩阵为 X X X,则 X i j X_{ij} Xij表示在单词 i i i的上下文出现 j j j的次数, X i = ∑ k X i k X_i=\sum_{k}X_{ik} Xi=kXik表示出现在单词 i i i上下文的所有单词的总次数,则单词 i i i上下文出现单词 j j j的概率就可以记作

P i j = P ( j ∣ i ) = X i j / X i P_{ij}=P(j|i)=X_{ij}/X_i Pij=P(ji)=Xij/Xi

这里需要特别特别强调一点,共现矩阵是对称的,但是共现概率矩阵可不是对称的,词i的上下文出现词j的概率和词j的上下文出现词i的频次一样,但是概率是不一样的, X i j = X j i , P i j ≠ P j i X_{ij}=X_{ji},P_{ij} \not = P_{ji} Xij=XjiPij=Pji,举个例子:

考虑语料:Tom wants a cake and Lily also wants a cake, but jack wants a pear.

我们设定窗口大小为1,考虑词“a”的上下文出现“cake”的概率 P ( c a k e ∣ a ) P(cake|a) P(cakea)以及反过来 P ( a ∣ c a k e ) P(a|cake) P(acake)。“a”的上下文出现了“wants”两次,"cake"两次,“pear”一次,则 P ( c a k e ∣ a ) = 2 / 5 P(cake|a)=2/5 P(cakea)=2/5,而“cake”的上下文出现了“a”两次,“and“一次,”but”一次,因此 P ( a ∣ c a k e ) = 2 / 4 P(a|cake)=2/4 P(acake)=2/4,因此 P ( c a k e ∣ a ) ≠ P ( a ∣ c a k e ) P(cake|a) \not= P(a|cake) P(cakea)=P(acake)

共现概率矩阵为我们提供了语料的统计信息,接下来要求词之间的相似性能够被量化,按照word2vec的思路,是将词编码成一个向量,用向量间的余弦距离(夹角)来衡量词之间的相似性。Glove也是采取了这个思路,但是将词转化为向量时采样了不一样的解决方案。

回忆word2vec中建立统计语言模型时的基本思路是:中心词和周边词间存在联系,它们可以相互预测。而Glove采取了另一种思路,一句话概括就是:共现概率矩阵上元素间的比值可以编码词的语义。

举例:

在这里插入图片描述

上面两个表格第一、二行展示了共现概率矩阵中部分元素,第三行是元素间比值。

下面以第一列所展示的数值为例,在上下文出现了ice的情况下,出现solid的概率为 1.9 × 1 0 − 4 1.9 \times 10^{-4} 1.9×104,而上下文出现了stream的情况下,出现solid的概率为 2.2 × 1 0 − 5 2.2 \times 10^{-5} 2.2×105,单单这两个概率值只能提供有限的信息,但是二者相除的结果为8.9,相差近10倍,从第三行总体情况来看8.9算是一个较大的值,这时可以说ice的上下文比起stream的上下文更可能出现solid这一个词,我们从现实情况上来看,冰可以说是固体,蒸汽不是固体,冰确实跟固体有更强的联系,既符合现实,也符合人的直觉。

ice和stream通过solid这一桥梁建立起了联系,如果用词的不是solid而是gas,那么这个比值将变得很小,说明蒸汽才和气体有较大联系,如果这个词改为water,这个比值为1.36,很接近1,改为fashion也是接近1的数值,在比值接近1时,只能作为桥梁的这个词跟ice和stream均有较强联系或是均没有联系。通过不断更改作为桥梁的词,可以计算出一系列的概率比值,这些比值使得词之间的联系能在更高的维度上建立起来,逐渐接近词的深层语义,以上就是Glove建模的出发点。

现在知道了Glove建模的出发点,但是具体要用什么模型来表达呢?一个最简单的想法,如果我们可以在线性空间建立起模型就再好不过了,便于推导也便于优化。所谓的线性空间和向量空间是一个意思,换句话说,我们希望可以通过向量间的加减乘除就能够代表共现概率间的比值。基于这一思想,我们假设共现概率 P i k P_{ik} Pik P j k P_{jk} Pjk间比值能用 w i , w j , w k w_i,w_j,w_k wi,wj,wk这三个词的词向量表示:

P i k P j k = g ( w i , w j , w k ) \frac{P_{ik}}{P_{jk}} = g(w_i,w_j,w_k) PjkPik=g(wi,wj,wk)

观察这个公式,左边是可以用统计算出来的已知信息,右边的词向量 w i , w j , w k w_i,w_j,w_k wi,wj,wk以及函数 g g g的形式都是未知,和word2vec一样,词向量同样是作为模型参数,也是我们最终想得到的东西。我们暂且抛开函数g的具体形式不谈,我们可以如果要构造一个损失函数,可以根据上面式子的形式,将损失函数写作:

J = ∑   (   g ( w i , w j , w k ) − P i k P j k ) J=\sum\ (\ g(w_i,w_j,w_k) - \frac{P_{ik}}{P_{jk}} ) J= ( g(wi,wj,wk)PjkPik)

这种式子应该很熟悉,g是模型预测,P之间的比值是真实值,也是我们已知的值,接下来用梯度下降等方法求解模型参数 w i , w j , w k w_i,w_j,w_k wi,wj,wk即可。现在的问题是g的形式应该是什么样的?下面就是作者对该损失进行魔改的时间了。

说个题外话,Glove的作者原本是理论物理博士,如果接触过量子力学、微观物理那一套理论的话,应该可以深切体会到,这个领域有些推导是没有严谨地遵循数学逻辑的,很多时候需要用启发式的思维,看起来合理,但深究起来又感觉有点说不通。

作者的思路是这样的:

  1. 我们通过 w k w_k wk这一桥梁希望发现 w i w_i wi w j w_j wj间的语义关系,那么在向量空间中应该可以w_i和w_j间的差值来表示他们间的关系吧?所以 g ( w i , w j , w k ) g(w_i, w_j, w_k) g(wi,wj,wk)间应该存在有 ( w i − w j ) (w_i-w_j) (wiwj)这一项。
  2. P i k P j k \frac{P_{ik}}{P_{jk}} PjkPik是标量,那么 g g g输出的也应该是标量,而 w i , w j , w k w_i,w_j,w_k wi,wj,wk都是向量,要得到标量可以通过向量间的内积,所以 g g g应该具有这种形式 ( w i − w j ) T w k (w_i-w_j)^Tw_k (wiwj)Twk
  3. 最后是对 ( w i − w j ) T w k (w_i-w_j)^Tw_k (wiwj)Twk进行指数运算 e x p ( ) exp() exp(),这样就可以得到以下推导:

P i k P j k = g ( w i , w j , w k ) = e x p ( ( w i − w j ) T w k ) = e x p ( w i T w k ) e x p ( w j T w k ) \begin{aligned}\frac{P_{ik}}{P_{jk}}=&g(w_i,w_j,w_k)\\=&exp((w_i-w_j)^Tw_k)\\ =&\frac{exp(w_i^Tw_k)}{exp(w_j^Tw_k)}\end{aligned} PjkPik===g(wi,wj,wk)exp((wiwj)Twk)exp(wjTwk)exp(wiTwk)

这时发现分子分母可以统一形式,既写成向量内积的指数形式:

P i j = e x p ( w i T w j )     o r     l o g P i j = w i T w j P_{ij} = exp(w_i^Tw_j) \ \ \ or \ \ \ logP_{ij} = w_i^Tw_j Pij=exp(wiTwj)   or   logPij=wiTwj

第三步套一层exp()感觉算是一种启发式推导了,就是为了推导化简,使分子分母的共现概率能够写成简单且一致的形式。此时我们的损失函数可以改写成:

J = ∑ w i T w j − l o g P i j J=\sum w_i^Tw_j - logP_{ij} J=wiTwjlogPij

但现在存在一个问题,即 l o g P i j = w i T w j logP_{ij} = w_i^Tw_j logPij=wiTwj中,左右的对称性不成立,如果i和j交换, w i T w j = w j T w i w_i^Tw_j = w_j^Tw_i wiTwj=wjTwi自然是成立,但是本文一开头也说了 P i j ≠ P j i P_{ij} \not = P_{ji} Pij=Pji,所以要给这条式子补个偏置项强行使等式继续成立,即:

l o g P i j = w i T w j + b j logP_{ij} = w_i^Tw_j+b_j logPij=wiTwj+bj

此时再看我们的损失函数,就可以继续展开

J = ∑ w i T w j + b j − l o g P i j = ∑ w i T w j + b j − l o g X i j X i = ∑ w i T w j + b j − l o g X i j + l o g X i \begin{aligned} J&=\sum w_i^Tw_j + b_j -logP_{ij} \\ &= \sum w_i^Tw_j +b_j - log\frac{X_{ij}}{X_i} \\ &= \sum w_i^Tw_j + b_j - logX_{ij} + logX_i \end{aligned} J=wiTwj+bjlogPij=wiTwj+bjlogXiXij=wiTwj+bjlogXij+logXi

如果将logX_i也写记作一个偏置项b_i,则可以进一步写成:

J = ∑ w i T w j + b i + b j − l o g X i j J = \sum w_i^Tw_j + b_i + b_j - logX_{ij} J=wiTwj+bi+bjlogXij

最后是基于词频越高权重应该越大的原则,给损失函数的每一项求和项加一个权值,写成下面的式子:

J = ∑ f ( X i j ) ( w i T w j + b i + b j − l o g X i j ) J = \sum f(X_{ij})(w_i^Tw_j + b_i + b_j - logX_{ij}) J=f(Xij)(wiTwj+bi+bjlogXij)

f ( X i j ) f(X_{ij}) f(Xij)即为基于词频 X i j X_{ij} Xij的权值,它的表达式和函数图形如下:

f ( x ) = { ( x / x m a x ) 0.75 if   x < x m a x 1 if   x > = x m a x f(x) = \begin{cases} (x/xmax)^{0.75} & \text{if} \ \ x<xmax \\ 1 & \text{if} \ \ x>=xmax\end{cases} f(x)={(x/xmax)0.751if  x<xmaxif  x>=xmax

在这里插入图片描述

设计成这个形式的主要目的是根据词频的大小对损失进行加权,词频越大,损失项的权值越大,代表越重要,但是词频大到一定程度时,权值也不能无限增大,权值再大不能超过1。

以上就是Glove的所有推导,Glove的构思很有想法,以共现概率的比值来表示词的意义,并将词向量运用进来,但是其模型的推导有一点随性,这也是它被人质疑的一个地方,虽说它针对word2vec中没有利用到统计信息这一缺陷进行改进,但是Glove和word2vec在实际效果并没有太大区别。

3.参考文献

  1. https://blog.csdn.net/mr_tyting/article/details/80180780
  2. http://www.fanyeong.com/2018/02/19/glove-in-detail/
  3. https://zhuanlan.zhihu.com/p/60208480
  4. Stanford cs224n Lecture 2 - Word Vectors and Word Senses (slides-marginnote)
  5. [https://blog.csdn.net/coderTC/article/details/73864097](
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值