引入
常用的两种对词进行向量化的方法族都有自身的缺点:
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产生的词向量, 还有着eman−ewoman≈eking−equeen的关系, 这可以被定义为在词义上有线性表现(linear directions of meaning).
文章认为这个属性是词向量化模型必须具备的属性, 然后提出了使用对数(log-bilinear)回归模型来保证这种属性. 通过一个加权最小平方模型(weighted least squares model), 通过语料全局的word-word co-occurrence的次数来训练这个模型, 这样就使用到了全局的统计信息. 而且词与词之间的co-occurrence通过窗口限制, 也考虑了局部, 因此使用了语料中更多的信息, 理论上向量化效果应当更好.
Glove模型
Global Vectors(GloVe)模型使用语料全局统计信息, 并且生成的词向量, 并且词向量与词义有着希望的对应关系.
定义符号:
X: matrix of word-word co-occurrence counts
Xij: 单词j在单词i的上下文中出现的次数
Xi=k∑Xik: 所有单词在单词i的上下文中出现的次数
Pij=P(j∣i)=XiXij: 单词j出现在单词i的上下文中的概率
考虑几个例子:
假设有两个单词i=ice, j=steam. 我们认为, 这两个单词的相关性, 可以通过第三个探针单词k来体现, 具体来说是通过比例Pik/Pjk来体现, 如何体现呢?
例如说单词k与i很相关, 而与j不相关, 例如k=solid, 这样Pik/Pjk的值就会很大; 再比如单词k与i不相关, 而与j很相关, 例如k=gas, Pik/Pjk值就会很小; 如果单词k同时与两个单词都很相关, 例如k=water, 或者同时与两个单词都不相关, 例如k=fashion, 那个Pik/Pjk值就会接近于1.
因此, 相对于使用原始的条件概率Pij, 这个比例的大小就很能很好的区分相关与否的单词.
定义ratioi,j,k=Pik/Pjk, 这个值与i, j, k三个单词相关. 这个概率目前使用全局共现频率统计计算得到的, 如果我们可以通过这三个单词的词向量计算得到, 那么就可转换成:
F(wi,wj,w~k)=PjkPik
这就是我们希望在词的向量空间中的运算来表示这个概率.
下面就是把上式转换成我们可以计算的形式的过程:
我们希望词向量具有线性特性, 那么词向量之间的差向量就能很好的定义两个单词之间的差异性. 由于我们要考察i和j之间的相关性, 所以上式可以转换为:
F(wi−wj,w~k)=PjkPik
注意到等式右侧是标量, 左侧的变量是两个向量, 因此很自然的想到通过内积的方式进行转换, 即函数内部应该有向量之间的内积运算, 因此也就是这个内积就可以做自变量. 而且内积也能很好的保持向量之间的线性, 得到:
F((wi−wj)Tw~k)=PjkPik
考虑到使用了单词之间的co-occurrence矩阵, 因此对于一个中心词和其对应的某个上下文词, 这两个词的角色是可以相互转换的, 即应表现出对称性. 又考虑到使用词向量表示Pik, 而且没有顺序区别, 点积是很好的形式, 因此:
F((wi−wj)Tw~k)=F(wjTw~k)F(wiTw~k)
其中:
F(wiTw~k)=Pik=XiXik
而对于F((wi−wj)Tw~k)=F(wjTw~k)F(wiTw~k)这种形式, 观察左侧的相减转换成了右侧相除的形式, 容易联想到幂函数的形式. 因此使F=exp, 则F(wiTw~k)=Pik=XiXik一式转换为:
wiTw~k=log(Xik)−log(Xi)
注意到Xik=Xki, 因此上面等式中三项只有log(Xi)没有对称性. 又由于log(Xi)是关于i的一个函数, 所以将其即为一个偏置项bi, 为了对称性同时加入单词k的偏置项b~k, 式子转换成:
wiTw~k+bi+b~k=log(Xik)
我们希望上式的两端尽可能相等, 因此用差的平方来衡量差距. 而考虑到Xik两个单词共现的频率不同, 采用加权的方法, 对词典中所有项进行衡量, 因此得到最终的损失函数:
L=i,j=1∑Vf(Xij)(wiTw~j+bi+b~j−logXij)2
其中V是字典中词的数量. 而权重函数f需要考虑如下几点:
f(0)=0, 且当x→0时, x→0limf(x)log2x是有限值
f(x)应当是非递减函数, 这样很少共现的情况就不会被考虑过重
f(x)对于很大的自变量x其值也不能过大, 这样就不会过度考虑频繁共现的情况
论文中最终选择:
f(x)={(x/xmax)α,if x<xmax1,otherwise
其中xmax=100, α=0.75即可.
GloVe训练
需要选择的超参数有:
而在训练过程中, 两个单词, 中心词词向量w和上下文词词向量w~使用的不是同一个词向量矩阵. 但当X是对称的, 则W和W~矩阵就是等同的. 但在训练的初始化时, 这两个嵌入参数矩阵用不同的数值进行初始化. 在最后对于每个单词最终的词向量, 从W+W~矩阵中取出对应单词的限量. 即将两个矩阵加和在一起作为最后的结果, 这样的方法能够: