介绍
相比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里面类似.
Since the comment system relies on GitHub's Discussions feature, by default, commentators will receive all notifications. You can click "unsubscribe" in the email to stop receiving them, and you can also manage your notifications by clicking on the following repositories: bg51717/Hexo-Blogs-comments