介绍
相比Word2Vec的局部训练,GloVe可以使用全局的语料统计信息来训练,可以预先计算全局语料库统计数据来提高训练数据.
带全局语料统计的跳元模型
用\(q_{ij}\)表示词\(w_j\)的条件概率\(P(w_j|w_i)\),在跳元模型中给定词\(w_i\),我们有
\[ q_{ij}=\frac{exp(\bm u^T_j\bm v_i)}{\sum_{k \in V}exp(\bm u^T_k\bm v_i)} \]
记录\(w_i\)在所有出现地方的上下文构成一个可重集合\(C_i\),其中元素j的数目记为\(x_{ij}\),损失函数定义为
\[ -\sum_{i\in V}\sum_{j\in V}x_{ij}log\ q_{ij} \]
用\(x_i\)表示\(|C_i|\),用\(p_{ij}\)表示概率\(x_{ij}/x_i\),则损失函数可以改写为
\[ -\sum_{i\in V}x_i\sum_{j\in V}p_{ij}log\ q_{ij} \]
我们发现\(-\sum_{j\in V}p_{ij}log\ q_{ij}\)就是计算全局语料统计的条件分布\(p_{ij}\)和模型预测的条件分布\(q_{ij}\)的交叉熵。
GloVe模型
考虑到计算成本的问题,以及大量罕见事件被损失建模,GloVe模型基于平方损失对模型进行了以下修改:
- 使用变量\(p^{'}_{ij}=x_ij\)和\(q^{'}_{ij}=exp(\bm u^T_{j}\bm v_i)\),并取两者对数,所以平方损失为\((log\ p^{'}_{ij}-log\ q^{'}_{ij})^2=(\bm u^T_{j}\bm v_i-log\ x_{ij})^2\).
- 为每个词\(w_i\)添加中心词偏执\(b_i\)和上下文词偏置\(c_i\)
- 用权重函数\(h(x)\)替代损失项权重,其中\(h(x)\)在[0,1]的间隔内递增.
最后总的损失函数为:
\[ \sum_{i\in V}\sum_{j\in V}h(x_{ij})(\bm u^T_{j}\bm v_i+b_i+c_j-log\ x_{ij})^2 \]
由于对称性,有\(x_{ij}=x_{ji}\),而Word2Vec没有拟合对称性,GloVe拟合了对称性.因此,在GloVe模型中,词的上下文向量\(u_i\)和中心词向量\(v_i\)应该是相等的,但在实际应用中,由于训练过程的随机化导致两个向量有轻微不同,因此GloVe将两者相加作为输出向量.
参考资料1也提供了另一种理解GloVe模型的思路,和cs224n里面类似.