【问题标题】:Speeding up model training using MITIE with Rasa使用 MITIE 和 Rasa 加速模型训练
【发布时间】:2017-09-17 01:45:42
【问题描述】:

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

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

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

【问题讨论】:

    标签: amazon-web-services amazon-ec2 nlp rasa-nlu


    【解决方案1】:

    所以我打算从几个角度来解决这个问题。首先具体从Rasa NLU角度the docs specifically say

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

    并提供两种选择:

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

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

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


    并非 MITIE 的所有方面都是多线程的。请参阅 MITIE GitHub 页面上其他人使用 Rasa 打开的 this issue 并在此处引用:

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


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

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


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

    对于 Rasa 团队来说,MITIE 花费很长时间来训练并不奇怪,更令人惊讶的是,您无法从另一个管道中获得良好的准确性。

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

    【讨论】:

    • 感谢您的回复,感谢您强调新的评估工具。实际上,我目前正在使用mitie_sklearn 管道和 MITIE 叉。我发现ner_mitie 在我的数据集上的性能优于ner_crfner_mitie 是我在多线程时遇到的问题,并且正在减慢训练速度(这是mitie_sklearn 管道的一部分)。听起来结论是ner_mitie不支持多线程。
    • 握住电话,你特别在谈论意图,现在你已经转移到 NER。当您说准确性低时,是意图准确性还是实体准确性?当您说您有 6000 个示例时,是那些意图示例或实体示例还是两者兼而有之?如果您有 175 个意图,您有多少个实体以及每个实体有多少个训练示例。您能否提供一些您拥有的实体示例?
    • 很抱歉给您带来了困惑。对于 25 个不同的实体,总共有大约 900 个实体示例。一个实体的示例是broken_things,例如:“我的电视不工作”,其中实体broken_things 的tv 部分的值为tv。 ner_crf 模型在测试中比 ner_mitie 更频繁地错过“tv”。 (为清楚起见,编辑评论)
    • 我已尽力回答最初的问题,即如何加快 MITIE。我认为我们应该在一个新问题中解决您的实体模型准确性问题。如果你创建一个新的并用 rasa-nlu 标记它,我会看到它。或在 GitHub 上创建问题。我有几个想法。
    猜你喜欢
    • 1970-01-01
    • 2017-11-29
    • 2018-09-22
    • 2020-09-23
    • 2022-11-08
    • 1970-01-01
    • 2017-08-19
    • 2018-10-24
    • 1970-01-01
    相关资源
    最近更新 更多