word2vec
Posted xz824
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了word2vec相关的知识,希望对你有一定的参考价值。
word2vec是google在2013年推出的NLP工具,特点是将所有的词向量化,这样词与词之间就可以定量地度量 它们之间的关系,挖掘之间的联系。
1. CBOW(输出中心词)
CBOW模型的训练输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量
我们上下文大小取值为4,特定的这个词是"learning",也就是我们需要的输出词向量,上下文对应的词有8个,前后各4个,这8个词是我们模型的输入。由于CBOW使用的是词袋模型,因此这8个词都是平等的,也就是与关注的词之间的距离无关,只要在上下文之内即可。这样我们这个CBOW的例子里,我们的输入是8个词向量,输出是所有词的softmax概率(训练的目标是期望训练样本特定词对应的softmax概率最大),对应的CBOW神经网络模型输入层有8个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某8个词对应的最可能的输出中心词时,我们可以通过一次DNN前向传播算法并通过softmax激活函数找到概率最大的词对应的神经元即可
2. Skip-Gram(输出上下文词)
输入是特定一个词的词向量,而输出是特定词对应的上下文词向量。与CBOW相反
3. 霍夫曼树
霍夫曼树是word2vec的基础, word2vec使用了CBOW和Skip-Gram来训练模型,得到词向量,但没有使用传统的DNN模型。最先优化使用的数据结构是霍夫曼树来代替隐藏层和输出层的神经元,霍夫曼树的叶子节点起到输出层神经元的作用,叶子节点即为词汇表的大小,而内部节点则为起到隐藏层神经元的作用。
霍夫曼树的建立过程:
输入:权值为(w_1,w_2,...w_n)的N个节点
输出:对应的霍夫曼树
1)将(w_1,w_2,...w_n)看作是n棵树的森林,每个树仅有一个节点
2)在森林中选择根节点权值最小的两棵树进行合并,得到一个新的树,这两颗树分别作为新树的左右子树。新树的根节点权重为左右子树的根节点权重之和
3)将之前的根节点权值最小的两棵树从森林删除,并把新树加入森林
4)重复步骤2)和3)直到森林只有一棵树为止
那么霍夫曼树有什么好处呢?一般得到霍夫曼树后我们会对叶子节点进行霍夫曼编码,由于权重高的叶子节点越靠近根节点,而权重低的叶子节点会远离根节点,这样我们的高权重节点编码值较短,而低权重值编码值较长。这保证的树的带权路径最短
4. word2vec改进传统的神经网络:基于Hierarchical softmax 和基于Negative Sampling
4.1 基于Hierarchical softmax
应用传统的神经网络最大的问题在于从隐藏层到输出层的softmax的计算量很大,因为要计算所有词的softmax概率,再去找概率最大的值。word2vec对此作出了改进
- 对于从输入层到隐藏层的映射,没有采取神经网络的线性变换加激活函数的方法,而是采用简单的对所有输入词向量求和并取平均的方法
- 从隐藏层到输出的softmax层。为了避免要计算所有词的softmax,word2vec采用了霍夫曼树来代替从隐藏层到输出softmax层的映射。
缺点: 如果我们的训练样本里的中心词w是一个很生僻的词,那么就得在霍夫曼树中辛苦的向下走很久
- 4.2 基于Negative Sampling
Negative Sampling由于没有采用霍夫曼树,每次只是通过采样neg个不同的中心词做负例,就可以训练模型
以上是关于word2vec的主要内容,如果未能解决你的问题,请参考以下文章