通用信息
模块: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
的性能问题。
2条答案
按热度按时间xqnpmsa81#
这个问题应该关闭吗?
imzjd6km2#
#2555 修复了
Lidstone
和KneserNeyInterpolated
的案例,但还有Laplace
和WittenBellInterpolated
。