一、什么是GloVe
- 模型目标:进行词的向量化表示,使得向量之间尽可能多地蕴含语义和语法的信息。
- 输入:语料库
- 输出:词向量
- 方法概述:首先基于语料库构建词的共现矩阵,然后基于共现矩阵和GloVe模型学习词向量。
二、GloVe的实现步骤
1、构建共现矩阵
设共现矩阵为 X X X,其元素为 X i , j \displaystyle X_{i,j} Xi,j。
X i , j \displaystyle X_{i,j} Xi,j的意义为:在整个语料库中,单词i和单词j共同出现在一个窗口中的次数。
举个栗子:
设有语料库:i love you but you love him i am sad
这个小小的语料库只有1个句子,涉及到7个单词:i、love、you、but、him、am、sad。
如果我们采用一个窗口宽度为5(左右长度都为2)的统计窗口,那么就有以下窗口内容:
窗口标号 | 中心词 | 窗口内容 |
---|---|---|
0 | i | i love you |
1 | love | i love you but |
2 | y | i love you but you |
3 | but | ove you but you love |
4 | you | you but you love him |
5 | love | but you love him i |
6 | him | you love him i am |
7 | i | love him i am sad |
8 | am | him i am sad |
9 | sad | i am sad |
窗口0、1长度小于5是因为中心词左侧内容少于2个,同理窗口8、9长度也小于5。
以窗口5为例说明如何构造共现矩阵:
中心词为love,语境词为but、you、him、i;则执行:
X l o v e , b u t + = 1 \displaystyle X_{love,but} +=1 Xlove,but+=1
X l o v e , y o u + = 1 \displaystyle X_{love,you} +=1 Xlove,you+=1
X l o v e , h i m + = 1 \displaystyle X_{love,him} +=1 Xlove,him+=1
X l o v e , i + = 1 \displaystyle X_{love,i} +=1 Xlove,i+=1
使用窗口将整个语料库遍历一遍,即可得到共现矩阵X:
2、使用GloVe模型训练词向量
(1)模型怎么来的
- 矩阵单词i那一行的和:
X i = ∑ j N X i , j \displaystyle X_{i} =\sum ^{N}_{j} X_{i,j} Xi=j∑NXi,j - 条件概率,表示单词k出现在单词i语境中的概率:
P i , k = X i , k X i \displaystyle P_{i,k} =\frac{X_{i,k}}{X_{i}} Pi,k=XiXi,k - 两个条件概率的比率:
r a t i o i , j , k = P i , k P j , k \displaystyle ratio_{i,j,k} =\frac{P_{i,k}}{P_{j,k}} ratioi,j,k=Pj,kPi,k
作者发现,ratioi,j,k这个指标是有规律的,规律统计在下表:
r a t i o i , j , k \displaystyle ratio_{i,j,k} ratioi,j,k的值 | 单词 j , i j,i j,i 相关 | 单词 j , i j,i j,i 不相关 |
---|---|---|
单词 i , j i,j i,j 相关 | 趋近1 | 很大 |
单词 i , j i,j i,j 不相关 | 很小 | 趋近1 |
思想:假设已经得到了词向量,如果用词向量 v i \displaystyle v_{i} vi、 v j \displaystyle v_{j} vj、 v k \displaystyle v_{k} vk通过某种函数计算 r a t i o i , j , k \displaystyle ratio_{i,j,k} ratioi,j,k,能够同样得到这样的规律的话,就意味着我们词向量与共现矩阵具有很好的一致性,也就说明词向量中蕴含了共现矩阵中所蕴含的信息。
设用词向量 v i \displaystyle v_{i} vi、 v j \displaystyle v_{j} vj、 v k \displaystyle v_{k} vk计算 r a t i o i , j , k \displaystyle ratio_{i,j,k} ratioi,j,k的函数为 g ( v i , v j , v k ) \displaystyle g( v_{i} ,v_{j} ,v_{k}) g(vi,vj,vk)(先不去管具体的函数形式),那么应该有:
P i , k P j , k = r a t i o i , j , k = g ( v i , v j , v k ) \displaystyle\frac{P_{i,k}}{P_{j,k}}=ratio_{i,j,k} =g( v_{i} ,v_{j} ,v_{k}) Pj,k