4

我正在使用 Rasa 中的 MITIE 后端训练一个用于识别短的、一到三个句子字符串的模型。该模型使用 spaCy 进行训练和工作,但它并不像我想要的那样准确。spaCy 的培训不超过五分钟,但 MITIE 的培训在我拥有 16GB RAM 的计算机上不间断地运行了几天。因此,我开始在具有 255GB RAM 和 32 个线程的 Amazon EC2 r4.8xlarge 实例上对其进行训练,但它似乎并未使用所有可用资源。

在 Rasa 配置文件中,我有num_threads: 32和 set max_training_processes: 1,我认为这将有助于使用所有可用的内存和计算能力。但现在它已经运行了几个小时,CPU 使用率处于 3%(100% 使用率,但仅在一个线程上),内存使用率保持在 25GB 左右,是可能的十分之一。

你们有没有尝试加速 MITIE 培训的经验?我的模型有 175 个意图和总共 6000 个意图示例。Rasa 配置文件中有什么需要调整的吗?

4

1 回答 1

5

所以我将尝试从几个角度来解决这个问题。首先是从 Rasa NLU 角度,文档具体说

在具有多个意图的数据集上训练 MITIE 可能会很慢。

并提供两种选择:

  • 使用使用 sklearn 进行训练的mite_sklearn 管道。
  • 使用来自 Rasa 的 Tom B 修改代码以在大多数情况下运行得更快的MITIE 分支。

鉴于您只使用了一个内核,我怀疑这会产生影响,但来自 Rasa 的 Alan 建议 num_threads 应设置为内核数的 2-3 倍。

如果您还没有评估这两种可能性,那么您可能应该这样做。


并非 MITIE 的所有方面都是多线程的。在 MITIE GitHub 页面上查看其他人使用 Rasa 打开的此问题,并在此处引用:

MITIE 的某些部分没有线程化。您从线程中受益的程度因任务和数据集而异。有时只会发生 100% 的 CPU 利用率,这很正常。


特别是在相关的训练数据方面,我建议您查看最近引入 Rasa存储库的评估工具。它包括一个混淆矩阵,可能有助于识别问题区域。

这可能允许您切换到 spaCy 并使用 6000 个示例中的一部分作为评估集,并将示例添加回表现不佳的意图。


我对 6000 个示例的来源有更多疑问,它们是否平衡,每个意图有多大不同,您是否验证过训练示例中的单词在您使用的语料库中,等等,但我认为以上内容就足够了开始。

Rasa 团队对 MITIE 花费很长时间进行训练并不感到意外,更令人惊讶的是,您无法从另一个管道中获得良好的准确性。

作为最后的手段,我鼓励您在 Rasa NLU GitHub 页面上打开一个问题,并与那里的团队联系以获得进一步的支持。或加入 Gitter 对话。

于 2017-09-17T02:26:33.293 回答