转自:http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/
半路出家转到nlp领域(确切的说在语言模型组),在nlp不能不知道word2vector;对于这些高大上的领域确实挺好奇,加上它对于训练神经网络语言模型确实很重要(副产品),就催生了这篇文章。
网上关于背景说了很多,这边就不再说了,主要是要了解一下one-hot的含义;word2vector的目的就是word的one-hot represent 到 distribute represent,表达语义的意思。
首先,word2vector一共有三层,输入层,隐藏层和输出层。one-hot就是word2vector的输入层,假设一个词典有10k个词,"able"在第六个位置,那么"able"就可以这样表示:[0, 0, 0, 0, 0, 1, ...., 0, 0, 0]。
然后隐藏层,我理解的就是矩阵,假设我选取词的特征有300维,那么输入就是1*10000的矩阵乘以10000*300的矩阵,得到某个单词的1*300的特征表示。
输出层(softmax层)。这一层其实还有对于某个词的300*10000输出权重矩阵,这样隐藏层的输出乘以这个矩阵,就有得到1*10000的向量,然后softmax权值归一,就是这个词的向量表示了。
我们要调的参数其实就是隐藏层的矩阵,使其特征越接近label越好,那么势必要进行多次迭代。
问题来了,随着单词的数量增加,那么隐藏层参数是不是也要增加,这对于计算是不利的,那么我们怎么去调整呢,由于近义词的距离总是很相近,使用k-nn进行单词的聚类,再进行训练,就可以降维,提高运行效率了
调整部分还没来得及看,先放文章:http://mccormickml.com/2017/10/22/product-quantizer-tutorial-part-2/