对于词向量来说,主要有两种,word2vec是direct prediction,另一种是count based global matrix factorization。这两种模型算法的优缺点同样明显:
比较SVD这种count based模型与Word2Vec这种direct prediction模型,它们各有优缺点:Count based模型优点是训练快速,并且有效的利用了统计信息,缺点是对于高频词汇较为偏向,并且仅能概括词组的相关性,而且有的时候产生的word vector对于解释词的含义如word analogy等任务效果不好;Direct Prediction优点是可以概括比相关性更为复杂的信息,进行word analogy等任务时效果较好,缺点是对统计信息利用的不够充分。所以Manning教授他们想采取一种方法可以结合两者的优势,并将这种算法命名为GloVe(Global Vectors的缩写),表示他们可以有效的利用全局的统计信息。
具体的可以看glove的原论文introduction中的这段,还是比较精简的:
那我们就开始搞懂一下glove吧
要想反映两个词的关系,我们可以固定一个新的第三方词。以这个为例,我们想看ice和steam的关系,分别选取了solid,gas,water,fashion这四个第三方词。
我们可以看到,其实这几个条件概率本身意义并不大,只不过是数值大一点或者小一点。但是比值就有意义了,可以看到P(solod|ice)/P(solod|steam)
比较大,但P(gas|ice)/P(gas|steam)
比较小,说明solid更常用来描述ice的状态而不是steam的状态,所以在ice的上下文中出现几率较大,对于gas则恰恰相反。比值接近1的那两个词,water和fashion,我们就可以理解为,这两个词本身与ice和steam的关系就不是很大,所以各自的条件概率都差不多,比值也自然差不多。
所以相较于单纯的co-occurrence probability,实际上co-occurrence probability的相对比值更有意义。
通过这些,我们甚至可以总结一下:
$$\begin{aligned}&w_i\cdot w_j=\log P(i|j)\\&w_x\cdot(w_a-w_b)=\log\frac{P(x|a)}{P(x|b)}\end{aligned}$$
这时候我们就可以明确一些公式符号了:
- $X_{i,j}$表示单词j出现在单词i所在上下文的次数
- $X_i=\sum _{k}X_{i,k}$表示单词i所在上下文的单词出现的总次数
- $P_{i,j}=P(j|i)=\frac{X_{i,j}}{X_i}$ 表示单词j在单词i上下文出现的概率。
原文也直接以ice和steam举例的,还是很清晰的论述了比值ratio的重要性
The above argument suggests that the appropriate starting point for word vector learning should be with ratios of co-occurrence probabilities rather than the probabilities themselves.
根据比率的得出过程,得出最普适性的模型表示:
$$F(w_i,w_j,\tilde{w}_k)=\frac{P_{ik}}{P_{jk}} ,$$
等式右边是有实际意义的,但左边这个F太过于宽泛,所以作者对于F的具象化提出了自己的想法:
The number of possibilities for F is vast, but by enforcing a few desiderata we can select a unique choice. First, we would like F to encode the information present the ratio Pik /Pjk in the word vector space. Since vector spaces are inherently linear structures, the most natural way to do this is with vector differences. With this aim, we can restrict our consideration to those functions F that depend only on the difference of the two target words, modifying Eqn
$$F(w_i-w_j,\tilde{w}_k)=\frac{P_{ik}}{P_{jk}} .$$
这里我们注意,等式左边是向量,等式右边是标量,这是不能画等号的。那么我们想到的就是让向量进行点积运算得出标量值。
$$F\left((w_i-w_j)^T\tilde{w}_k\right)=\frac{P_{ik}}{P_{jk}} ,$$
这里就来到了一个很巧妙的点了,作者发现,$F(·)=e^x$是一个很好的解,那这样就可以改写公式为
$$F(w_i^Tw_k-w_j^Tw_k)=\frac{\exp{(w_i^Tw_k)}}{\exp{(w_j^Tw_k)}}=\frac{P_{ik}}{P_{jk}}$$
这样就能反解出:
$$w_i^Tw_k=\log P_{ik}=\log P(w_k|w_i)=\log\frac{X_{ik}}{X_i}=\log X_{ik}-\log X_i$$
这里作者希望能任意交换单词和上下文单词,就作出了部分变换措施:
- 首先要求F满足这样一个特性:
$$F\left((w_i-w_j)^T\tilde{w}_k\right)=\frac{F(w_i^T\tilde{w}_k)}{F(w_j^T\tilde{w}_k)}$$ - 这样根据上面已有的等式条件,推出
$$F(w_i^T\tilde{w}_k)=P_{ik}=\frac{X_{ik}}{X_i}$$ - 这样一来,又能推出
$$w_i^T\tilde{w}_k=\log(P_{ik})=\log(X_{ik})-\log(X_i)$$ - 这时候我们发现,等式右侧的$log(X_i)$破坏了对称性,但好处是这个部分和k无关,就可以加偏置量实现对称性。
$$w_i^T\tilde{w}_k+b_i+\tilde{b}_k=\log(X_{ik}) .$$
这样的模型作者认为所有的co-occurrences的权重都是一样的,哪些较少发生和出现的也是一样的,会带来一些噪声。那么就引入了一个权重函数f,作为损失函数的一部分。
损失函数:
$$J=\sum^Vf\left(X_{ij}\right)\left(w_i^T\tilde{w}_j+b_i+\tilde{b}_j-\log X_{ij}\right)^2$$
权重函数f的要求规则如下:
最后选择的f是:($\alpha=3/4$)
$$\left.f(x)=\left\{\begin{array}{cc}(x/x_{\max})^\alpha&\mathrm{if~}x<x_{\max}\\1&\mathrm{otherwise}\end{array}\right.\right..$$
这里作者对于$\alpha$参数的选择,还是很幽默给出了解释:
Although we offer only empirical motivation for choosing the value 3/4, it is interesting that a similar fractional power scaling was found to give the best performance in (Mikolov et al., 2013a).
文章接下来就开始对比和其他词向量模型的不同与相同,实际就是“吹”自己的优点了,但确实很有条理和逻辑,再一起看看。其实很清晰说出了比word2vec的优化过程在哪里(先不过实际是否优化了,单要先说清楚优化的思路和动机等)
以word2vec的skip等为例,核心计算的概率就是softmax(这里就是naive softmax)
$$Q_{ij}=\frac{\exp(w_i^T\tilde{w}_j)}{\sum_{k=1}^V\exp(w_i^T\tilde{w}_k)} .$$
损失函数的形式也基本是:
$$J=-\sum_{\begin{array}{c}i\in\mathrm{corpus}\\j\in\mathrm{context}(i)\end{array}}\log Q_{ij} .$$
作者也指出,这样的缺点就是归一化的时候(softmax)计算开销太大,作者也说了word2vec对此作出了优化(就是我的上一篇博客hhh)
这里开始,作者说:
However, the sum in Eqn. (11) can be evaluated much more efficiently if we first group together those terms that have the same values for i and j
$$J=-\sum_{i=1}^V\sum_{j=1}^VX_{ij}\log Q_{ij} $$
这里将$X_{i,j}$进行替换,即$P(i,j)=X_{i,j}/X{i}$,重写损失函数
$$J=-\sum_{i=1}^VX_i\sum_{j=1}^VP_{ij}\log Q_{ij}=\sum_{i=1}^VX_iH(P_i,Q_i)$$
这里的H是P和Q两个分布的交叉熵损失。
之后,作者指出了交叉还是那个损失函数的一个缺点:
it has the unfortunate property that distributions with long tails are often modeled poorly with too much weight given to the unlikely events.
即对长尾分布的数据处理的时候表现一般,原因是会过度关注罕见事件,给的权重会过高。
好的,又多了一个名次:长尾分布。
长尾分布(Long Tail Distribution)是一种统计分布,其特征是分布的尾部较长且逐渐变小。这意味着在分布中,有少数事件发生的频率非常高(高频事件),而大多数事件的发生频率非常低(低频事件),但这些低频事件的数量非常多,从而形成一个长尾。
长尾分布在生活中太常见了:
特点:显著特征是它的尾部较长,并且逐渐变小而不是迅速消失。这些低频事件尽管单个发生的概率很小,但由于数量众多,它们在整体分布中的总概率仍然显著
实际例子:
- 只有少数几本书(如《哈利·波特》)售出数百万本,而大多数书籍总销量不到一百本。如果我们绘制所有书籍的总销量条形图,会发现图表呈现出长尾分布。
- b站有少数频道拥有数千万订阅者,但大多数频道的订阅数不到1000。如果绘制所有频道的订阅数条形图,同样会呈现长尾分布。
- 有少数城市拥有千万级别以上居民,而大多数城市人口少于百万。如果绘制所有城市的人口条形图,也会发现长尾分布。
感觉给出的结论:大量小众可能胜过小众热门。
好的我们回到交叉熵损失函数为什么不太擅长处理长尾分布的数据:
罕见事件的概率很小,但其对数值会非常大,导致这些罕见事件对总损失的贡献(也就是权重值)会过大。这导致在优化过程中,模型会花费过多的时间和资源来调整这些罕见事件的预测,从而忽略了那些频繁出现的事件。
解决方案的话,一般有以下三种:
- 加权。为罕见事件和频繁事件设置不同的权重,减少罕见事件对总损失的过大影响。
- 负采样:这样的话减少计算量和罕见事件的影响。
- 换损失函数,如换成最小二乘:直接最小化预测值和真实值之间的平方差,避免了概率归一化和长尾分布的影响。如下:
$$\hat{J}=\sum_{i,j}X_i\left(\hat{P}_{ij}-\hat{Q}_{ij}\right)^2$$
那么问题又来了,最小二乘的计算值比较大,再平方,就更大。那么优化方式也很简单,取个对数就行了。
An effective remedy is to minimize the squared error of the logarithms
$$\begin{aligned}\hat{J}&=\quad\sum_{i,j}X_i\left(\log\hat{P}_{ij}-\log\hat{Q}_{ij}\right)^2\\&=\quad\sum_{i,j}X_i\left(w_i^T\tilde{w}_j-\log X_{ij}\right)^2.\end{aligned}$$
我们发现损失函数中有$X_i$这个貌似是“权重因子”的东西,但其实这个已经提前确定好了,并不是自学习自适应的。
Finally, we observe that while the weighting factor $X_i$ is preordained by the on-line training method inherent to the skip-gram and ivLBL models, it is by no means guaranteed to be optimal.
那么作者又回来了,正好把这个$X_i$替换成glove提出的那个权重函数f
$$\hat{J}=\sum_{i,j}f(X_{ij})\big(w_i^T\tilde{w}_j-\log X_{ij}\big)^2$$
至此,我们将glove的思想仔细过了一遍。虽然文章中说glove在很多数据集和任务上超过了word2vec,但实际应用中,word2vec也不差,用的更多的还是word2vec。
参考
https://www.cnblogs.com/pinard/p/6251584.html
https://zhuanlan.zhihu.com/p/60208480
[1] Pennington J, Socher R, Manning C D. Glove: Global vectors for word representation[C]//Proceedings of the 2014 conference on empirical methods in natural language processing (EMNLP). 2014: 1532-1543.