Global Vectors for Word Representation (GloVe)
GloVe 模型包含一个训练在单词-单词的共同出现次数上的加权的最小二乘模型。
什么是Co-occurrence Matrix
假设单词与单词的 co-occurrence matrix 矩阵用 X 表示,\(X_{i j}\)表示单词 \(j\) 出现在单词 i 的上下文中的次数, \(X_{i}=\sum_{k} X_{i k}\)表示任何一个单词 k 出现在单词 i 的上下文中的次数,
\[ P_{i j}=P\left(w_{j} | w_{i}\right)=\frac{X_{i j}}{X_{i}} \] 就表示单词 j 出现在单词 i 上下文中的概率。所以填充这个矩阵需要遍历一次语料库。Least Squares Objective
在 skip-gram算法中,我们在输出层使用的是 \(softmax\) 函数计算单词 j 出现在单词 i 上下文的概率:
\[ Q_{i j}=\frac{\exp \left(\vec{u}_{j}^{T} \vec{v}_{i}\right)}{\sum_{w=1}^{W} \exp \left(\vec{u}_{w}^{T} \vec{v}_{i}\right)} \] 因此,如果我们将这个用于全局的数据的话,那么交叉熵损失函数就可以这么算:\[ I=-\sum_{i \in \text {corpus}}\sum_{j \in \text { context }(i)} \log Q_{i j} \] 这个公式的本质就是在上一节讲的一句话的skip-gram上上升到对整个文本的处理。如果我们考虑单词上下文大小以及文本大小为 \(W\).那么交叉熵损失函数可以写成:\[ J=-\sum_{i=1}^{W} \sum_{j=1}^{W} X_{i j} \log Q_{i j} \]上面公式面临的一个问题是,在计算整个文本的时候,计算 \(Q\) 的 \(softmax\) 函数,这个计算量太大了。所以下面想办法优化一下:所以我们根本就不使用交叉熵损失函数,而是使用最小二乘法,那么损失函数就是下面这样:
\[ \hat{\jmath}=\sum_{i=1}^{W} \sum_{j=1}^{W} X_{i}\left(\hat{P}_{i j}-\hat{Q}_{i j}\right)^{2} \] 其中 \(\hat{P}_{i j}=X_{i j}\) and \(\hat{Q}_{i j}=\exp \left(\vec{u}_{j}^{T} \vec{v}_{i}\right)\) 是非正态分布的. 这里的 \(X_{i j}\) 等价于 j 出现在 i 的上下文的次数, 而 \(\hat{Q}_{i j}\) 是我们通过 skip-gram 预测的次数,所以是最小二乘法。这样的计算量还是很大,习惯上取个对数,公式就变成下面这样了:\[ \begin{aligned} \hat{J} &=\sum_{i=1}^{W} \sum_{j=1}^{W} X_{i}\left(\log (\hat{P})_{i j}-\log \left(\hat{Q}_{i j}\right)\right)^{2} \\ &=\sum_{i=1}^{W} \sum_{j=1}^{W} X_{i}\left(\vec{u}_{j}^{T} \vec{v}_{i}-\log X_{i j}\right)^{2} \end{aligned} \] 上面的公式中直接使用 \(X_{i}\) 不一定能够达到最优,因此我们选择 \(f\left(X_{i j}\right)\),使用上下文来表示以提高准确率:\[ \hat{\jmath}=\sum_{i=1}^{W} \sum_{j=1}^{W} f\left(X_{i j}\right)\left(\vec{u}_{j}^{T} \vec{v}_{i}-\log X_{i j}\right)^{2} \]Evaluation of Word Vectors
Intrinsic Evaluation
内部评估的思想,在一个较大的系统中,不能直接校准结果,而是对中间的一些结果进行评估:
- 内部评估应用于特殊的一个中间任务
- 可以很快地计算出效果
- 有助于了解内部系统
- 在输出端需要于实际的任务相连用来判断准确率
Intrinsic Evaluation 的例子:
我们使用计算单词语义上的类比性来表示模型的准确率:那么我们可以用下面的式子来求出我们最佳的预测:
\[ d=\underset{i}{\operatorname{argmax}} \frac{\left(x_{b}-x_{a}+x_{c}\right)^{T} x_{i}}{\left\|x_{b}-x_{a}+x_{c}\right\|} \] 可以这样考虑上面的式子,从语义上分析单词的相似性的话,那么我们希望有 \(x_{b}-x_{a}=\) \(x_{d}-x_{c}\) 。所以对于单词 \(x_{c}\) 我们希望得到最优的 \(x_{i}\)。但是这里还要注意一些问题,从训练数据的角度考虑的话就是训练数据的语义之间的相似性决定了预测数据的相似性,另一方面,我们往往会对原始的训练数据进行 PCA降维,降维在这里可以提取出原训练数据最相关的特征,但是也会损失一些训练数据的信息。从 Intrinsic Evaluation 看影响模型的因素
主要是三个方面:
- 使用的模型的种类
- 数据集越大表现越好
- 单词向量的维度,维度太小,结果不好,太好会引入噪声
Training for Extrinsic Tasks
Retraining Word Vectors
一般情况下,我们使用内部的小任务优化单词向量,然后将单词向量用于整个任务。这是预训练的好处,但是在我们训练好模型之后,如果再继续加入数据的话,数据量不大的情况下不可以重新训练,而是保持原来的训练模型。
Softmax Classification and Regularization
我们使用 \(softmax\) 分类的时候,往往希望的是预测出数据对应的一种类别,这是 \(softmax\) 函数于交叉熵损失函数可以写成
\[ p\left(y_{j}=1 | x\right)=\frac{\exp \left(W_{j} \cdot x\right)}{\sum_{c=1}^{C} \exp \left(W_{c} \cdot x\right)} \]\[ -\sum_{j=1}^{C} y_{j} \log \left(p\left(y_{j}=1 | x\right)\right)=-\sum_{j=1}^{C} y_{j} \log \left(\frac{\exp \left(W_{j} \cdot x\right)}{\sum_{c=1}^{C} \exp \left(W_{c} \cdot x\right)}\right) \]
交叉熵损失函数就是目标函数取反得到的。上面情况的,假设我们预测的数据只能处于一种类别,那么如果可以处于多种类别该怎么计算呢?我们假设 K 种类别都是正确的,那么可以写成这样:
\[ -\sum_{i=1}^{N} \log \left(\frac{\exp \left(W_{k(i)} \cdot x^{(i)}\right)}{\sum_{c=1}^{C} \exp \left(W_{c} \cdot x^{(i)}\right)}\right) \] 也就是 \(k(i)\) 是 \(x^{(i)}\) 对应的不同类别。引入正则化
上面的方法是可以的,但是参数太多了,容易过拟合,参数主要是:
\[ \nabla_{\theta} J(\theta)=\left[ \begin{array}{c}{\nabla w_{.1}} \\ {\vdots} \\ {\nabla_{W_{\cdot d}}} \\ {\nabla_{x_{\text {aardvark}}}} \\ {\vdots} \\ {\nabla_{x_{z e b r a}}}\end{array}\right] \] 正则化的思想就是,过拟合的原因就是参数太多了,那么我们在最小化损失函数的时候引入参数,同时最小化参数,就可以避免完全只考虑最小化损失函数,而不考虑参数,\[ -\sum_{i=1}^{N} \log \left(\frac{\exp \left(W_{k(i)}, x^{(i)}\right)}{\sum_{c=1}^{C} \exp \left(W_{c} \cdot x^{(i)}\right)}\right)+\lambda \sum_{k=1}^{C \cdot d+|V| \cdot d} \theta_{k}^{2} \]