PyTorch实现Skip-Gram时subsampling公式返回值大于1是否合理
问题解答
这个实现完全符合原Skip-Gram论文的子采样设计,不存在逻辑错误,概率返回值大于1是刻意保留的特性,不需要强行限制在0-1区间。
公式逻辑说明
原Word2Vec论文中定义的高频词下采样保留概率公式就是你贴出的形式:
$$P(w_i) = \left( \sqrt{\frac{z(w_i)}{t}} +1 \right) \cdot \frac{t}{z(w_i)}$$
其中:
- $z(w_i)$是词$w_i$在语料中的词频占比
- $t$是人为设定的频率阈值,通常取1e-3到1e-5之间
这个公式的设计目标非常明确:只对频率超过阈值的高频词做降采样,频率低于阈值的低频词全部保留,对应计算结果的两种情况:
- 当$z(w_i) \leq t$时,计算得到的$P(w_i) \geq 1$。此时筛选条件恒成立,对应低频词100%被保留,不会被采样剔除。
- 当$z(w_i) > t$时,计算得到的$P(w_i) < 1$,且词频越高,保留概率越低,正好实现对无太多语义信息的高频停用词的降采样。
代码里的筛选逻辑如下:
random.random() < subsample_prob(w)
由于random.random()本身只会返回[0,1)区间的浮点数,当subsample_prob(w)返回值≥1时,条件永远为真,自动处理了低频词全保留的场景,不需要额外加min(1, p)的截断操作。
直观计算示例
以常用阈值t=1e-3为例:
- 某低频词z=0.0001(万分之一出现概率,低于阈值):代入公式得P≈13.16>1,每次遍历都会被保留
- 某高频词z=0.01(百分之一出现概率,高于阈值):代入公式得P≈0.416,只有约41.6%的概率被保留,符合降采样预期
内容的提问来源于stack exchange,提问作者Dogo-San
相关产品推荐
相关产品推荐

