为什么hierarchical softmax对不常用词更好,而负采样对频繁词更好?

机器算法验证 自然语言 word2vec 词嵌入 软最大
2022-01-21 04:39:26

我想知道为什么在 word2vec 的 CBOW 和 skip-gram 模型中,分层 softmax 对不常用的词更好,而负采样对频繁的词更好。我已阅读https://code.google.com/p/word2vec/上的声明。

3个回答

我不是 word2vec 方面的专家,但在阅读Rong, X. (2014) 之后。word2vec 参数学习解释并根据我自己的 NN 经验,我将推理简化为:

  • 分层 softmax 提高了训练效率,因为输出向量由网络层的树状遍历确定;给定的训练样本只需要评估/更新网络单元,而不是这实质上扩展了权重以支持大量词汇——给定的单词与较少的神经元相关,反之亦然。O(log(N))O(N)
  • 负采样是一种对训练数据进行采样的方法,类似于随机梯度下降,但关键是您要寻找负训练示例。直观地说,它基于可能期望一个单词但没有找到的采样位置进行训练,这比每次迭代训练整个语料库要快,并且对常见单词有意义。

从理论上讲,这两种方法似乎并不是排他性的,但无论如何,这似乎就是为什么它们更适合常用词和不常用词的原因。

我的理解是这是因为在构建类别层次结构时使用了霍夫曼编码。

分层softmax使用一棵sigmoid节点树而不是一个大softmax,霍夫曼编码确保属于任何sigmoid节点每一侧的数据点的分布是平衡的。因此,与使用大的 softmax 和负采样相比,它有助于消除对频繁类别的偏好。

分层softmax在整个词汇表上构建树,代表稀有词的叶子节点将不可避免地继承其祖先在树中的向量表示,这可能会受到语料库中其他频繁词的影响。这将有利于新语料库的增量训练。

负采样是在噪声对比估计的基础上发展起来的,对不在上下文中的词进行随机采样,以将观察到的数据与人为产生的随机噪声区分开来。