【万字长文】Word2Vec计算详解(二)Skip-gram模型

时间:2024-10-12 18:24:31

【万字长文】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 的模型结构如下图所示。

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} xiRV×1 i i i为目标单词所在位置。

权重输入层

在这一层,我们将的得到 one-hot 编码的目标单词 x i ∈ R V × 1 x_i \in \mathbb{R}^{V \times 1} xiRV×1 与隐藏层的权重输入矩阵 W W W 相乘再加上置偏值 b b b 得到隐藏层向量 h h h。其中 W ∈ R D × V W \in \mathbb{R}^{D \times V} WRD×V b ∈ R D × 1 b \in \mathbb{R}^{D \times 1} bRD×1 h ∈ R D × 1 h \in \mathbb{R}^{D \times 1} hRD×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} WjRV×D 相乘再加上置偏值 b j ′ ∈ R V × 1 b_j' \in \mathbb{R}^{V \times 1} bjRV×1 得到多个上下文单词得分的向量 S j ∈ R V × 1 S_j \in \mathbb{R}^{V \times 1} SjRV×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=Wjh+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(V1))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(V1))T P j P_j Pj 表示位置索引为 j j j 处的上下文单词的概率向量。其中 P j ∈ R V × 1 P_j \in \mathbb{R}^{V \times 1} PjRV×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