核心要点

  • 用 Huffman 二叉树组织词表,叶子=词,高频词路径更短

  • 预测一个词 = 沿根到该叶子的路径做若干次二分类

  • 该词的概率 = 路径上各内部节点 sigmoid 输出之积

  • 复杂度从全词表 softmax 的 O(V) 降到 O(logV)

标准回答

层次 Softmax(Hierarchical Softmax) 是 Word2Vec 中替代全词表 softmax 的一种加速方法,用一棵二叉树把「在 V 个词上归一化」拆解成 log(V) 次二分类。

树的构造

  • 用词频构建一棵 Huffman 树:每个词表中的词是一个叶子节点高频词靠近根、路径更短,低频词路径更长;
  • 每个内部(非叶)节点带一个可训练向量,相当于一个二分类器。

预测流程

  • 要计算某个目标词的概率,就从根节点走到它对应的叶子
  • 路径上每经过一个内部节点,就用「中心词/上下文向量与该节点向量的内积过 sigmoid」做一次二分类,决定向左子树还是右子树走;
  • 目标词的概率 = 路径上每一步选择正确方向的 sigmoid 概率之积。由于每个内部节点的左右概率和为 1,整棵树所有叶子的概率天然归一化为 1,无需对全词表求和。

复杂度优势
原始 softmax 每次预测要对全词表 V 个词算分母,复杂度 O(V);层次 softmax 只需走一条长约 log(V) 的路径,复杂度降为 O(logV)。Huffman 编码让高频词路径更短,使平均计算量进一步降低。

优点

  • 显著加速,高频词因路径短而计算更快
  • 概率天然归一化,无需负采样即可高效训练。

缺点

  • 低频词 / 未登录词不友好:低频词路径长、被更新次数少,表示质量相对差;
  • 树结构固定,构建后不随训练调整;新词需重建树。

常见误区

⚠️ 常见踩坑

误以为层次 Softmax 与负采样是同一类方法或可叠加使用。它们是两条互斥的加速路线:Word2Vec 训练时通常二选一。另一个误区是认为层次 Softmax 对所有词都更快——它对高频词(路径短)确实更快,但低频词路径长,更新机会少,反而是它的短板。还要注意内部节点向量与词的输入向量是两套不同参数。

追问

追问 1为什么用 Huffman 树而不是普通平衡二叉树?

Huffman 树按词频构建,使高频词的路径最短、低频词路径最长,从而最小化「平均路径长度(加权)」。因为高频词出现次数多,缩短其路径能最大幅度降低整体期望计算量;平衡树对所有词一视同仁,平均效率不如按频率加权的 Huffman 树。

追问 2层次 Softmax 为什么对低频词表示较差?

低频词在 Huffman 树中路径长,且只在它出现时才更新沿途内部节点;出现次数本就少,导致这些节点和该词得到的梯度更新机会很少,向量训练不充分。相比之下负采样每步都会更新少量参数,对低频词的覆盖相对更均衡。

追问 3层次 Softmax 的概率为何天然归一化,无需对全词表求和?

每个内部节点是一个二分类器,向左和向右的概率之和为 1。从根到任一叶子的路径概率是各步概率之积,而所有叶子概率之和等于从根出发所有路径概率之和,由概率守恒恰为 1。因此整棵树的叶子(即所有词)概率自动归一化,省去了 softmax 分母对 V 个词的求和。

🔗 相似问题

同一考点的不同问法,面试官可能换着问,一起刷更稳

没找到想看的面试题?把你想看的告诉我们 →

延伸学习

按主题分类的相关资源,便于系统复习