04 嵌入矩阵(Embedding Matrix)
这一节在讲什么
这一节把前面的词嵌入概念正式写成矩阵形式。
核心结论只有一句:
学习词嵌入,本质上就是在学习一个嵌入矩阵 $E$。
嵌入矩阵长什么样
假设:
- 词表大小是 $V=10000$
- 每个词向量维度是 $d=300$
那么嵌入矩阵可以写成:
$$
E \in \mathbb{R}^{300 \times 10000}
$$
你可以把它理解成:
- 每一列对应一个词
- 每一列都是这个词的 300 维嵌入向量
one-hot 乘嵌入矩阵会发生什么
假设 orange 的编号是 6257,对应 one-hot 向量:
$$
O_{6257}
$$
那么:
$$
EO_{6257} = e_{6257}
$$
结果就是第 6257 列,也就是 orange 的词向量。
更一般地:
$$
EO_j = e_j
$$
为什么这件事成立
因为 one-hot 向量只有一个位置是 1,其他全是 0。
所以矩阵乘法时,实际上只会把第 $j$ 列“选出来”。
这就是嵌入层查表的数学本质。
小白可以怎么理解
你可以把嵌入矩阵想成一个大词典表格:
- 列标题是词
- 每列下面是这个词的向量
one-hot 向量就像一个“索引指针”,
告诉系统要把哪一列取出来。
实际实现里为什么不真做矩阵乘法
课程里特别提醒了一个工程点:
虽然写成 $EO_j$ 很方便,
但真正实现时通常不会傻乎乎做完整矩阵乘法。
因为:
- $O_j$ 几乎全是 0
- 大部分乘法都在乘 0
- 太浪费
实际系统更像是:
直接按索引取第 $j$ 列。
这也是为什么很多框架会提供 Embedding 层。
这一节最该记住的公式
嵌入矩阵
$$
E \in \mathbb{R}^{d \times V}
$$
通过 one-hot 取词向量
$$
EO_j = e_j
$$
对任意词 $w$
$$
e_w
$$
表示词 $w$ 的嵌入向量。
这一节最该记住的要点
要点 1:词嵌入不是一个个零散学的,而是一起放在矩阵 $E$ 里学
这让表达更统一。
要点 2:嵌入矩阵的列就是词向量
one-hot 乘矩阵,本质上就是取列。
要点 3:实际实现中更像查表而不是矩阵乘法
这是一个重要的工程优化点。
这一节一句话总结
嵌入矩阵就是“整个词表的词向量总表”,而 $EO_j=e_j$ 这件事说明:从 one-hot 到词嵌入,本质上就是按词编号从矩阵里把对应那一列取出来。