赞
踩
参考文章:https://www.cnblogs.com/pinard/p/7160330.html
word2vec是google在2013年推出的一个NLP工具,它的特点是将所有的词向量化,这样词与词之间就可以定量的去度量他们之间的关系,挖掘词之间的联系。
最早出现的词向量的编码方式是one hot,其维度大小是整个词汇表的大小,具体是那个词汇,该词汇维度上为1,其余为0。
这种词向量具有很多的问题:
后面出现了方法Distributed representation,其通过训练,将每个词都映射到一个较短的词向量上来。
所有的这些词向量就构成了向量空间,进而可以用普通的统计学的方法来研究词与词之间的关系。
word2vec出现之前,我们用DNN进行训练词向量进而处理词与词之间的关系,有CBOW和Skip-Gram两种模型。
输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。下面举例说明输入和输出:
比如下面这段话,我们的上下文大小取值为4,特定的这个词是"Learning",也就是我们需要的输出词向量,上下文对应的词有8个,前后各4个,这8个词是我们模型的输入,对应8个神经元。
输出是所有词的softmax概率,有词汇表大小个神经元 ,最终找到概率最大的词对应的神经元即可。
Skip-Gram的思路和CBOW相反。输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量 。
还以上面为例,特定的这个词是"Learning",也就是我们需要的输入词向量,对应的Skip-Gram神经网络模型输入层有1个神经元。
输出是所有词的softmax概率,有词汇表大小个神经元 ,最终找到概率排前8的词对应的神经元即可。
我们的词汇表一般在百万级别以上,这意味着我们DNN的输出层需要进行softmax计算各个词的输出概率的的计算量很大,因此非常耗时。
word2vec还是使用CBOW和SKip-Gram模型,但是不再以DNN为基础,使用的是霍夫曼树。其用霍夫曼树来代替隐藏层和输出层的神经元,霍夫曼树的叶子节点起到输出层神经元的作用,叶子节点的个数即为词汇表的小大。 而内部节点则起到隐藏层神经元的作用。
**输入:**权值为(w1, w2, w3, w4, …, wn)的n个节点
**输出:**对应的霍夫曼树
流程:
在word2vec中,约定编码方式和上面的例子相反,即约定左子树编码为1,右子树编码为0,同时约定左子树的权重不小
于右子树的权重。比如上图中f的编码为(1001)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。