我正在训练一个模型,用于使用Rasa中的MITIE后端识别短的一到三个句子的文本字符串。该模型使用spaCy训练和工作,但它并不像我想的那么准确。关于spaCy的培训不会超过五分钟,但MITIE的培训在我的计算机上不间断地运行了几天,内存为16GB。所以我开始在具有255GB RAM和32个线程的Amazon EC2 r4.8xlarge实例上进行训练,但它似乎没有使用它可用的所有资源。
在Rasa配置文件中,我有__dict__
并设置num_threads: 32
,我认为这有助于使用所有可用的内存和计算能力。但是现在已经运行了几个小时,CPU使用率为3%(100%使用率,但仅限于一个线程),内存使用率保持在25GB左右,是可能的十分之一。
您是否有任何尝试加速MITIE培训的经验?我的模型有175个意图和总共6000个意图示例。在Rasa配置文件中有什么要调整的吗?
答案 0 :(得分:4)
所以我将尝试从几个角度解决这个问题。首先特别是从Rasa NLU角度the docs specifically say:
培训MITIE在具有多个意图的数据集上可能会非常慢。
并提供两种选择:
mite_sklearn
pipeline。鉴于您只使用了单个内核,我怀疑这会产生影响,但是来自Rasa的Alan建议将num_threads设置为内核数量的2-3倍。
如果你还没有评估这两种可能性,那么你可能应该这样做。
并非MITIE的所有方面都是多线程的。在MITIE GitHub页面上查看由其他人使用Rasa打开的this issue,并在此处引用:
MITIE的某些部分没有线程。您从线程中获益多少因任务和数据集而异。有时只有100%的CPU利用率发生且这是正常的。
特别是在相关的培训数据方面,我建议您查看最近在Rasa回购中引入的evaluate工具。它包含一个混淆矩阵,可能有助于识别故障区域。
这可能允许您切换到spaCy并使用6000个示例的一部分作为评估集,并在示例中添加回不能很好的意图。
我对6000个示例的来源,如果它们进行了平衡,以及每个意图的不同程度有更多疑问,您是否已经确认训练示例中的单词位于您正在使用的语料库中等等但是我认为以上就足够了。
对于RITA团队而言,MITIE将永远接受培训并不会让人感到惊讶,如果你能从另一个管道中获得良好的准确性,那将更令人惊讶。
作为最后的手段,我鼓励您在Rasa NLU GitHub页面上打开一个问题,并与团队合作以获得进一步的支持。或加入Gitter对话。