Glove原理解析

您所在的位置:网站首页 共现原理 Glove原理解析

Glove原理解析

2024-07-16 11:13| 来源: 网络整理| 查看: 265

 

在2013年Tomas Mikolov等人提出word2vec之后,2014年,Jeffrey Pennington, Richard Socher, Christopher D. Manning三人提出了GloVe算法[1][2][3]。其中,GloVe是Global Vector的缩写。在传统上,实现word embedding(词嵌入)主要有两种方法,Matrix Factorization Methods(矩阵分解方法)和Shallow Window-Based Methods(基于浅窗口的方法),二者分别有优缺点,而GloVe结合了两者之间的优点。从论文中的实验,可以看到GloVe方法好于word2vec等方法。

1 背景

做word embedding的方法,在2014年的时候主要有两种。一种是Matrix Factorization Methods(矩阵分解方法),一种是Shallow Window-Based Methods(基于浅窗口的方法)。关于Shallow Window-Based Methods,一个典型代表就是word2vec的方法,我在博客[5]已经解析过了。Matrix Factorization Methods这种方法,大致可以理解为是一种基于统计的方法,下面以简单例子说明。

一个简单的例子:Window based co-occurrence matrix(基于窗口的共现矩阵)。 窗口长度这里选择为1(通常使用5-10),矩阵具有对称性(与在左侧或右侧无关)。样本数据集:1. I like deep learning. 2. I like NLP. 3. I enjoy flying.

这样就可以得到如下的基于窗口的共现矩阵,如下图图1。

有了这个矩阵,每个词的向量就可以表示出来了。比如上图图1中,I就是对应第一行的向量,所以在这个模型中,I的向量表示就是 (0,2,1,0,0,0,0,0)(0,2,1,0,0,0,0,0),其他的类推。但是使用此矩阵去表示词向量有以下问题:

随着词汇增多,向量的大小会变得很大。非常高维,需要大量存储空间。随后的分类模型具有稀疏性的问题。(注:因为维数高,又稀疏,模型分类不易)模型不够健壮(robust)

对于上述问题的解决方案:Low dimensional vectors(低维向量)。该方案的想法是:将“大多数”的重要信息保存在一个固定的、数量较小的维度的向量。通常这个维度是25-1000维,类似于word2vec。那么,如何减少这个维度呢?

方法一:在共现矩阵X上面进行降维。 降维的方法之一就是Singular Value DecomposiRon(奇异值分解,简称SVD),如下图图2。其中,X~X~表示在最小二乘法的约束下,秩为k最接近X的矩阵。SVD的原理,笔者不太熟悉,这里知道有SVD的方法可以降维就可以了。

但是SVD(奇异值分解)依然有以下几个问题:

计算代价太大。对于一个n*m的矩阵,计算复杂度是O(mn2)O(mn2)。这就导致会与数百万的文档或词汇不易计算。难以将新的词汇或文档合并进去。

下图图8是将基于计数的和基于直接预测的两种word embedding方法对比:

基于计数的方法的优点是: 1. 训练非常迅速。 2. 能够有效的利用统计信息。 缺点是:1. 主要用于获取词汇之间的相似性(其他任务表现差) 2. 给定大量数据集,重要性与权重不成比例。

基于预测的方法的优点是: 1. 能够对其他任务有普遍的提高。 2. 能够捕捉到含词汇相似性外的复杂模式。 缺点是:1. 需要大量的数据集。 2. 不能够充分利用统计信息。

这二者都有优缺点,GloVe的逻辑是,两种方法的优点结合起来。怎么结合的呢?这正是第二节的内容。

 

2 Glove原理

要了解GloVe之前,建议学习下word2vec的原理。看懂了word2vec,再看此论文会非常容易,因为里面有很多相通的地方。GloVe原理,里面也不像其他的那么推导公式,一步一步来。这里的原理,很多还是靠自己慢慢理解那种。下面是正文。

首先定义词与词之间的共现次数矩阵为XX,其中XijXij表示单词j是单词i的上下文的次数。 定义Xi=∑kXikXi=∑kXik,表示单词i的上下文的所有单词的总个数。最终Pij=P(j|i)=Xij/XiPij=P(j|i)=Xij/Xi表示单词j出现在单词i的上下文的概率。

可以从一个简单例子看到共现概率的重要性。假定我们关心两个中心词,i和j。其中,我们假定i=ice,j=steam。那么我们可以通过给定不同的单词k,研究他们共现的概率来判定两个单词的关系。比如k = solid(固体),我们会期待比率 Pik/PjkPik/Pjk非常大。同样的,单词k与steam有关,与ice无关,比如k=gas,那么比率就非常小。如果k=water或fashion(时尚),那么或者与二者都有关,或都无关。那么比率就会接近1。下图图9就是他们的概率及比率。通过对比原始的概率,这个比率可以很好的从不相关词汇(water和fashion)中区分相关的词汇(solid和gas)。也很好的区分两个相关词汇。

上面的讨论告诉我们,单词的词向量(word vector)学习应该跟词共现概率的比率有关,而不是他们的概率本身。注意到比率Pik/PjkPik/Pjk依赖于i,j,ki,j,k,最一般的形式如下图图10

 

References

GloVe算法原理及简单使用

 

 

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3