GloVe原理

引入

常用的两种对词进行向量化的方法族都有自身的缺点:

  • global matrix factorization methods(全局统计矩阵分解法): 例如positive pointwise mu- tual information(PPMI)方法. 类似于这种方法, 充分考虑了全局的统计信息(词频等), 但没有考虑单词的局部情况, 导致在单词推理(word analogy)任务中表现很差.

  • Shallow Window-Based Methods(浅层窗口方法): 例如word2vec中的CBOW或Skip-gram(Skip-Gram with Negative Sampling, SGNG)方法. 这种方法在单词推理的任务中表现很好, 但是没有使用到预料的统计信息, 只是使用到了窗口限定的局部信息.

其中的单词推理任务举个例子就是word2vec论文中经典的man->woman的关系推理出king->?中的未知单词是queen. 而且word2vec产生的词向量, 还有着emanewomanekingequeene_{man}-e_{woman} \approx e_{king}-e_{queen}的关系, 这可以被定义为在词义上有线性表现(linear directions of meaning).

文章认为这个属性是词向量化模型必须具备的属性, 然后提出了使用对数双线性(log-bilinear)回归模型来保证这种属性. 通过一个加权最小平方模型(weighted least squares model), 通过语料全局的word-word co-occurrence次数来训练这个模型, 这样就使用到了全局的统计信息. 而且词与词之间的co-occurrence通过窗口限制, 也考虑了局部, 因此使用了语料中更多的信息, 理论上向量化效果应当更好.

Glove模型

Global Vectors(GloVe)模型使用语料全局统计信息, 并且生成的词向量, 并且词向量与词义有着希望的对应关系.

定义符号:

  • XX: matrix of word-word co-occurrence counts

  • XijX_{ij}: 单词jj在单词ii的上下文中出现的次数

  • Xi=kXikX_i=\sum\limits_{k}X_{ik}: 所有单词在单词ii的上下文中出现的次数

  • Pij=P(ji)=XijXiP_{ij}=P(j|i)=\frac{X_{ij}}{X_{i}}: 单词jj出现在单词ii的上下文中的概率

考虑几个例子:

假设有两个单词i=icei=ice, j=steamj=steam. 我们认为, 这两个单词的相关性, 可以通过第三个探针单词kk来体现, 具体来说是通过比例Pik/PjkP_{ik}/P_{jk}来体现, 如何体现呢?

例如说单词kkii很相关, 而与jj不相关, 例如k=solidk=solid, 这样Pik/PjkP_{ik}/P_{jk}的值就会很大; 再比如单词kkii不相关, 而与jj很相关, 例如k=gask=gas, Pik/PjkP_{ik}/P_{jk}值就会很小; 如果单词kk同时与两个单词都很相关, 例如k=waterk=water, 或者同时与两个单词都不相关, 例如k=fashionk=fashion, 那个Pik/PjkP_{ik}/P_{jk}值就会接近于1.

因此, 相对于使用原始的条件概率PijP_{ij}, 这个比例的大小就很能很好的区分相关与否的单词.

定义ratioi,j,k=Pik/Pjkratio_{i,j,k}=P_{ik}/P_{jk}, 这个值与ii, jj, kk三个单词相关. 这个概率目前使用全局共现频率统计计算得到的, 如果我们可以通过这三个单词的词向量计算得到, 那么就可转换成:

F(wi,wj,w~k)=PikPjkF(w_i,w_j,\tilde{w}_k)=\frac{P_{ik}}{P_{jk}}

这就是我们希望在词的向量空间中的运算来表示这个概率.

