文章

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 向量:

\[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 到词嵌入,本质上就是按词编号从矩阵里把对应那一列取出来。

本文由作者按照 CC BY 4.0 进行授权