CS224N Natural Language Processing with Deep Learning Lecture 1
课程主页:https://web.stanford.edu/class/archive/cs/cs224n/cs224n.1194/
视频地址:https://www.bilibili.com/video/av46216519?from=search&seid=13229282510647565239
这里回顾CS224N Lecture 1的课程内容,这一讲简单介绍了Word2vec,CBOW以及Skip-Gram Model。
如何表示单词
one-hot
最直接的方式是使用one-hot向量,即除了一个位置为$1$,其余位置为$0$的向量,但这个方式有个明显的问题,无法表示单词的相似性,因为任意两个不同的one-hot向量正交,例如
motel和hotel意思相近,但是该表示无法体现这点。
Co-occurrence Matrix
该方法的思想很简单,给定一个单词,统计在某个句子中其前$m$个以及后$m$个单词出现的数量。
考虑如下例子,取$m=1$:
- I enjoy flying.
- I like NLP.
- I like deep learning.
那么Co-occurrence Matrix为:
显然该矩阵非常大,所以使用起来不太方便。
Applying SVD to the cooccurrence matrix
为了处理之前提到的问题,可以使用SVD对该矩阵进行降维。
假设该矩阵为$X$,那么首先进行SVD:
然后通过选择前$k$个奇异向量进行降维:
但是这个方法依旧不太好,因为进行SVD的运算复杂度很高。
如今的语言模型基本都基于一个假设:一个单词的含义由经常出现在附近的单词给出,后面将介绍两种经典方法,分别为CBOW,Skip-Gram Model;CBOW基于上下文预测缺失的单词,Skip-Gram Model则是反过来,基于一个单词预测其上下文。
Continuous Bag of Words Model (CBOW)
CBOW模型:
根据上下文预测中心词。对于每个单词,我们要学习2个向量
- $v$ :输入向量,即单词在上下文中的表示
- $u$:输出向量
CBOW模型的记号:
- $w_i$:词典$V$的第$i$个单词
- $\mathcal{V} \in \mathbb{R}^{n \times | V|}$:输入单词矩阵
- $v_i$:$\mathcal V$的第$i$列,单词$w_i$的输入向量表示
- $\mathcal U \in \mathbb{R}^{|V| \times n}$,输出单词矩阵
- $u_i$:$\mathcal U$的第$i$行,单词$w_i$的输出向量表示
整个模型如下:
- 生成窗口大小为$m$的one-hot输入内容向量:$\left(x^{(c-m)}, \ldots, x^{(c-1)}, x^{(c+1)}, \ldots, x^{(c+m)} \in \mathbb{R}^{|V|}\right)$
- 得到输入内容的词嵌入:
- 对上述向量取平均得到$\hat{v}=\frac{v_{c-m}+v_{c-m+1}+\ldots+v_{c+m}}{2 m} \in \mathbb{R}^{n}$
- 生成得分向量$z=\mathcal{U} \hat{v} \in \mathbb{R}^{|V|}$
- 转换为概率$\hat{y}=\operatorname{softmax}(z) \in \mathbb{R}^{|V|}$
- 使上述概率和真实概率$y$比较接近(利用某种度量)
最后一点提到的度量为交叉熵损失函数,即
注意$y$也为one-hot形式,不妨设第$i$个下标为$1$,那么上述损失函数即为
即我们要最小化
使用梯度下降的方法可以对上述损失函数进行优化。
网络结构如下:
Skip-Gram Model
Skip-Gram模型:
根据中心词预测上下文。
Skip-Gram模型的记号:
- $w_i$:词典$V$的第$i$个单词
- $\mathcal{V} \in \mathbb{R}^{n \times | V|}$:输入单词矩阵
- $v_i$:$\mathcal V$的第$i$列,单词$w_i$的输入向量表示
- $\mathcal U \in \mathbb{R}^{n \times |V|}$,输出单词矩阵
- $u_i$:$\mathcal U$的第$i$行,单词$w_i$的输出向量表示
整个模型如下:
- 生成中心单词的one-hot向量$x \in \mathbb{R}^{|V|}$
- 得到中心单词的词嵌入:$ v_{c}=\mathcal{V} x \in \mathbb{R}^{n}$
- 生成得分向量$z=\mathcal{U}^T {v_c} \in \mathbb{R}^{|V|}$
- 转换为概率$\hat{y}=\operatorname{softmax}(z) \in \mathbb{R}^{|V|}$,注意到$\hat{y}_{c-m}, \ldots, \hat{y}_{c-1}, \hat{y}_{c+1}, \ldots, \hat{y}_{c+m}$为观测到每个上下文单词的概率。
- 我们希望我们生成的概率和真实概率$y^{(c-m)}, \ldots, y^{(c-1)}, y^{(c+1)}, \ldots, y^{(c+m)}$(one-hot形式)比较接近(利用某种度量)
下面使用了朴素贝叶斯假设(条件独立):
负采样
考虑单词和内容$(w,c)$,我们用$P(D=1 | w, c)$表示$(w,c)$属于训练语料数据的概率(所以$P(D=0 | w, c)$表示$(w,c)$不属于训练语料数据的概率),并且假设
那么,我们希望
注意到上式等价于最小化
其中$\tilde D$为“负”语料数据。
利用上述思想,在CBOW模型中,给定$\hat v=\frac{v_{c-m}+v_{c-m+1}+\ldots+v_{c+m}}{2 m}$,观测到$u_v$对应目标函数为
注意原始的形式为
同样的,在skip-gram模型中,观测到上下文单词$c-m+j$对应的目标函数为
原始的形式为
补充:在上述讨论中,$\left\{\tilde{u}_{k} | k=1 \ldots K\right\}$从分布$P_{n}(w)$中采样,这里均使用$P_{n}(w)$为一元模型的$3/4$次方。在一元模型中,我们假设
所以每个单词在一元模型中的概率为其出现的频率。
分层Softmax
分层Softmax用二叉树表示词典中的所有单词,每个叶节点是一个单词,从根节点到叶节点有唯一的路径,所以我们用该路径表示单词,我们要学习的是该二叉树的结构。给定向量$w_i$,单词$w$的概率$P(w|w_i)$为从根节点出发,到达$w$对应的叶节点的概率。记$L(w)$为从根节点到达叶节点$w$的路径的节点数量(不包括$w$),$n(w,i)$为路径上第$i$个节点,$v_{n(w,i)}$为对应的向量。随机选择内部节点$n$的孩子节点,记为$ch(n)$。那么
其中
$\sigma(.)$为sigmoid函数。
Word2vec
Word2vec依然是使用上下文的思想,考虑下图:
类似之前的讨论,似然函数为
我们的目标函数为
同之前讨论类似,我们假设$P\left(w_{t+j} | w_{t} ; \theta\right)$为softmax函数,即
对$\log P(o|c)$关于$v_c$求梯度可得
根据上式可以利用梯度下降进行计算。