你好,我正在针对一个项目实现愚蠢回退(第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?
该算法的简要描述如下: 在尝试查找句子中单词出现的概率时,它将首先查找该大小的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?