大家好,我正在为我正在从事的项目实施Stupid Backoff(第 2 页,等式 5)平滑技术,我对其实施有疑问。这是 NLP 中使用的平滑算法,我猜 Good-Turing 是最著名的类似算法。
该算法的简要描述是:当试图找到单词出现在句子中的概率时,它将首先在 n-gram 级别查找单词的上下文,如果没有该大小的 n-gram,它将递归到(n-1)-gram 并将其分数乘以 0.4。递归停止在一元组。
因此,如果我想在“晴天”的上下文中找到“天”的概率,它会首先查看语料库中是否存在三元组“晴天”,如果不存在,它会尝试与二元组“晴天”,最后它只会得到“天”的频率除以语料库大小(训练数据中的单词总数)。
我的问题是:每次减小 n-gram 的大小时,我是否将分数乘以 0.4?
因此,在上面的示例中,如果我们无法找到三元组或二元组,则最终分数将是:
0.4 * 0.4 * 频率(天)/corpus_size?
还是我只是在最终级别乘以一次,所以无论我必须做出多少退避,我都只是将最终分数乘以 0.4?