大家好,我正在为我正在进行的项目实施Stupid Backoff(第2页,等式5)平滑技术,我对其实现有疑问。这是NLP中使用的平滑算法,Good-Turing是我猜最常见的类似算法。
该算法的简要说明如下: 当试图找到单词出现在句子中的概率时,它将首先在n-gram级别查找单词的上下文,如果没有该大小的n-gram,它将递归到(n-1)-gram并将其得分乘以0.4。递归停止在unigrams。
因此,如果我想在“阳光灿烂的日子”的背景下找到“天”的概率,它首先会查看语料库中是否存在三维“晴天”,如果不是,它会尝试与二重奏“阳光灿烂的日子”相同,最后只是将“日”的频率除以语料库大小(训练数据中的单词总数)。
我的问题是:每当我减少n-gram的大小时,我是否将得分乘以0.4?
因此,在上面的示例中,如果我们无法找到三元组或二元语法,那么最终得分将为:
0.4 * 0.4 *频率(天)/ corpus_size?
或者我只是在最后一级乘以一次,所以无论我需要做多少退避,我只是将最终得分乘以0.4?
答案 0 :(得分:12)
基本上,我在上面的数学中描述了等式5。
因此,对于没有观察到实例的“晴天”,您将计算S(“天”|“晴天”)。如果没有找到“阳光灿烂的日子”三元组,你可以在等式5中取第2个案例,并将S(“day”|“a sunny”)估计为alpha * S(“day”|“sunny”)。
如果再次没有记录“阳光灿烂的日子”,你会将S(“日”|“晴天”)视为alpha * S(“day”),这是终端案例f(“day”)/ N(观察到的unigrams数)。
通过将alpha设置为0.4,您可以得到上面写的内容。
希望这有帮助。
-bms20
答案 1 :(得分:0)
是的,每次因为没有找到搜索到的短语而转移到较低的n-gram模型时,你需要乘以0.4。
根据公式表明0.4乘以" Stupid Backoff"每次得分。