Glove词向量
引入
学习词向量有两种方法:局部和全局
全局的代表有 LSA PLSA等
局部的代表有 Word2Vec
他们都有各自的缺陷,全局的没有利用好词之间的类比信息,局部的方法没有利用词全局的统计信息
Glove词向量即利用了局部信息也利用了全局的统计信息,全名为:Global Vectors for Word Representation Jeffrey
word2vec是常用的开源词向量解决方案,还有一种也比较常用的为Glove,一般都会把他们俩放到一起讨论
Glove
概述
- 模型目标:进行词的向量化服务,使得向量之间尽可能多的蕴含语义和语法信息
- 输入:语料库
- 输出:词向量
共现矩阵
- 定义:设矩阵为 X i , j X_{i,j} Xi,j为共现矩阵,K为窗口大小。
- 含义: X i , j X_{i,j} Xi,j代表单词 i i i在窗口K内与单词 j j j同时出现的次数
**示例:**我在青岛栈桥等你,你在青岛栈桥等他。涉及单词:[我,在,青岛,栈桥,等,你,他],那么构建矩阵为7*7大小,设窗口K=3,则共现矩阵如下
我 | 在 | 青岛 | 栈桥 | 等 | 你 | 他 | |
---|---|---|---|---|---|---|---|
我 | - | 1 | 1 | 0 | 0 | 0 | 0 |
在 | 1 | - | 2 | 2 | 0 | 0 | 0 |
青岛 | 1 | 2 | - | 2 | 2 | 0 | 0 |
栈桥 | 0 | 2 | 2 | - | 2 | 1 | 1 |
等 | 0 | 0 | 2 | 2 | - | 1 | 1 |
你 | 0 | 0 | 0 | 1 | 1 | - | 0 |
他 | 0 | 0 | 0 | 1 | 1 | 0 | - |
那么得到共现矩阵后该怎么得到每个词的词向量呢?
公式
J = Σ i , j N f ( X i , j ) ( v i T v j + b i + b j − l o g ( X i , j ) ) 2 J=\Sigma_{i,j}^{N}f(X_{i,j})(v_{i}^{T}v_{j}+b_{i}+b_{j}-log(X_{i,j}))^{2} J=Σi,jNf(Xi,j)(viTvj+bi+bj−log(Xi,j))2
其中, v i , v j v_{i},v_{j} vi,vj指的是单词 i i i、单词 j j j的词向量, b i , b j b_{i},b_{j} bi,bj是两个标量(作者定义的偏差项), f f f是权重函数。 N N N是词汇表的大小,共现矩阵维度为 N ∗ N N*N N∗N
可以看到,Glove没有使用神经网络的方法
定义: X i = Σ j = 1 N X i , j X_{i}=\Sigma_{j=1}^{N}X_{i,j} Xi=Σj=1NXi,j,即共现矩阵种一个单词行所有列的值相加;条件概率: P i , k = X i , k X i P_{i,k}=\frac{X_{i,k}}{X_{i}} Pi,k=XiXi,k,表示单词 k k k在行单词 i i i的概率; r a t i o n i , j , k = P i , k P j , k ration_{i,j,k}=\frac{P_{i,k}}{P_{j,k}} rationi,j,k=