当前位置:   article > 正文

word2vec原理总结

word2vec原理

参考文章:https://www.cnblogs.com/pinard/p/7160330.html
word2vec是google在
2013
年推出的一个NLP工具,它的特点是将所有的词向量化,这样词与词之间就可以定量的去度量他们之间的关系,挖掘词之间的联系。

1 词向量编码

1.1 one hot

最早出现的词向量的编码方式是one hot,其维度大小是整个词汇表的大小,具体是那个词汇,该词汇维度上为1,其余为0。
这种词向量具有很多的问题:

  1. 一般来说词汇表都很大,因此这种编码方式非常吃内存。
  2. 该向量只有一个位置是1,其余位置都是0,效率太低

1.2 Distributed representation

后面出现了方法Distributed representation,其通过训练,将每个词都映射到一个较短的词向量上来。
所有的这些词向量就构成了向量空间,进而可以用普通的统计学的方法来研究词与词之间的关系。

2 早期训练词向量

word2vec出现之前,我们用DNN进行训练词向量进而处理词与词之间的关系,有CBOW和Skip-Gram两种模型

2.1 CBOW

输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。下面举例说明输入和输出:
在这里插入图片描述
比如下面这段话,我们的上下文大小取值为4,特定的这个词是"Learning",也就是我们需要的输出词向量,上下文对应的词有8个,前后各4个,这8个词是我们模型的输入,对应8个神经元。
输出是所有词的softmax概率,有词汇表大小个神经元 ,最终找到概率最大的词对应的神经元即可。

2.2 Skip-Gram

Skip-Gram的思路和CBOW相反。输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量 。
还以上面为例,特定的这个词是"Learning",也就是我们需要的输入词向量,对应的Skip-Gram神经网络模型输入层有1个神经元。
输出是所有词的softmax概率,有词汇表大小个神经元 ,最终找到概率排前8的词对应的神经元即可。

2.3 存在的问题

我们的词汇表一般在百万级别以上,这意味着我们DNN的输出层需要进行softmax计算各个词的输出概率的的计算量很大,因此非常耗时。

3 霍夫曼树

word2vec还是使用CBOW和SKip-Gram模型,但是不再以DNN为基础,使用的是霍夫曼树。其用霍夫曼树来代替隐藏层和输出层的神经元,霍夫曼树的叶子节点起到输出层神经元的作用,叶子节点的个数即为词汇表的小大。 而内部节点则起到隐藏层神经元的作用。

3.1 建立霍夫曼树

**输入:**权值为(w1, w2, w3, w4, …, wn)的n个节点
**输出:**对应的霍夫曼树
流程:

  1. 将(w1, w2, w3, w4, …, wn)看做是有n棵树的森林,每个树仅有一个节点
  2. 在森林中选择根节点权值最小的两棵树进行合并,得到一个新的树,这两颗树分布作为新树的左右子树。新树的根节
    点权重为左右子树的根节点权重之和
  3. 将之前的根节点权值最小的两棵树从森林删除,并把新树加入森林。
  4. 重复步骤2和3直到森林里只有一棵树为止。
    举例说明:
    假设我们有(a,b,c,d,e,f)共6个节点,节点的权值分布是(20,4,8,6,16,3)。
    首先是最小的b和f合并,得到的新树根节点权重是7.此时森林里5棵树,根节点权重分别是20,8,6,16,7。此时根节点权
    重最小的6,7合并,得到新子树,依次类推,最终得到下面的霍夫曼树。
    在这里插入图片描述

3.2 霍夫曼树的优势

在word2vec中,约定编码方式和上面的例子相反,即约定左子树编码为1,右子树编码为0,同时约定左子树的权重不小
于右子树的权重。比如上图中f的编码为(1001)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/1005727
推荐阅读
  

闽ICP备14008679号