17

大家好,我正在为我正在从事的项目实施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?

4

2 回答 2

18

基本上,我阅读了您在上面的数学中描述的方程式 5。

因此,对于没有观察到实例的“晴天”,您将计算 S("day" | "a Sunny")。没有找到三元组“晴天”,您将在等式 5 中采用案例二,并将 S("day" | "a Sunny") 估计为 alpha * S("day" | "sunny")。

如果再一次,您没有记录“晴天”,您会将 S("day" | "sunny") 近似为 alpha * S("day"),即最终情况 f("day") / N (the观察到的一元组数)。

通过将 alpha 设置为 0.4,您可以得到上面写的内容。

希望这可以帮助。

-bms20

于 2013-05-29T20:26:26.333 回答
1

是的,由于找不到搜索的短语,每次向下转换到较低的 n-gram 模型时,您都需要乘以 0.4。

根据公式,每次都将 0.4 乘以“愚蠢的退避”分数。

于 2017-10-02T12:53:05.093 回答