Sequence Models(2): NLP & Word Embedding

Sequence Models的第二部分,主要讲了 自然语言处理词嵌入 (Word Embedding) 的内容(其实只讲了Word Embedding)。

因为 最近有个面试 我在忙着进行 虽然可能并没有什么用但是准备这个行为本身能令人心安所以在努力进行所谓的 面试前的准备,所以这部分内容就只是简单地描述一下。

1. Word Representation

对词进行向量表示,也就是对每个单词进行特征提取。词的每一个维度可以看做是 一个不好直接解释的特征

什么叫 好解释 的特征呢,比如说,我手动定义了两个维度:性别,高贵。现在有两个词 ‘皇后’ 与 ‘农妇’,那么很显然能推理出:一个好的词向量表示,两者在 性别 特征上的取值一定是相似的,但是在 高贵 特征上的取值前者会大于后者。
比如 皇后 这个词的向量表示为$h_1 = (0.98, 0.98)$,那么 农妇 的词向量更有可能是类似$h_2=(0.95, 0.02)$之类的情况。每个词的第一个维度表示这个单词在性别上的取值(具体地:男性取-1,女性取1,中性或物品取0),而第二个维度表示这个单词高贵的程度。
而词向量的表示因为是根据算法 自行学习 出来的,所以在每一个维度上的特征并没有上面的🌰这么好解释,有时候单词A在第n个维度取值是$a$,而单词B在第n个维度取值是$b$,我们只能从两者的相对距离来判断这两个单词在这个维度上的相似性,而无法通过一个类似 性别 或者 高贵 的词来解释它。

一个好的词向量还有一个特征,就是可以进行归纳推理。简单来说,假设我们有词向量$v_{\mathrm{man}},v_{\mathrm{woman}},v_{\mathrm{king}},v_{\mathrm{queen}}$,有以下公式成立:

但是,正是由于词向量是算法根据语料自行学习出来的,导致了词向量会出现偏见(prejudice),比如说:

这里把女性类比为一个homemaker,显然是带有歧视与偏见的,但是这个词向量是自行学习的,怎么手动进行纠正呢?这是NLP中一个有意思的领域,叫 除偏(Debiasing)

2. Learning Word Embedding

学习词向量表示的算法被称为 word2vec ,顾名思义就是把word变成vector的形式,其核心就是使用一个滑动窗口,每次读取一个固定长度序列中的字符串片段,进行统计学习后使用softmax进行归一,比较经典word2vec算法的有以下几种:

  • skip-gram:窗口内随机选择单词作为(context, target)对,使用交叉熵作为损失函数进行softmax训练。
  • CBOW(Continuous Bag-of-Words):输入是某一个特征词的上下文相关词所对应的词向量,而输出是当前词对应的词向量,同样输出到所有词的softmax概率。
  • GloVe:考虑了基于统计的词向量模型能够充分利用全局信息,但对词汇之间的信息关系把握不充分,而基于神经网络的模型对无法充分利用全局统计信息而考虑的。

3. Softmax 训练开销很大

  1. 使用分层softmax,类似于一个决策树;
  2. 使用负采样来降低每次计算全局数据的开销。

4. Sentiment Classification

情感分析。给定评论(文字),映射到一个五分类输出,表示对某个餐厅/服务的评价星级。

使用预训练的大语料上的embedding matrix $E$。

  1. 对所有word的embedding结果进行sum(+avg),使用softmax映射到五分类。问题:没有考虑order与语义依赖。(lacking in good taste, good service, good…。好多good!)
  2. 放入RNN单元,转换成 第一讲 中的 many-to-one问题。

5. Debiasing

上面Q1中消除偏见稍微具体的描述。具体有以下三个步骤:

  1. Identify Bias Direction
  2. Neutralize
  3. Equalize