Lecture 1

1 单词的含义表示

1.1 单词的数据库 - WordNet

待解决问题:如何表示单词的含义

描述:WordNet® is a large lexical database of English. Nouns, verbs, adjectives and adverbs are grouped into sets of cognitive synonyms (synsets), each expressing a distinct concept.

优点:

  1. 词性标注
  2. 同义归类
  3. 词间关系

缺点:

  1. 缺少语境
  2. 缺少新的词汇和已有词汇的新含义
  3. 依赖人工标注
  4. 无法计算单词相似度(无法向量化)

1.2 单词的稀疏向量表示 - One-hot Vector

待解决问题:如何表示单词的含义

描述:在传统NLP中,我们将不同的单词视为独立的个体。我们可以用 one-hot 编码的形式去表示他们,如下所示。向量的维度将会是词汇量的大小。

motel = [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]
hotel = [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]

缺点:

  1. one-hot 编码的向量都是正交的,无法计算相似度。

1.3 单词的稠密向量表示 - Word Vector

待解决问题:如何表示单词的含义-如何计算单词相似度

分布式语义:假设一个单词的含义取决于其高频出现的上下文。

描述:通过多个含有单词 w 的上下文建立起单词 w 的表示。这个表示是一个稠密向量,可被称为词表示或者词嵌入,这是一种分布式表示。

优点:

  1. 在这种分布式语义中,所得到的稠密向量可以用于计算单词相似度,即在向量空间上同义词距离近,反义词距离远。

1.4 Word Vector 的具体实现 - word2vec

待解决问题:如何表示单词的含义-如何计算单词相似度

描述:

  1. 根据 word vector 的思想,我们将基于上下文用稠密向量表示一个单词,这样可以在表示单词含义的同时保留单词之间的相关性信息。
  2. 对于我们的语料库中任意位置的单词 c(center),有上下文单词集合 o(outside)。
  3. 用单词 c 以及上下文单词集合 o 中的单词的 word vector 的相似度去计算 p(c | o) 以及 p(o | c)。同一单词,对于出现在上下文中的该单词以及出现在 center 位的该单词,我们用两个向量 *1 分别表示。
  4. 调整各单词的词向量使概率最大。

*1 可以使用单个向量表示,但对于同一单词同时出现在 center 和上下文,会出现 $ x^{T}x $ 的情况,会增加梯度下降难度。

损失函数:
$$
\begin{equation}
J(\theta)=-\frac{1}{T} \sum_{t=1}^{T} \sum_{-m \leq j \leq m \atop j \neq 0} \log P\left(w_{t+j} \mid w_{t} ; \theta\right)
\end{equation}
$$
损失函数会计算每一个位置 t 周围的 2m 个单词出现的概率。损失函数越小,概率越大。

条件概率:
$$
\begin{equation}
P(o \mid c)=\frac{\exp \left(u_{o}^{T} v_{c}\right)}{\sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)}
\end{equation}
$$

条件概率的计算中,对上下文单词和中心单词词向量的点乘做了softmax正则化,即对于同一个中心单词,上下文单词词向量与中心单词词向量的点乘结果越大,其条件概率占整个上下文单词概率空间的比重越多。

优点:

  1. 模型可以继承 1.3 单词的稠密向量表示 - Word Vector 的思路进行自我迭代。
  2. 迭代后得到的词向量能够计算单词相似度,且单词之间一定程度上具有自然语言的逻辑叠加性质,即经典示例 $ V_{king} - V_{man} + V_{woman} = V_{queen} $

Lecture 2

1 单词的含义表示

1.5 word2vec 的两种形式 - Skip-grams 和 Continuous Bag of Words

待解决问题:如何表示单词的含义-如何计算单词相似度

word2vec 的两种形式:

  1. Skip-grams:给出中心单词预测上下文单词。(常见)
  2. CBoW:给出上下文预测中心单词。

1.6 word2vec 的高效实现 - Negative Sampling

待解决问题:如何表示单词的含义-如何计算单词相似度-如何提高 word2vec 损失函数计算效率

描述:

1.4 Word Vector 的具体实现 - word2vec 中给出的条件概率计算方式在单词维度很大的时候,计算开销极大。在实际操作中使用随机负采样单词和中心单词配对,提升上下文单词词向量与中心单词词向量的点乘大小,降低随机采样单词与中心单词的点乘大小。

损失函数:
$$
J(\theta)=\frac{1}{T} \sum_{t=1}^{T} J_{t}(\theta)
$$
其中,
$$
J_{t}(\theta)=-\log \sigma(u_{o}^{T} v_{c})-\sum_{i=1}^{k} E_{j \sim P(w)}[\log \sigma(-u_{j}^{T} v_{c})]
$$

$$
\sigma(x)=\frac{1}{1+e^{-x}}
$$

