【万字长文】Word2Vec计算详解(二)Skip-gram模型
写在前面
本篇介绍Word2Vec中的第二个模型Skip-gram模型
【万字长文】Word2Vec计算详解(一)CBOW模型 markdown行 9000+
【万字长文】Word2Vec计算详解(二)Skip-gram模型 markdown行 12000+
【万字长文】Word2Vec计算详解(三)分层Softmax与负采样 markdown行 18000+
Skip-gram模型
Skip-gram 模型是自然语言处理(NLP)中 Word2Vec 的一种重要模型。与 CBOW 正好反过来,Skip-gram的主要思想是通过输入某个单词,要求预测它的上下文单词。
模型结构
Skip-gram 模型的输入是目标单词的one-hot向量,通过线性变换形成预测上下文单词的向量,然后再通过一次线性变换得到每一个上下文单词的得分表,最后经过多分类得到要预测的上下文单词。Skip-gram 的模型结构如下图所示。
预处理
在正式介绍模型输入前,需要简单介绍模型输入前的处理。模型的预处理与 CBOW 模型的预处理一致,需要得到词汇表的 one-hot表示,这里详细可以参考 CBOW 模型的预处理。
模型输入
在模型中,将目标单词表示为独热编码(one-hot encoding)向量然后作为 Skip-gram 模型的输入 x i x_i xi, x i ∈ R V × 1 x_i \in \mathbb{R}^{V \times 1} xi∈RV×1, i i i为目标单词所在位置。
权重输入层
在这一层,我们将的得到 one-hot 编码的目标单词
x
i
∈
R
V
×
1
x_i \in \mathbb{R}^{V \times 1}
xi∈RV×1 与隐藏层的权重输入矩阵
W
W
W 相乘再加上置偏值
b
b
b 得到隐藏层向量
h
h
h。其中
W
∈
R
D
×
V
W \in \mathbb{R}^{D \times V}
W∈RD×V,
b
∈
R
D
×
1
b \in \mathbb{R}^{D \times 1}
b∈RD×1,
h
∈
R
D
×
1
h \in \mathbb{R}^{D \times 1}
h∈RD×1。写成矩阵的形式为
h
=
W
x
i
+
b
h = Wx_i + b
h=Wxi+b
权重输出层
我们将得到 h h h 与隐藏层的权重输出矩阵 W j ′ ∈ R V × D W_j' \in \mathbb{R}^{V \times D} Wj′∈RV×D 相乘再加上置偏值 b j ′ ∈ R V × 1 b_j' \in \mathbb{R}^{V \times 1} bj′∈RV×1 得到多个上下文单词得分的向量 S j ∈ R V × 1 S_j \in \mathbb{R}^{V \times 1} Sj∈RV×1, S = ( S 1 , S 2 , … , S 2 C ) T S = ( S_1, S_2, \dots, S_{2C})^T S=(S1,S2,…,S2C)T。其中 W j W_j Wj 表示为位置索引为 j j j 处的预测的上下文单词的权重输出矩阵, b j b_j bj 表示为位置索引为 j j j 处的预测的上下文单词的权重矩阵对应的置偏, S j S_j Sj 表示为位置索引为 j j j 处的预测的上下文单词的得分。其中, j = 1 , 2 , 3 , ⋯ , 2 C j = 1,2,3,\dotsm,2C j=1,2,3,⋯,2C, C C C为窗口大小,要预测窗口大小为 C C C 的上下文,就要预测位置为 j j j上的前 C C C个单词和后 C C C个单词,总共为 2 C 2C 2C 个单词。将上面运算写成矩阵的形式为
S
j
=
W
j
′
h
+
b
j
′
S_j = W_j'h + b_j'
Sj=Wj′h+bj′
其中
j
=
1
,
2
,
…
,
C
j = 1,2,\dots,C
j=1,2,…,C为上文索引,
j
=
C
+
1
,
C
+
2
,
…
,
2
C
j = C+1,C+2,\dots,2C
j=C+1,C+2,…,2C为下文索引,最后构成总的上下文索引。我们定义
S
j
=
(
S
j
(
0
)
,
S
j
(
1
)
,
…
,
S
j
(
V
−
1
)
)
T
S_j = (S_j(0),S_j(1),\dots,S_j(V-1))^T
Sj=(Sj(0),Sj(1),…,Sj(V−1))T,方便后面使用。
Softmax层
我们将输出层得到的的得分
S
j
S_j
Sj用 Softmax 处理为概率
P
j
P_j
Pj。
P
j
=
(
P
j
(
0
)
,
P
j
(
1
)
,
…
,
P
j
(
V
−
1
)
)
T
P_j = (P_j(0), P_j(1), \dots, P_j(V-1))^T
Pj=(Pj(0),Pj(1),…,Pj(V−1))T,
P
j
P_j
Pj 表示位置索引为
j
j
j 处的上下文单词的概率向量。其中
P
j
∈
R
V
×
1
P_j \in \mathbb{R}^{V \times 1}
Pj∈RV×1,
S
j
(
k
)
S_j(k)
Sj(k)表示得分向量
S
j
S_j
Sj 第
k
k
k 行对应位置的得分值。
P
j
(
k
)
P_j(k)
Pj(k)表示向量
P
j
P_j
Pj 第
k
k
k 行对应位置的概率值。Softmax 公式见 (\ref{SG02})。运算写成矩阵的形式为
P
j
(
k
)
=
Softmax
(
S
j
)
=
exp
(
S
j
(
k
)
)
∑
l
=
0
V
−
1
exp