有关word2vector的原理这里不赘述,本篇仅阐述怎么使用tensorflow来做一个实际操作案例。这里的一些说明,均为实际操作总结,或来自别人的总结,经个人对在实际操作或理论理解基础上,比较赞同的观点,望对大家学习和实践中有所帮助。
为什么要使用word2vector技术?因为除非在使用树模型,否则都需要将词转换为一些数值向量。一种直接的做法是使用one-hot,将其转为稀疏表示,只有该词向量为1,其余为0。如:
显然这样当词袋较大时,任何神经网络的输入将会很大,除此之外,one-hot的表达方式,并没有考虑到该词的上下文内容,这是一个很大的弊端。针对以上这两点,word2vector旨于解决将一个词的one-hot型的高维表达方式,转为更低维度的向量,以及考虑词的上下文内容。
如上图, word2vector仅为一个简单的网络,即一层输入(input layer),一层隐层(hidden layer),这一层可以只是简单地权重相加,也可以是非线性的,如sigmoid何tanh,一层输出(output layer),输出层采用softmax。在训练过程中,我们想要训练得到的结果是在cat周围的词有更大的概率,而其他的词的概率较小。如果词袋大小为10000,我们想要减小为300为,那么首先需要的10000*300的权重矩阵(中间层),该矩阵的每一行代表词袋中的每一个词,这个矩阵也就成为了一个embeddding look-up table。
关于两种word2vector模型,简单来说,skip gram模型,就是使用给定的词,来预测其周围的词的概率。CBWM(continuous bag of words model)是使用中间词的周边词,来预测该中间词。除此之外,还有关于训练过程中的负采样问题。
其他说明:
为了得到词语的有意义的收敛的词向量,需要较大的语料库,否则出来的词向量偶然性较大。
参考来源:
[https://adventuresinmachinelearning.com/word2vec-tutorial-tensorflow/]
[https://towardsdatascience.com/learn-word2vec-by-implementing-it-in-tensorflow-45641adaf2ac]