Word2Vec模型中,主要有Skip-Gram和CBOW两种模型,从直观上理解,Skip-Gram是给定input word来预测上下文。而CBOW是给定上下文,来预测input word。
Skip-Gram的实现逻辑类似于自编码器,模型的输出不是最终结果,隐层构成的向量才是所要的vector。
以句子The quick brown fox jumps over the lazy dog为例,实现过程为
1 选定词语fox作为input-word
2 定义skip-window作为input-word的上下文范围,如skip-window=2,fox的上下文为quick,brown, jumps, over,组成的样本对(fox,quick),(fox,brown), (fox,jumps), (fox,over)。定义窗口中选取的样本对个数num-skips,如果num-skips=2,skip-window=2,则从四组样本中随机选取两组作为样本。
3 对样本word进行编码,如one-hot编码。
4 定义网络。假设总词汇量是5000,则输入维度设为5000维,输出维度同样是5000维,表示每一个单词的概率。隐层可以设置为100(在Python的gensim包中封装的Word2Vec接口默认的词向量大小为100, window_size为5)。
6 训练得到网络参数,把输出层去掉,隐层作为输出层,输入单词,即可得到对应向量。
直观上理解,如果两个不同的单词有着非常相似的“上下文”(也就是窗口单词很相似,比如“Kitty climbed the tree”和“Cat climbed the tree”),那么通过我们的模型训练,这两个单词的嵌入向量将非常相似。