愚蠢的后退实现澄清

19
你好,我正在针对一个项目实现愚蠢回退(第2页,第5个方程式)平滑技术,我的问题是关于它的实现。这是一种在自然语言处理中使用的平滑算法,Good-Turing 算法是我认为最知名的类似算法之一。
该算法的简要描述如下: 在尝试查找句子中单词出现的概率时,它将首先查找该大小的n-gram上下文单词,并且如果没有该大小的n-gram,则会递归到(n-1)-gram并将其得分乘以0.4。递归停止于unigrams。
因此,如果我想要在“阳光明媚的一天”这个上下文中找到“day”的概率,它将首先查看三元组“a sunny day”是否存在于语料库中,如果不存在,则尝试同样地查找bigram“sunny day”,最后仅获取“day”的频率除以训练数据中的总字数(总单词数)。
我的问题是:每次减小n-gram的大小时,我是否要将分数乘以0.4?
在上面的例子中,如果我们找不到三元组或二元组,最终得分将是:0.4 * 0.4 * frequency(day) / corpus_size吗?还是说我只需要在最终级别乘一次,因此无论我需要做多少回退,我都只需将最终得分乘以0.4?

3
是的,每次你都要乘。 - Vsevolod Dyomkin
2个回答

21

基本上我理解你在上方的数学中描述的式子5。

所以针对"晴天"没有观察到的情况,您将计算S(“day”|“a sunny”)。 在找不到三元组“a sunny day”的情况下,您将采用式子5中的第二种情况,并将S(“day”|“a sunny”)估算为alpha*S(“day”|“sunny”)。

如果再次记录未观察到“晴天”,则将S(“day”|“sunny”)近似为alpha*S(“day”),即终端情况f(“day”)/N(观察到的单个字数)。

通过将alpha设为0.4,您将获得正好与您上面写出的相同的结果。

希望对您有所帮助。

- bms20


1
是的,每次转换到更低的n-gram模型时,由于未找到搜索短语,需要乘以0.4。根据公式建议,每次都要将0.4乘以“愚蠢回退”分数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接