关于word2vec,看了cs224n的视频,也看了不少博客和知乎,都不太明白这个东西有什么用。今天有针对性的搜了搜word2vec是怎么生成word embedding的,才明白。以CBOW为例,如下图所示。
简单的说,word2vec的处理流程是这样的
1、选取一个大小为w的窗口,也就是共有2w+1个单词,中间一个单词为中心词
2、每个单词在词典中都有自己的one-hot向量
3、模型有三个层:输入层->隐藏层->输出层
4、输入层输入的是一个one-hot向量,维度为V*1,V是one-hot向量的维度
5、输入层和隐藏层之间有个权重矩阵W1,W1的维度是N*V,N是设定的最终的词嵌入的维度
6、隐藏层得到一个维度为N*1的向量
7、隐藏层到输入层有个权重矩阵W2,维度为V*N
8、输出层得到一个V*1的向量,将其与中心词的one-hot向量做对比。我们的训练目标就是让这两个向量月接近越好
9、最后我们训练好的向量,只要用one-hot向量乘权重矩阵W1即可,也就是W1的每一列就是训练好的词向量。
我上面讲的只是其中一个词xi的训练过程,下图中是将窗口中的词一起训练了,这样效率比较高。
关于word2vec的作用:word2vec是用来训练词向量的,也就是用一个合适的向量来代表一个词,这是构建更高层神经网络模型的基础,也就是常说的特征工程。可以用word2vec模型进行单词的相似度匹配。如果要求句子的向量表示的话,可以对句子中每个词求加权平均。