博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CS224n学习笔记(二)
阅读量:4920 次
发布时间:2019-06-11

本文共 3800 字,大约阅读时间需要 12 分钟。

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} \]

转载于:https://www.cnblogs.com/wevolf/p/10800709.html

你可能感兴趣的文章
命令行解析函数
查看>>
iterm2快捷键启动
查看>>
LeetCode Reverse Nodes in k-Group
查看>>
Todo list and 学习心得
查看>>
html笔记1
查看>>
uva10487-最接近的和
查看>>
FPGA--I2C串行通信总线
查看>>
服务器老是出现502 Bad Gateway?
查看>>
博客系统-点赞取消
查看>>
sql 优化(转)
查看>>
Oracle 迁移 序列
查看>>
弹窗组价
查看>>
小程序の填坑指北
查看>>
AutoMutex
查看>>
13 -1 BOM和定时器
查看>>
uuid.go
查看>>
c#中怎么删除一个非空目录
查看>>
selenium java-2 chrome driver与对应版本
查看>>
javascript的私有机制
查看>>
arguments对象疑惑
查看>>