实现Katz回退模型时N-gram平滑Zr=Nr/(0.5(t-q))的末位Nr处理问题
Katz回退模型中Zr序列末位值的处理规则
核心计算逻辑
Zr本质是对离散频率计数做密度平滑,把按r升序排列的所有非零Nr值作为数轴上的观测点,每个r值对应的邻域宽度由相邻两个非零r的中点位置确定:
- 对序列中间的r值,取左邻接的连续非零r值为q,右邻接的连续非零r值为t,邻域宽度为
0.5*(t - q),对应Zr = Nr / 邻域宽度 - 对序列首位的最小r值,没有前置的q值,默认取q=0,右邻接的连续非零r值为t,邻域宽度为
0.5*(t - 0);当相邻r的差为1时,邻域宽度恰好为1,计算得到的Zr和原始Nr值完全一致 - 对序列末位的最大r值,没有后续的t值,默认保持邻域宽度和前一段区间等长,也就是让当前r和前一个邻接r的间距等于当前r到虚拟t值的间距,按原公式计算即可,不需要引入额外的外部假设
关于末位值是否可以直接排除
直接排除这些末位值,通常不会影响最终模型效果:
- Katz回退流程中,用Zr做log-log线性回归拟合时,拟合范围仅覆盖r从1到截断点k(通常k取3~10),也就是仅对中低频率的r值做平滑处理,高于k的高频词直接使用原始观测频率计算概率
- 示例数据中r=400、r=1918这类远大于常规截断点k的末位值,本身就不属于回归拟合的输入范围,即使完全不计算其Zr值,也不会对后续的回退权重计算、概率估计产生任何影响
- 不建议直接排除的场景:如果任务需要对全范围的r值做无截断的密度估计,就需要按前面的等宽邻域规则补全末位值的t参数,不能直接丢弃。
参考资料未提及相关逻辑的原因
多数公开参考内容没提末位值的处理方法,是因为默认在计算Zr的时候,就已经把远大于截断点k的高r值剔除出计算流程了,自然不会遇到“没有后续t值”的问题。
内容的提问来源于stack exchange,提问作者Eric Ihli
相关产品推荐
相关产品推荐

