04 嵌入矩阵(Embedding Matrix)
04 嵌入矩阵(Embedding Matrix)
这一节在讲什么
这一节把前面的词嵌入概念正式写成矩阵形式。
核心结论只有一句:
学习词嵌入,本质上就是在学习一个嵌入矩阵 $E$。
嵌入矩阵长什么样
假设:
- 词表大小是 $V=10000$
- 每个词向量维度是 $d=300$
那么嵌入矩阵可以写成:
\[E \in \mathbb{R}^{300 \times 10000}\]你可以把它理解成:
- 每一列对应一个词
- 每一列都是这个词的 300 维嵌入向量
one-hot 乘嵌入矩阵会发生什么
假设 orange 的编号是 6257,对应 one-hot 向量:
那么:
\[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 到词嵌入,本质上就是按词编号从矩阵里把对应那一列取出来。
本文由作者按照 CC BY 4.0 进行授权