损失函数的第一部分,上下文单词词向量与中心单词词向量点乘越大,损失函数越小。损失函数第二部分,随机负采样的k个单词的词向量与中心单词词向量点乘越小损失函数越小。

优点:

  1. 相比原先的softmax需要在每次条件概率中计算整个单词表,负采样后的损失函数只需要计算上下文单词和经过随机负采样选出的单词,计算开销大幅下降。

1.7 Word Vector 的简单实现 - 共现矩阵

待解决问题:如何表示单词的含义-如何计算单词相似度

描述:

通过单词间相邻次数(出现在对方相邻 n 个单词中的次数)构建整个词汇表中单词间的共现矩阵,并用矩阵的 行向量/列向量 表示该单词。

示例(语料库):

  1. I like deep learning.
  2. I like NLP.
  3. I enjoy flying.
出现次数 I like enjoy deep learning NLP flying .
I 0 2 1 0 0 0 0 0
like 2 0 0 1 0 1 0 0
enjoy 1 0 0 0 0 0 1 0
deep 0 1 0 0 1 0 0 0
learning 0 0 0 1 0 0 0 1
NLP 0 1 0 0 0 0 0 1
flying 0 0 1 0 0 0 0 1
. 0 0 0 0 1 1 1 0

各单词对应词向量:

单词 向量
I [0, 2, 1, 0, 0, 0, 0, 0]
like [2, 0, 0, 1, 0, 1, 0, 0]
enjoy [1, 0, 0, 0, 0, 0, 1, 0]
deep [0, 1, 0, 0, 1, 0, 0, 0]
learning [0, 0, 0, 1, 0, 0, 0, 1]
NLP [0, 1, 0, 0, 0, 0, 0, 1]
flying [0, 0, 1, 0, 0, 0, 0, 1]
. [0, 0, 0, 0, 1, 1, 1, 0]

最终,根据上下文单词出现的频率,相似的单词(词法/含义 相似)会具有高相似度的词向量。

优点:

  1. 实现逻辑简单,不需要训练。

缺点:

  1. 空间占用高,随着词汇量增大而增大。(解决方法:数学降维方法 / 预处理词库)

1.8 GloVe - 共现矩阵和word2vec的结合

待解决问题:如何表示单词的含义-如何计算单词相似度-如何建立一个时空高效且效果好的模型

现有模型优缺点:

共现矩阵 word2vec
特点 基于单词出现次数 基于概率预测
优点 基于统计学,无需训练,时间高效 能够捕捉单词相似度之外的复杂特征
能在 downstream 任务中获得更好的效果
缺点 仅可用于捕捉单词相似度 随着语料库的增加,训练过程耗时加长,效率降低
对高频词汇分配了过多的权重

GloVe核心思想:

  1. 通过共现概率之比编码一些有用信息
  2. 用词向量点乘拟合共现概率
$ x = $ $ solid $ $ gas $ $ water $ $ random $
$ \begin{equation}P(x|ice)\end{equation} $
$ P(x|steam) $
$ \frac{P(x|ice)}{P(x|steam)} $ ~1 ~1
  • | 可用于转义 |

共现概率之比可以编码一些成分信息(类比),如 $ V_{king} - V_{man} + V_{woman} = V_{queen} $

为了在训练中使得向量具有这种可叠加的特点,我们让词向量点乘拟合共现概率。
$$
w_{i} \cdot w_{j}=\log P(i \mid j) \tag{1}
$$

$$
w_{x} \cdot\left(w_{a}-w_{b}\right)=\log \frac{P(x \mid a)}{P(x \mid b)}\tag{2}
$$

通过 公式1 对于共现概率的拟合,词向量将拥有 公式2 的可叠加性,并将共现概率之比的信息保留在词向量中。

损失函数:
$$
J=\sum_{i, j=1}^{V} f(X_{i j})(w_{i}^{T} w_{j}+b_{i}+b_{j}-\log X_{i j})^{2}
$$

$ f(x) $ 是一个权重函数:
$$
\begin{equation}
f(x) =
\begin{cases}
(x / x_{\max })^{\alpha} & \text { if } x<x_{\max }
\newline 1 & \text { otherwise }
\end{cases}
\end{equation}
$$
其中,$ x_{\max } $ 是共现次数的最大值,$ \alpha $ 的典型值为 $ \frac{3}{4} $ 。我们希望给予高频共现单词对更高的权重,但不像 1.7 Word Vector 的简单实现 - 共现矩阵 中高频共现词汇对那样过高的权重。

1.9 如何评价 Word Vector 的好坏?

  1. Intrinsic Evaluation:基于直接的词汇对,如 比较级 / 过去式

  2. Extrinsic Evaluation:基于真实的任务场景,如 命名实体识别


喵喵喵?