在读本文前默认读者已经懂得了词向量的基本常识。
GloVe瞄准的是word2vec的缺点,我们知道word2vec进行训练词向量时只考虑了窗口内的单词,对于窗口外的词则没有考虑到,GloVe通过构建共现矩阵的方式使得训练词向量时考虑了全局信息,同时GloVe的训练没有采用神经网络,而是计算共现矩阵,使得训练的速度更快,适合大规模语料。
GloVe模型分两步:1.构建共现矩阵;2.构建损失函数并训练
直接举例子:假如语料库中有N个单词,则共现矩阵是一个形状为N*N的二维向量,其中每个元素代表单词x和y共同出现的次数
假设有这两句话:i would like a glass of orange juice; i like orange juice
则共现矩阵为
count | i | would | like | a | glass | of | orange |
i | 0 | 1 | 2 | 0 | 0 | 0 | 1 |
would | 1 | 0 | 1 | 1 | 0 | 0 | 0 |
like | ... |
|
|
|
|
|
|
a |
|
|
|
|
|
|
|
glass |
|
|
|
|
|
|
|
of |
|
|
|
|
|
|
|
orange |
|
|
|
|
|
| ... |
为了方便我们只写前两行,在这两句话中总的语料是8个单词,我们看第2行和第3行,i 和 i 我们默认这样的为0,i 和 would在这两句话中共同出现了1次,因此记为1,;i 和 like在这两句话中共出现了2次,我们记为2,一直这样进行统计共同出现的次数即可。
共现矩阵已经构建好,如何进行训练?损失函数又是什么?
我们知道线性回归模型损失函数是:自己脑补,敲公式费劲。我们希望wx+b与真实的标签y之间的差距越小越好,因此我们借助上面这个线性回归模型的损失函数构建一个简化版本的损失函数:j = Vi*Vj - log(Xij)公式的前面有个求和符号,这里不打出来了。公式中Vi和Vj是随机初试的单词词向量,这个会进行训练更新,Xij则是共现矩阵中这两个单词Vi和Vj共同出现的次数,我们令这个损失最小即可进行训练,剩下的就是一些无关紧要的细节了,都能在别的地方查到。喜欢的欢迎点赞,收藏,如果还有疑问欢迎留言。