CS224n 深度自然语言处理(一) - Language Model and Word2Vec

单词的含义

如何定义一个单词的意思?通过韦伯字典对于单词”meaning"的解释来看,有如下几点

  1. 单词或者短语呈现的意思。
  2. 人想要通过短语、符号表达的实际含义。
  3. 文章、艺术作品呈现的想法。

故最普通对meaning的理解,其实是表示符号(symbol)向想法(idea)的转换。

如何在计算机中计算语义。可以使用,wordnet,一个包含同义词集合和词间关系的词库。

CS224n 深度自然语言处理(一) - Language Model and Word2Vec

但是WordNet仍有缺点,如下

  1. 缺少语境信息。如"proficient"被列为"good"的同义词,但这其实只在特定语境情况下满足。
  2. 缺少新派生的单词,不可能一直保持更新。
  3. 有一定偏见性。
  4. 需要人来进行适配。
  5. 不能精确的计算词语的相似性。

在传统的NLP中,我们把单词看作为离散的变量,如hotel, conference, motel这三个词使用one-hot(独热)均做局部表示,

CS224n 深度自然语言处理(一) - Language Model and Word2Vec

但是这种表示方法,有很大的缺点,对于任意两个单词,他们之间是正交的,即没有办法计算任意两个单词之间的相似度。

分布式语义表示

一个单词的语义由其经常出现的周围的单词表示。对与一个单词w,他的上下文是固定大小的窗口附近的单词,并且使用这个窗口内的单词来表示中心词w.

CS224n 深度自然语言处理(一) - Language Model and Word2Vec

之后,我们将会为每一个单词构建一个稠密向量,以便出现在相似上下文中的单词向量也相似。通常这个word vector被叫做word embedding(单词嵌入)或者word representations(单词表示)。他们都是分布式表示。

Word2vec

Word2vec的基本思想

Word2vec是一个学习单词向量的框架,其基本思想如下:

  1. 已经拥有包含大量文本的语料库。
  2. 在固定单词表中的每一个单词都将被表示为向量形式。
  3. 遍历文本的每一个位置tt,每遍历一个位置,将其分为中心词cc和上下文词oo。(使用滑动窗口,滑动窗口中心为中心词,其余词作为上下文词)
  4. 使用中心词cc和上下文词oo的词向量相似度来计算已知cc出现oo的概率,即P(oc)P(o|c)(反过来也可以)。
  5. 随着遍历位置的变化,不断调整词向量,使得条件概率最大化。

CS224n 深度自然语言处理(一) - Language Model and Word2Vec
CS224n 深度自然语言处理(一) - Language Model and Word2Vec

Word2vec的目标函数

对于一个位置t=1...Tt=1...T,使用长度固定为mm的滑动窗口,在已知中心词的情况下预测上下文wjw_j
Likelihood=L(θ)=t=1Tmjm,j0P(wt+jwt;θ) Likelihood=L(\theta)=\prod_{t=1}^{T}\prod_{-m\le j \le m, j\ne 0} P(w_{t+j}|w_t;\theta)
其中θ\theta是所有待优化变量。上式即,对于每一个中心词wtw_t,求出对每一个上下文词wt+jw_{t+j}的条件概率,做乘积做似然函数。由于连乘积很容易太小,这样导致求解不易,通常取loglog处理;另外一般对目标函数求最小,故求负;最后对TT求平均,即将损失均摊到每一个位置上,可得:
J(θ)=1TlogL(θ)=1Tt=1Tmjm,j0logP(wt+jwt;θ) J(\theta)=-\frac{1}{T}logL(\theta) = -\frac{1}{T}\sum_{t=1}^T\sum_{-m\le j \le m, j \ne 0} logP(w_{t+j}|w_t;\theta)

那么问题转换成,如何求解P(wt+jwt;θ)P(w_{t+j}|w_t;\theta)

对于每个单词ww,令vwv_w表示一个中心词的向量表示,uwu_w表示一个上下文词的向量表示。那么对于一个中心词cc和一个滑动窗口内的上下文单词oo
P(oc)=exp(uoTvc)wVexp(uwTvc) P(o|c) = \frac{exp(u_o^Tv_c)}{\sum_{w\in V} exp(u_w^Tv_c)}
其中VV表示语料库中所有的词;向量的点积用于衡量向量间的相似度(物理含义为向量投影);expexp函数作为映射函数,将实数范围映射为正数,同时保证映射的大小关系;最后分母做归一化。

更准确说,这种求出概率的方式称为softmax\text{softmax},其把任意值xix_i映射为概率分布pip_i,一般写作:
softmax(xi)=exp(xi)j=1nexp(xj)=pi \text{softmax}(x_i) = \frac{exp(x_i)}{\sum_{j=1}^{n}exp(x_j)} = p_i
称为softmax\text{softmax}的原因为,其保证了最大的xmaxx_{max}仍然最大且放大了其概率值;同时减小了其他值的概率值。

Word2vec的训练

我们使用梯度下降方法调整参数,使得目标函数不断下降到最小。θ\theta表示所有的模型参数,dd表示每个单词的向量维度长度,是一个超参数,在训练前手动指定。每个单词有两个向量,因为有一个作为uu,一个作为vv(一个作为中心词的表示,一个作为上下文单词的表示)。

通过计算概率公式,也就是上面的P(oc)P(o|c)可以得出在已知中心词的情况下,各个词(语料库中所有词)作为上下文单词的概率,但是我们窗口大小是mm(包括中心词在内),即找到最大的m1m-1的概率所对应的词向量,与输入已知的ground truth(也就是上下文单词对应的uu)做交叉熵,作为单次迭代的损失,反向传播训练。

最后得到的各个单词的单词向量uu,即为每个单词的embeddingembedding

Word2vec的形式

Word2vec有两种形式,一种是输入中心词,预测周围上下文词,称为Skip-gram。另外一种是输入上下文词,预测中心词,称为Continue Bag Of Word(CBOW)。两种方法的核心思想是如出一辙的。