下面就是把上式转换成我们可以计算的形式的过程:

  • 我们希望词向量具有线性特性, 那么词向量之间的差向量就能很好的定义两个单词之间的差异性. 由于我们要考察iijj之间的相关性, 所以上式可以转换为:

    F(wiwj,w~k)=PikPjkF(w_i-w_j,\tilde{w}_k)=\frac{P_{ik}}{P_{jk}}

  • 注意到等式右侧是标量, 左侧的变量是两个向量, 因此很自然的想到通过内积的方式进行转换, 即函数内部应该有向量之间的内积运算, 因此也就是这个内积就可以做自变量. 而且内积也能很好的保持向量之间的线性, 得到:

    F((wiwj)Tw~k)=PikPjkF((w_i-w_j)^T\tilde{w}_k)=\frac{P_{ik}}{P_{jk}}

  • 考虑到使用了单词之间的co-occurrence矩阵, 因此对于一个中心词和其对应的某个上下文词, 这两个词的角色是可以相互转换的, 即应表现出对称性. 又考虑到使用词向量表示PikP_{ik}, 而且没有顺序区别, 点积是很好的形式, 因此:

    F((wiwj)Tw~k)=F(wiTw~k)F(wjTw~k)F((w_i-w_j)^T\tilde{w}_k)=\frac{F(w_i^T\tilde{w}_k)}{F(w_j^T\tilde{w}_k)}

    其中:

    F(wiTw~k)=Pik=XikXiF(w_i^T\tilde{w}_k)=P_{ik}=\frac{X_{ik}}{X_i}

    而对于F((wiwj)Tw~k)=F(wiTw~k)F(wjTw~k)F((w_i-w_j)^T\tilde{w}_k)=\frac{F(w_i^T\tilde{w}_k)}{F(w_j^T\tilde{w}_k)}这种形式, 观察左侧的相减转换成了右侧相除的形式, 容易联想到幂函数的形式. 因此使F=expF=\exp, 则F(wiTw~k)=Pik=XikXiF(w_i^T\tilde{w}_k)=P_{ik}=\frac{X_{ik}}{X_i}一式转换为:

    wiTw~k=log(Xik)log(Xi)w_i^T\tilde{w}_k=\log(X_{ik})-\log(X_i)

    注意到Xik=XkiX_{ik}=X_{ki}, 因此上面等式中三项只有log(Xi)\log(X_i)没有对称性. 又由于log(Xi)\log(X_i)是关于ii的一个函数, 所以将其即为一个偏置项bib_i, 为了对称性同时加入单词kk的偏置项b~k\tilde{b}_k, 式子转换成:

    wiTw~k+bi+b~k=log(Xik)w_i^T\tilde{w}_k+b_i+\tilde{b}_k=\log(X_{ik})

  • 我们希望上式的两端尽可能相等, 因此用差的平方来衡量差距. 而考虑到XikX_{ik}两个单词共现的频率不同, 采用加权的方法, 对词典中所有项进行衡量, 因此得到最终的损失函数:

    L=i,j=1Vf(Xij)(wiTw~j+bi+b~jlogXij)2L=\sum\limits_{i,j=1}^{V}f(X_{ij})(w_i^T\tilde{w}_j+b_i+\tilde{b}_j-\log{X_{ij}})^2

    其中VV是字典中词的数量. 而权重函数ff需要考虑如下几点:

    • f(0)=0f(0)=0, 且当x0x\to{0}时, limx0f(x)log2x\lim\limits_{x\to{0}}f(x)\log^2x是有限值

    • f(x)f(x)应当是非递减函数, 这样很少共现的情况就不会被考虑过重

    • f(x)f(x)对于很大的自变量xx其值也不能过大, 这样就不会过度考虑频繁共现的情况

    论文中最终选择:

    f(x)={(x/xmax)α,if x<xmax1,otherwisef(x)=\begin{cases} (x/x_{max})^{\alpha}, \quad \text{if } x < x_{max} \\ 1, \quad \text{otherwise} \end{cases}

    其中xmax=100x_{max}=100, α=0.75\alpha=0.75即可.

GloVe训练

需要选择的超参数有:

  • 上下文窗口

    • 窗口长度

    • 单向/双向窗口

  • xmaxx_{max}

  • α\alpha

  • 学习率

  • 词向量的维度

  • 迭代的轮数

而在训练过程中, 两个单词, 中心词词向量ww和上下文词词向量w~\tilde{w}使用的不是同一个词向量矩阵. 但当XX是对称的, 则WWW~\tilde{W}矩阵就是等同的. 但在训练的初始化时, 这两个嵌入参数矩阵用不同的数值进行初始化. 在最后对于每个单词最终的词向量, 从W+W~W+\tilde{W}矩阵中取出对应单词的限量. 即将两个矩阵加和在一起作为最后的结果, 这样的方法能够:

  • 噪声的影响

  • 过拟合

最后更新于