核心要点
用 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 个词的求和。
🔗 相似问题
同一考点的不同问法,面试官可能换着问,一起刷更稳
没找到想看的面试题?把你想看的告诉我们 →
延伸学习
按主题分类的相关资源,便于系统复习