0
点赞
收藏
分享

微信扫一扫

浅谈word embedding #yyds干货盘点#

这篇文章是我的笔记分享,内容主要来自吴恩达老师的深度学习课程。^[AI中国官网-全球领先的线上AI教育、实践平台 (deeplearningai.net)]

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、迁移、微调。有的甚至都不用微调。

举报

相关推荐

0 条评论