NLP ——Hierarchical Softmax
word2vec为什么 不用现成的DNN模型,要继续优化出新方法呢?
-
问题:从隐藏层到输出的softmax层的计算量很大,因为要计算所有词的softmax概率,再去找概率最大的值。
-
word2vec对这个模型做了改进:
- 首先,对于从输入层到隐藏层的映射,没有采取神经网络的线性变换加**函数的方法,而是采用简单的对所有输入词向量求和并取平均的方法。
- 为了避免要计算所有词的softmax概率,word2vec采样了霍夫曼树来代替从隐藏层到输出softmax层的映射。
Huffman Tree(哈夫曼树)
哈夫曼树是一种带权路径长度最短的二叉树,也称为最优二叉树。下面用一幅图来说明:
图a中的数字表示权重,图a是常见的二叉树,图b就是图a转换过的最优二叉树。
图a中权重表示重要程度,可以看出,D是最重要的,那么有这样一个规则:最重要的放在最前面,由此构造了图b的哈夫曼树。
它们的带权路径长度分别为:图a:WPL = 5 * 2 + 7 * 2 + 2 * 2 +13 * 2 = 54
图b:WPL = 5 * 3 + 2 * 3 + 7 * 2 + 13 * 1 = 48
可见,图b的带权路径长度较小,我们可以证明图b就是哈夫曼树。
在这里的应用就是判断在哈夫曼树中走左子树还是右子树,其输出的值就是走某一条的概率。应用到word2vec中被作者称为Hierarchical Softmax:
和之前的神经网络语言模型相比,我们的霍夫曼树的所有内部节点就类似之前神经网络隐藏层的神经元,其中,根节点的词向量对应我们的投影后的词向量,而所有叶子节点就类似于之前神经网络softmax输出层的神经元,叶子节点的个数就是词汇表的大小。在霍夫曼树中,隐藏层到输出层的softmax映射不是一下子完成的,而是沿着霍夫曼树一步步完成的,因此这种softmax取名为"Hierarchical Softmax"。- 使用霍夫曼树有什么好处呢?首先,由于是二叉树,之前计算量为????,现在变成了????????????2????。第二,由于使用霍夫曼树是高频的词靠近树根,这样高频词需要更少的时间会被找到,这符合我们的贪心优化思想。
容易理解,被划分为左子树而成为负类的概率为????(−)=1−????(+)。在某一个内部节点,要判断是沿左子树还是右子树走的标准就是看????(−),????(+)谁的概率值大。而控制????(−),????(+)谁的概率值大的因素一个是当前节点的词向量,另一个是当前节点的模型参数????。
Skip-Gram:
对于从输入层到隐藏层(投影层),这一步比CBOW简单,由于只有一个词,所以,即????????就是词????对应的词向量。最后对2????个输出进行迭代更新。