nlp - 愚蠢的退避实现说明

标签 nlp smoothing

大家好,我正在实现 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 * 频率(天)/语料库大小?

或者我只是在最终级别乘以一次,所以无论我必须进行多少退避,我都只将最终分数乘以 0.4?

最佳答案

基本上我读到了你在上面的数学中描述的等式 5。

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

如果再一次,您没有记录“晴天”的纪念日,您会将 S("day"| "sunny") 近似为 alpha * S("day"),这是终端情况 f("day")/N(观察到的 unigrams 的数量)。

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

希望这可以帮助。

-bms20

关于nlp - 愚蠢的退避实现说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16383194/

相关文章:

javascript - IE 在拖动时平滑 map 平移

css - 平滑而不仅仅是 Bootstrap 中的视差滚动

python - 高斯平滑python中的图像

machine-learning - 准备训练数据的通用框架?

parsing - 如何获得粗粒度的词性标签?

python - PyParsing:并非所有标记都传递给 setParseAction()

Gnuplot x(y) 平滑

r - R中范围数据的移动平均值

C++使用存储在字符串中的函数名称获取函数指针或评估函数

python - 使用 Python 检测文件中的语言更改