nltk 在ngram语言模型上进行冗余操作会导致高性能影响,

fslejnso  于 5个月前  发布在  其他
关注(0)|答案(2)|浏览(47)

通用信息

模块:nltk.lm
类型: 性能
影响程度:

问题

大多数ngram语言模型执行冗余操作,导致高性能影响。

详细信息

受影响的模型

Lidstone , Laplace , KneserNeyInterpolated , WittenBellInterpolated

根本原因

重新计算 len(self.vocab)self.counts[len(context) + 1].N() 而不是仅计算一次

性能影响

100-1000倍的速度差异

背景

在我开发一个有噪声的信道模型时,我使用了NLTK的语言模型作为有噪声信道模型的语言模型。我观察到 MLE 和其他NLTK提供的语言模型之间性能的巨大差异。在更仔细地检查代码后,我确定了这种差异的根本原因是每次语言模型计算ngram的概率时都会进行一些不必要的重新计算。我做了一些最小的修改来解决性能问题,并在运行一些 tests 后观察到了100-1000倍的性能提升。

更新

我更新了 tests ,包括一个基于PR #2496 讨论的不同实现(仅修改 Vocabulary )。这个新实现的好处是只修改了较小的部分 lm 模块,缺点是它不能解决 WittenBellInterpolated 的性能问题。

xqnpmsa8

xqnpmsa81#

这个问题应该关闭吗?

imzjd6km

imzjd6km2#

#2555 修复了 LidstoneKneserNeyInterpolated 的案例,但还有 LaplaceWittenBellInterpolated

相关问题