2020-11-3 吴恩达DL学习-C5 序列模型-W2 自然语言处理与词嵌入(2.4 嵌入矩阵-嵌入矩阵E乘以one-hot向量O=嵌入向量e)

1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai

2.4 嵌入矩阵 Embedding matrix

接下来我们要将学习词嵌入这一问题具体化,当你应用算法来学习词嵌入时,实际上是学习一个嵌入矩阵,我们来看一下这是什么意思。

和之前一样,假设我们的词汇表含有10,000个单词,词汇表里有a,aaron,orange,zulu,可能还有一个未知词标记。我们要做的就是学习一个嵌入矩阵,它将是一个300×10,000的矩阵,如果你的词汇表里有10,000个,或者加上未知词就是10,001维。
在这里插入图片描述

这个矩阵的各列代表的是词汇表中10,000个不同的单词所代表的不同向量。假设orange的单词编号是6257(如上图),代表词汇表中第6257个单词,我们用符号 O 6257 O_{6257} O6257来表示这个one-hot向量,这个向量除了第6257个位置上是1,其余各处都为0,显然它是一个10,000维的列向量,它只在一个位置上有1,它不像图上画的那么短,它的高度应该和左边的嵌入矩阵的宽度相等。

假设这个嵌入矩阵叫做矩阵 E E E,注意如果用 E E E去乘以右边的one-hot向量,也就是 O 6257 O_{6257} O6257,那么就会得到一个300维的向量, E E E是300×10,000的,是10,000×1的,所以它们的积是300×1的,即300维的向量。要计算这个向量的第一个元素,你需要做的是把 E E E的第一行和 O 6257 O_{6257} O6257的整列相乘,不过的所有元素都是0,只有6257位置上是1,最后你得到的这个向量的第一个元素就是orange这一列下的数字。
在这里插入图片描述

然后我们要计算这个向量的第二个元素,就是把 E E E的第二行和这个 O 6257 O_{6257} O6257相乘,和之前一样,然后得到第二个元素,以此类推,直到你得到这个向量剩下的所有元素。
在这里插入图片描述

这就是为什么把矩阵 E E E和one-hot向量相乘,最后得到的其实就是一个300维的列,就是单词orange下的这一列,它等于 e 6257 e_{6257} e6257
在这里插入图片描述

这个符号是我们用来表示这个300×1的嵌入向量的符号,它表示的单词是orange。

更广泛来说,假如说有某个单词w,那么 e w e_w ew就代表单词w的嵌入向量

同样, E ⋅ Q j = e j E\cdot Q_j=e_j EQj=ej
O j O_j Oj就是只有第 j j j个位置是1的one-hot向量,得到的结果就是 e j e_j ej,它表示的是字典中单词 j j j 的嵌入向量

在这一节课中,要记住的一件事就是我们的目标是学习一个嵌入矩阵 E E E

在下节课中你将会随机地初始化矩阵 E E E,然后使用梯度下降法来学习这个300×10,000的矩阵中的各个参数, E E E乘以这个one-hot向量 O j O_j Oj会得到嵌入向量。

再多说一点,当我们写这个等式 E ⋅ Q j = e j E\cdot Q_j=e_j EQj=ej的时候,写出这些符号是很方便的,代表用矩阵乘以one-hot向量。但当你动手实现时,用大量的矩阵和向量相乘来计算它,效率是很低下的,因为one-hot向量是一个维度非常高的向量,并且几乎所有元素都是0,所以矩阵向量相乘效率太低,因为我们要乘以一大堆的0。

所以在实践中你会使用一个专门的函数来单独查找矩阵 E E E的某列,而不是用通常的矩阵乘法来做,但是在画示意图时, E ⋅ Q j = e j E\cdot Q_j=e_j EQj=ej这样写比较方便。所以,例如在Keras中就有一个嵌入层,然后我们用这个嵌入层更有效地从嵌入矩阵中提取出你需要的列,而不是对矩阵进行很慢很复杂的乘法运算。

在本课中你见到了在学习嵌入向量的过程中用来描述这些算法的符号以及关键术语,矩阵它包含了词汇表中所有单词的嵌入向量。在下节课中,我们将讨论学习矩阵的具体算法。

猜你喜欢

转载自blog.csdn.net/weixin_42555985/article/details/109461506
今日推荐