这篇文章是我的笔记分享,内容主要来自吴恩达老师的深度学习课程

1 Featurized representation: word embedding

1.1 从one-hot说起

$$ \begin{array}{cccccc} &\text { Man } & \text { Woman } & \text { King } & \text { Queen } & \text { Apple } & \text { Oran } \ &(5391) & (9853) & (4914) & (7157) & (456) & \left(6257\right) \ & \left[\begin{array}{c} 0 \0 \0 \0 \\vdots \1 \ \vdots \0 \ 0 \end{array}\right] & \left[\begin{array}{c} 0 \0 \0 \0 \0 \ \vdots \1 \ \vdots \0 \end{array}\right] & {\left[\begin{array}{c} 0 \0 \0 \ \vdots \1 \ \vdots \0 \0 \0 \end{array}\right]}
& {\left[\begin{array}{c} 0 \0 \0 \0 \0 \ \vdots \ 1 \ \vdots \0 \end{array}\right]} & {\left[\begin{array}{c} 0 \ \vdots \1 \ \vdots \0 \0 \0 \0 \0 \end{array}\right]} & \left[\begin{array}{c} 0 \0 \0 \0 \ \vdots \1 \ \vdots \0 \0 \end{array}\right] \end{array} $$

之前简单的文本预处理都是使用one-hot向量来表示词汇表,简单来说就是将文本制作成一个词汇表。我们之前说的是假设那个词汇表的长度为1万,也就是说我们将会有1万个one-hot向量。每一个向量的长度是1万。将每个单词所在的位置标注为1,其余都为0。

但是使用one-hot向量存在一个问题就是说它的模型泛化能力会很差。举个例子:

I want a glass of orange ______ .

I want a glass of apple______ .

常人眼里如果你第一个空里边填上“juice”,那很便宜的,你第二个空也可以填“juice”。

但是如果你使用one-hot向量,模型不知道orange和apple是类似的东西。所以它并不能轻易的把apple后边也填上juice。

这就用到了word embedding,对特征进行表征。

1.2 词汇表征

简单来说就是提取词汇的一些特征对其进行打分。然后使用这些特征来表示某个词汇。比如我们上边用外号的项链表示的Man、Woman、King、Queen、Apple、Orange就可以转化为下边这个样子:

$$ \begin{array}{c|cccccc} & \begin{array}{c} \text { Man } \ (5391) \end{array} & \begin{array}{c} \text { Woman } \ (9853) \end{array} & \begin{array}{c} \text { King } \ (4914) \end{array} & \begin{array}{c} \text { Queen } \ (7157) \end{array} & \begin{array}{c} \text { Apple } \ (456) \end{array} & \begin{array}{c} \text { Orange } \ (6257) \end{array} \ \hline \text { Gender } & -1 & 1 & -0.95 & 0.97 & 0.00 & 0.01 \ \text { Royal } & 0.01 & 0.02 & 0.93 & 0.95 & -0.01 & 0.00 \ \text { Age } & 0.03 & 0.02 & 0.7 & 0.69 & 0.03 & -0.02 \ \text { Food } & 0.04 & 0.01 & 0.02 & 0.01 & 0.95 & 0.97\ \text { ... } & ... & ... & ... & ... & ... & ... \end{array} $$

在这里呢我们对每一个词汇进行word embedding,假设我们提取了300个特征,但是在上面的表格里我们只展示前4个。

还是以man为例。这里我们可以看到它和woman对比。他们俩的性别属性分别是-1和1。至于权力这一栏的打分只有0.01。对比king和queen来说更接近于0。毕竟man和woman两个单词来看是看不出来他们的权利的。自然这两个单词也看不出来年龄和食物等特征。所以打分都很接近于0。

经过word embedding处理之后,我们可以将其转化为word embedding的向量。man就从$O_{5391}$变为$e_{5391}$。

1.3 可视化

下面这张图呢就是word embedding的可视化。

挑选了几个单词,因为我们是提取了300个特征,所以我们将一个三维的空间映射到二维空间上,进行一个非线性的映射。最后将它们显示到这个图片上。我们可以清楚的看到意思相近的词它们分布的位置更接近。 image.png

2 如何使用word embedding

2.1 举个栗子

假设你现在使用“Sally Johnson is an orange farmer”这个句子进行命名实体识别(Named Entity recognition),对其中的人名进行识别。

image.png

可以看到正确的输出结果应该是在Sally Johnson那个位置输出的都是1,其余的部分输出都是0。因为可以识别出能橘子果农主语是人名。

轻易地,如果你换一个句子:“Robert Lin is an apple farmer”。

你的模型因为知道“orange”和“apple”之间是类似的词,所以可以很轻易的推测出“Robert Lin”也是人名。

假设你现在在测试集里遇到了一个不太常见的词“durian cultivator” 榴莲培育者。

“Robert Lin is an durian cultivator.”

甚至可能你的训练集里都没有出现这两个词。

如果你已经有一个学好的word embedding,那它就可以告诉你的模型,这个榴莲和苹果是差不多的东西,这个培育者和农民是差不多的东西。那你的模型依旧可以轻松地识别出Robert Lin可能是人名。

