我想知道为什么在 word2vec 的 CBOW 和 skip-gram 模型中,分层 softmax 对不常用的词更好,而负采样对频繁的词更好。我已阅读https://code.google.com/p/word2vec/上的声明。
为什么hierarchical softmax对不常用词更好,而负采样对频繁词更好?
机器算法验证
自然语言
word2vec
词嵌入
软最大
2022-01-21 04:39:26
3个回答
我不是 word2vec 方面的专家,但在阅读Rong, X. (2014) 之后。word2vec 参数学习解释并根据我自己的 NN 经验,我将推理简化为:
- 分层 softmax 提高了训练效率,因为输出向量由网络层的树状遍历确定;给定的训练样本只需要评估/更新网络单元,而不是。这实质上扩展了权重以支持大量词汇——给定的单词与较少的神经元相关,反之亦然。
- 负采样是一种对训练数据进行采样的方法,类似于随机梯度下降,但关键是您要寻找负训练示例。直观地说,它基于可能期望一个单词但没有找到的采样位置进行训练,这比每次迭代训练整个语料库要快,并且对常见单词有意义。
从理论上讲,这两种方法似乎并不是排他性的,但无论如何,这似乎就是为什么它们更适合常用词和不常用词的原因。
我的理解是这是因为在构建类别层次结构时使用了霍夫曼编码。
分层softmax使用一棵sigmoid节点树而不是一个大softmax,霍夫曼编码确保属于任何sigmoid节点每一侧的数据点的分布是平衡的。因此,与使用大的 softmax 和负采样相比,它有助于消除对频繁类别的偏好。
分层softmax在整个词汇表上构建树,代表稀有词的叶子节点将不可避免地继承其祖先在树中的向量表示,这可能会受到语料库中其他频繁词的影响。这将有利于新语料库的增量训练。
负采样是在噪声对比估计的基础上发展起来的,对不在上下文中的词进行随机采样,以将观察到的数据与人为产生的随机噪声区分开来。
其它你可能感兴趣的问题