就如上述说的迁移学习,当skip-gram的模型训练结束之后,模型训练得到的参数矩阵(weight matrix)就是被训练用来表征语意的。这里得益于独热编码的好处,训练得到的参数矩阵的每一行就是表征了文本中的每个单词。这里可以参看上图,输入层是一个1 x 5的向量,假设隐藏层有3个神经元,那么从输入层映射到隐藏层需要一个5 x 3的矩阵,在经过训练迭代之后得到这个5 x 3矩阵中的每一行就是表征了相对应的单词(具体的计算方式可以参看下图)。所以这里的参数矩阵就是最终需要的词嵌入,而参数矩阵跟独热编码得到输入向量的内积得到的就是词向量。不仅如此,在原作者的论文,他们还证明了语意上相近的单词会有类似的向量表征,这是因为这些单词最终是都有类似的周边单词。
通过上述向量和矩阵的相乘,并引入softmax作为激活函数得到最终的结果,而通过结果就可以理解原本的向量是5维的,现在得到的词向量的维度变小了。
2、Continuous Bag-of-Words (CBOW)
CBOW是通过目标单词周边的单词来预测目标单词,这点刚好跟skip-gram模型相反。
而作为网络的输入不再仅仅是独热编码方式得到的结果,此时的输入是目标单词周边的每个单词独热编码的和。还是回到小马哥的例子,该句子中分词之后一共有13个词语(忽略句号和逗号),现在要预测的目标词语是“喜欢”,那么“小马哥”、“非常”和“学习”、“自然语言处理”这四个单词对各自独热编码的结果的和就是网络的输入。具体执行可以参看下图的神经网络执行过程:
为了方便建立词语之间的联系,窗口是随着句子的方向滑动,并且选取中心词作为预测目标,目标词语的周边单词作为网络输入,而窗口中的五个词语的内容就是CBOW,如下图所示。
这就是如何通过skip-gram和CBOW训练得到词向量,也就是所谓的word2vec模型。论文的作者在论文中指出,skip-gram比较适合小型的文本集和文本中含有一些稀有词,而CBOW则比较适合文本中有高频出现的词语的文本集,这样子有助于提升训练的速度并且或者更高的准确性。
PS:基于的理解解析了该模型,如有任何问题,欢迎指出来一起讨论,非常感谢你读本博文。