摘要
词向量的成功捕捉到了细粒度的语义信息和语法规则,本文提出的方法融合了主流模型的优点:全局矩阵分解(LSA)和局部内容窗口(Word2vec),充分利用统计信息使用词共现矩阵中频率非零的元素来训练模型。
引言
使用向量空间来表示自然语言可以做为许多NLP任务(文本分类,信息检索......)的特征输入,主流的两种方法是基于全局矩阵分解的LSA和局部窗口信息的Word2vec。LSA虽然充分利用了统计信息,但在词语类比上没有好的表现。Word2vec在类比任务上有好的性能,但由于仅利用了分离的窗口训练而忽略了全局共现信息。而这篇文章提出的方法利用词共现矩阵充分利用了统计信息,高效地对语义进行编码。
The Glove Model
X : 词共现矩阵。
Xij :word i 和word j一同出现地次数。
Xi =∑k Xik :所有单词在word i的上下文中出现的次数。
Pi j = P( j|i) =Xi j/Xi : word j 在word i的上下文中出现的概率。
下面举一个例子展示如何利用词共现信息来捕捉词义,比如word i = ice,word j = steam,word k = solid,solid和ice看起来比solid和steam语义更相近些,那么训练过程中 Pik/Pjk 的比值就应该大些,若word k是和ice,steam都比较相近的词语,那么两者共现概率的比值就应该接近1。
下面是在大型语料上的词共现信息,对于与ice相关而与steam不相关的词k,例如k=solid,我们期望共现概率比值Pik/Pjk较大,例如下面最后一栏的8.9,对于与ice不相关而与steam相关的词k,例如k=gas,我们期望共现概率比值Pik/Pjk较小,例如下面最后一栏的0.085,对于与ice和steam都相关的词k,例如k=water,我们期望共现概率比值Pik/Pjk接近1,例如下面最后一栏的1.36,对于与ice和steam都不相关的词k,例如k=fashion,我们期望共现概率比值Pik/Pjk接近1,例如上面最后一栏的0.96,可以看出词频和词语的相关性是有一定关联的。
由此基于词共现信息的词向量模型就要着手学习语料中的词共现信息,接下来介绍模型公式的推导过程:
首先可以用有关词向量的函数F来表达共现概率比值,w是d维词向量,等式右边的概率比值根据语料内容获得,然而一般由于语料库的庞大,这一点是很难做到的,所以要对公式变形。
考虑到F是要将Pik/Pjk编码到向量空间,也就是要将Pik和Pjk的差距换句话说就是距离在向量空间中表现出来,那么我们可以使用两者之间的差,于是公式可以转换为如下形式:
观察上式会发现,等式左边是一个向量,而等式右边是一个标量,为了将他们划上等号,继续改造等式左边,将wi - wj的转置与wk做点积同样得到一个标量:
考虑到wi和wk一个作为中心词一个作为上下文词,它们的角色是可以互换的,公式在这种角色互换下应保持不变的形式,任意词作为中心词和背景词的词向量应该相等。词与词之间共现次数矩阵X应该对称:对任意词i和j,xij=xji公式需要继续变换:
为实现上述等式,令F为exp,则
然而log(pij)不等于log(pji)但viTvj等于vjTvi,即等式左侧不具有对称性,但是右侧具有对称性,这里由于Xi和k无关,将Xi看做一个wi的偏置bi,再为wk添加另一个偏置bk,就可以解决对称性的问题,这样就可以使用词向量来表示词频:
上式相比最初的公式已经合理简洁了不少,但是当某两个单词没有共现情况时,比值会出现0,解决这一问题的传统方法是在公式中加入常量log(Xik ) = log(1 + Xik ),这意味着以同样的权重看待语料中的每一个词,但这些出现频率非常低的词不但没有带来有用的信息还会引入噪音。文章使用了新方法来解决这种问题,在最终的代价函数中添加权重函数f (Xi j ),词的词频越高,则权重越大:
权重函数f:
整个模型通过不断优化这个损失函数来调整词向量,使得模型通过学习语料中的词频信息来捕捉语义信息。