深入理解深度学习之 Embedding
1. 从 one-hot 编码引入 Embedding
在正式介绍 Embedding 之前,我们必须先理解它提出的背景,也就是说研究者提出 Embedding 是为了解决什么问题。
首先我们有一个 one-hot 编码的概念。我们知道神经网络是不能处理字符数据的,所以在文本预处理中对一句话进行数值编码,比如对于一句话“我 从 哪 里 来 要 到 何 处 去”,我们可能会很直观的对每个字进行 从 0 到 N(N 表示所有不同字符的个数) 这样的索引编码,于是就有:
[我 从 哪 里 来 要 到 何 处 去] → [0 1 2 3 4 5 6 7 8 9]
有人会提出质疑,原本没有数值大小的字符经过这种形式的编码之后,好像存在某种大小关系和顺序关系,即:2 > 1,但实际字符 “哪” 与 “从” 却并没有数值含义。所以就有人提出了没有数值含义的 one-hot 编码,也被称为独热编码,对上面的那句话进行独热编码后如下:
[ 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 ] \begin{bmatrix} 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\ \end{bmatrix} ⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