目录
1 什么是word2vec
word2vec顾名思义,就是将词(word)映射到(to)实向量(vector),用一一实数向量表示一个词,也被叫做词嵌入(word embedding),也可以认为词向量是词的特征向量。通过这种词嵌入的方式可以将词语映射为可以计算的数学形式,使计算机对自然的语言的计算变得更加可行,同时也赋予了它一定的数学性质,例如可以用向量的相似度来表示两个词的相似度等等。word2vec可以参考这篇文章中有提到https://blog.csdn.net/qq_31267769/article/details/108036005。
最简单的一种方式就是利用一个维数为V的onehot向量表示一个长度为V的词库,这种方法用词的index平等的表示了词库中的每个词,但是显然不是一个好的方法。onehot向量是一共稀疏向量,并且维数与词库中词数相同,当词数很大,这种表示的计算效率就很低,并且很多神经网络工具很难计算高维的稀疏向量。此外,用onehot表示词语也会出现一个问题,不同的词向量永远两两正交,没有办法用相似度来计算两个词的关系,也就是onehot的表示形式忽略了两个词之间的关系。
常用的两种基于预测的计算词嵌入的算法就是CBOW和skip-gram,skip-gram是根据一个中心词生成上下文词,CBOW是根据上下文词生成一个中心词,本文主要介绍skip-gram。
2 skip-gram模型
下图是CBOW和skip-gram模型的网络结构图,可以看到CBOW模型是通过上下文词来生成中心词,而skip-gram是通过中心词来生成上下文词,两个模型似乎是完全对称的,这次主要介绍skip-gram。
2.1 skip-gram模型用来做什么
文章开头讲到了word2vec,上面又提到了skip-gram是通过中心词来生成上下文词,所以word2vec和skip-gram生成上下文词有什么关系?
模型的细节很多博客都有细致的讲解,但是这个问题很少有人明确提出。首先skip-gram确实是通过softmax计算输出概率最大的上下文词,也确实是使用skip-gram来计算词向量,所以这个模型到底是输出什么?这里就引入了Fake Task。
2.2 什么是Fake Task?
上面提到了Fake Task,word2vec模型的最终目的并不是建模,而是通过训练数据来学习隐层的参数,而隐层的参数实际就是word ve