论文地址:Efficient Estimation of Word Representations in Vector Space
个人认为,word2vec主要解决的问题是one-hot中维度过高并且稀疏的问题。word2vec是Google团队在2013年发表的一篇paper,当时一经问世直接将NLP领域带到了一个新的高度,在2018年bert被提出之前,word2vec一直是NLP算法工程师追捧的预训练词向量模型。
Word2Vec是轻量级的神经网络,其模型仅仅包括输入层、隐藏层和输出层,模型框架根据输入输出的不同,主要包括CBOW和Skip-gram模型。CBOW是知道
w
t
−
2
w_{t-2}
wt−2,
w
t
−
1
w_{t-1}
wt−1,
w
t
+
1
w_{t+1}
wt+1,
w
t
+
2
w_{t+2}
wt+2,预测
w
t
w_t
wt.而Skip-gram是知道
w
t
w_t
wt,预测
w
t
−
2
w_{t-2}
wt−2,
w
t
−
1
w_{t-1}
wt−1,
w
t
+
1
w_{t+1}
wt+1,
w
t
+
2
w_{t+2}
wt+2
首先,输入层是一个one-hot向量,具体细节请看前面的博客。例如
w
t
−
2
=
[
0
,
0
,
1
,
0
,
0
,
0
]
w_{t-2}=[0,0,1,0,0,0]
wt−2=[0,0,1,0,0,0] 经过一个矩阵
[
0
1
1
1
1
0
3
5
6
1
1
0
1
0
1
]
\begin{bmatrix} 0&1&1\\ 1&1&0\\ 3&5&6\\ 1&1&0\\ 1&0&1\\ \end{bmatrix}
013111151010601
将高维度的one-hot向量映射为低维度的向量
[
3
,
5
,
6
]
T
[3,5,6]^T
[3,5,6]T,再经过一个矩阵,把低维向量映射回高维,得到输出层
[
1
1
1
1
1
3
1
0
1
1
2
5
6
1
1
]
\begin{bmatrix} 1&1&1&1&1\\ 3&1&0&1&1\\ 2&5&6&1&1\\ \end{bmatrix}
132115106111111
这样可以得到输出为
[
30
,
38
,
39
,
14
,
14
]
T
[30,38,39,14,14]^T
[30,38,39,14,14]T这就是根据
w
t
−
2
w_{t-2}
wt−2预测得到
w
t
w_t
wt的结果,将
w
t
−
2
w_{t-2}
wt−2扩展到
w
t
−
1
w_{t-1}
wt−1,
w
t
+
1
w_{t+1}
wt+1,
w
t
+
2
w_{t+2}
wt+2就是多几个输入的one-hot向量的问题。同理Skip-gram也是一样。总的来说就是一个从高维映射到低维再映射回去的过程。
参考:
- 详解Word2Vec原理篇
- 深入浅出Word2Vec原理解析