one-hot概念
在NLP中,通常使用one-hot
的形式将类别变量(理解为输入的一句话)编码成二进制序列向量,这种编码中,每个类别都被表示为一个"除了单个位置为1,其他位置都为0"的向量。
例如我们可以为每个字母定义一个26维的one-hot向量,如’a’表示为[1, 0, 0, …, 0],'b’表示为[0, 1, 0, …, 0],以此类推。
在表示’Embedding’时,我们可以使用这些向量组成一个稀疏矩阵
- ‘e’: [0, 0, 0, 0, 1, 0, …, 0]
- ‘m’: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, …, 0]
- ‘b’: [0, 1, 0, …, 0]
- ‘e’: [0, 0, 0, 0, 1, 0, …, 0]
- ‘d’: [0, 0, 0, 1, 0, …, 0]
- ‘d’: [0, 0, 0, 1, 0, …, 0]
- ‘i’: [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, …, 0]
- ‘n’: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, …, 0]
- ‘g’: [0, 0, 0, 0, 0, 0, 1, 0, …, 0]
即一个9*26的矩阵
引入
使用以上表示一篇文章时,缺点也随之而来:过于稀疏,过度占用资源
这时就引入Embedding
层了,直译是嵌入式、嵌入层的意思,概念上讲就是将高维的数据映射到一个相对低维的连续向量空间中,简单来说就是将复杂矩阵降维
为一个相对简单的矩阵
假设有一个2 * 6的矩阵,然后乘上一个6 * 3的矩阵,就会变成2 * 3的矩阵,如以下
(
a
11
a
12
a
13
a
14
a
15
a
16
a
21
a
22
a
23
a
24
a
25
a
26
)
[
b
11
b
12
b
13
b
21
b
22
b
23
b
31
b
32
b
33
b
41
b
42
b
43
b
51
b
52
b
53
b
61
b
62
b
63
]
=
(
c
11
c
12
c
13
c
21
c
22
c
23
)
\begin{pmatrix} a_{11} & a_{12} & a_{13} & a_{14} & a_{15} & a_{16} \\ a_{21} & a_{22} & a_{23} & a_{24} & a_{25} & a_{26} \end{pmatrix} \begin{bmatrix} b_{11} & b_{12} & b_{13} \\ b_{21} & b_{22} & b_{23} \\ b_{31} & b_{32} & b_{33} \\ b_{41} & b_{42} & b_{43} \\ b_{51} & b_{52} & b_{53} \\ b_{61} & b_{62} & b_{63} \end{bmatrix} = \begin{pmatrix} c_{11} & c_{12} & c_{13} \\ c_{21} & c_{22} & c_{23} \end{pmatrix}
(a11a21a12a22a13a23a14a24a15a25a16a26)
b11b21b31b41b51b61b12b22b32b42b52b62b13b23b33b43b53b63
=(c11c21c12c22c13c23)
其中,
- c 11 = a 11 b 11 + a 12 b 21 + a 13 b 31 + a 14 b 41 + a 15 b 51 + a 16 b 61 c_{11} = a_{11}b_{11} + a_{12}b_{21} + a_{13}b_{31} + a_{14}b_{41} + a_{15}b_{51} + a_{16}b_{61} c11=a11b11+a12b21+a13b31+a14b41+a15b51+a16b61
- c 12 = a 11 b 12 + a 12 b 22 + a 13 b 32 + a 14 b 42 + a 15 b 52 + a 16 b 62 c_{12} = a_{11}b_{12} + a_{12}b_{22} + a_{13}b_{32} + a_{14}b_{42} + a_{15}b_{52} + a_{16}b_{62} c12=a11b12+a12b22+a13b32+a14b42+a15b52+a16b62
- c 13 = a 11 b 13 + a 12 b 23 + a 13 b 33 + a 14 b 43 + a 15 b 53 + a 16 b 63 c_{13} = a_{11}b_{13} + a_{12}b_{23} + a_{13}b_{33} + a_{14}b_{43} + a_{15}b_{53} + a_{16}b_{63} c13=a11b13+a12b23+a13b33+a14b43+a15b53+a16b63
- c 21 = a 21 b 11 + a 22 b 21 + a 23 b 31 + a 24 b 41 + a 25 b 51 + a 26 b 61 c_{21} = a_{21}b_{11} + a_{22}b_{21} + a_{23}b_{31} + a_{24}b_{41} + a_{25}b_{51} + a_{26}b_{61} c21=a21b11+a22b21+a23b31+a24b41+a25b51+a26b61
- c 22 = a 21 b 12 + a 22 b 22 + a 23 b 32 + a 24 b 42 + a 25 b 52 + a 26 b 62 c_{22} = a_{21}b_{12} + a_{22}b_{22} + a_{23}b_{32} + a_{24}b_{42} + a_{25}b_{52} + a_{26}b_{62} c22=a21b12+a22b22+a23b32+a24b42+a25b52+a26b62
- c 23 = a 21 b 13 + a 22 b 23 + a 23 b 33 + a 24 b 43 + a 25 b 53 + a 26 b 63 c_{23} = a_{21}b_{13} + a_{22}b_{23} + a_{23}b_{33} + a_{24}b_{43} + a_{25}b_{53} + a_{26}b_{63} c23=a21b13+a22b23+a23b33+a24b43+a25b53+a26b63
以上C矩阵为降维后的矩阵,而降维的原理就是矩阵乘法
其他延伸关键词还有Word Embedding(词嵌入)
、Entity Embedding(实体嵌入)
、Image Embedding(图片嵌入)
等等