通过大量的无标签文本学习出来的word embedding,可以让你使用迁移学习来应用到你的只有少量标签的数据集中。

2.2 Transfer learning and word embeddings

  1. Learn word embeddings from large text corpus. (1-100B words) (Or download pre-trained embedding online.)
  2. Transfer embedding to new task with smaller training set. (say, 100k words)
  3. Optional: Continue to finetune the word embeddings with new data.

实际应用中分为三个步骤,word embedding、迁移、微调。有的甚至都不用微调。

word embedding 的特性

word embedding有一个有趣的特性,就是它能够帮助实现类比推理。

举个栗子

在这里我们依旧使用上一节用到的这个例子表格:

$$ \begin{array}{c|cccccc} & \begin{array}{c} \text { Man } \ (5391) \end{array} & \begin{array}{c} \text { Woman } \ (9853) \end{array} & \begin{array}{c} \text { King } \ (4914) \end{array} & \begin{array}{c} \text { Queen } \ (7157) \end{array} & \begin{array}{c} \text { Apple } \ (456) \end{array} & \begin{array}{c} \text { Orange } \ (6257) \end{array} \ \hline \text { Gender } & -1 & 1 & -0.95 & 0.97 & 0.00 & 0.01 \ \text { Royal } & 0.01 & 0.02 & 0.93 & 0.95 & -0.01 & 0.00 \ \text { Age } & 0.03 & 0.02 & 0.7 & 0.69 & 0.03 & -0.02 \ \text { Food } & 0.04 & 0.01 & 0.02 & 0.01 & 0.95 & 0.97\ \text { ... } & ... & ... & ... & ... & ... & ... \end{array} $$

  • 现在我们提出一个问题:

    man对应于woman。那么king应该对应于什么?

  • 讲道理我们应该知道答案:

    Queen

使用word embedding就可以实现自动的推理。

上一节我们说的是提取了300个特征,在这里我们依旧只用前4个特征。

  • Man: $$ e_{5391} = \left[\begin{array}{c}-1\0.01\0.03\0.09 \end{array}\right] $$
  • Woman: $$ e_{9853} = \left[\begin{array}{c}1\0.02\0.02\0.01 \end{array}\right] $$
  • King: $$ e_{4914}= \left[\begin{array}{c}-0.95\0.93\0.70\0.02 \end{array}\right] $$
  • Queen: $$ e_{7157}= \left[\begin{array}{c}0.97\0.95\0.69\0.01 \end{array}\right] $$ 现在对其做减法我们可以发现一个有趣的事情:

$$ e_{man}-e_{woman} = e_{5391}-e_{9853} = \left[\begin{array}{c}-1\0.01\0.03\0.09 \end{array}\right] - \left[\begin{array}{c}1\0.02\0.02\0.01 \end{array}\right] \approx \left[\begin{array}{c} -2 \0\0\0 \end{array}\right] $$

同样: $$ e_{king}-e_{queen} = e_{4914}-e_{7157} = \left[\begin{array}{c}-0.95\0.93\0.70\0.02 \end{array}\right] -\left[\begin{array}{c}0.97\0.95\0.69\0.01 \end{array}\right] \approx \left[\begin{array}{c} -2 \0\0\0 \end{array}\right] $$

此外: $$ e_{apple}-e_{orange} = e_{456}-e_{6257} = \left[\begin{array}{c}0.00\-0.01\0.03\0.95 \end{array}\right] -\left[\begin{array}{c}0.01\0.00\-0.02\0.97 \end{array}\right] \approx \left[\begin{array}{c} 0 \0\0\0 \end{array}\right] $$

从上面这个三个式子中我们可以得出man 和woman的主要区别在性(gender)这一项上。King和queen的区别也主要是在性别这一项上。在这4个特征上都没有什么区别。因为他们无所谓性别、权利、年龄,并且他们都是食物。

算法

“man对应于woman。那么king应该对应于什么?”

对于上面这个问题,我们如何将其应用到算法之中呢。

$$ e_{man}-e_{woman} \approx e_{king}-e_{?} $$

回到我们下边这个图里。

image.png

还记得我们之前说的是抽取了300个特征。然后将这300个特征通过非线性映射映射到二维平面图上。

image.png

上一小部分做了两个计算,有man减woman,用king减queen。他们的计算结果都是第一维度上是2,其他维度都是0。可视化之后就是上图这个样子。证明了这个向量箭头表示的主要就是性别的差异。

我们要做的计算就是: $$ e_{man}-e_{woman} + e_{king}\approx e_{?} $$ 即 $$ argmax \quad sim(e_{man}-e_{woman} + e_{king}, e_{?}) $$

补充!

我们是使用t-SNE算法加300维的向量映射到二维平面上。该步骤进行的是一个非线性映射。所以我们要知道。因为属性差异而造成的区别在图片上显示向量方向是一样的,比如man和woman 、king 和queen。但是如果在图片上。向量箭头的方向是一样的,并不能代表它们两个的差异属性是一样的。比如one和three,他们不是一男一女。

image.png