首先我们要知道Word2Vec包含了两种词训练模型:CBOW模型和Skip-gram模型。
那么word2vec到底是要做一件什么事情呢?
下面以CBOW为例进行讲解:
其实word2vec可以分为两部分:
- 模型训练
- 通过模型获得word embedding
训练过程如下:
- 输入层:上下文单词的onehot向量。 {假设单词向量空间dim为V,上下文单词个数为C}。
- 所有onehot分别乘以共享的输入权重矩阵W.{V*N矩阵,N为自己设定的数,初始化权重矩阵W}。
- 所得的向量 {因为是onehot所以为向量} 相加求平均作为隐层向量,size为1*N。
- 乘以输出权重矩阵W’ {NV} 得到向量 {1V} **函数处理。
- 得到V-dim概率分布 {PS:因为是onehot嘛,其中的每一维斗代表着一个单词},概率最大的index所指示的单词为预测出的中间词(target word)。
- 与true label的onehot做比较,然后反向传播调整参数。
- 上述过程迭代多次。
word2vec先基于训练数据训练一个神经网络(如上图所示,在训练的过程中通过梯度下降算法不断调整权重W和)。
当这个网络训练好以后,我们并不会利用这个训练好的网络处理新任务,我们真正需要的是这个模型通过训练数据所学到的参数(权重W)。训练完毕后,输入层的每个单词(one-hot向量)与矩阵W相乘得到的向量的就是我们想要的词向量(word embedding)。
需要说明的一点:因为单词是one-hot编码,所以,所有单词的word embedding所组成的矩阵就是W本身,这个矩阵叫做look up table。具体原因自己好好想一下。
由于上面介绍的比较简单,想了解具体细节的看一下下面的几篇博客:
第一篇以Skip-Gram模型为例详细的讲解了word2vec的整体流程。
一文详解 Word2vec 之 Skip-Gram 模型(结构篇)
第二篇以CBOW为例,讲的比较通俗易懂,很透彻。
第三篇通过图示的方式介绍了CBOW模型流程,更加便于理解。