2017-09-17 316 views
2

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

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

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

回答

3

所以我会尝试从多个角度来解决这个问题。从莎NLU角度the docs specifically say首先明确:

培训MITIE可以与数据集很慢多了几个意向。

,并提供两种选择:

  • 使用mite_sklearnpipeline这火车使用sklearn。
  • 使用MITIE fork,其中来自Rasa的Tom B已修改代码以在大多数情况下运行得更快。

假设你只得到使用单核我怀疑这会产生影响,但它已被从莎建议由阿兰说NUM_THREADS应设置为2-3倍的核心数量。

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


不是MITIE的所有方面都是多线程的。见this issue别人的MITIE GitHub的页面上使用莎开在这里引述:

MITIE的某些部分没有螺纹。从任务到数据集到数据集,线程的受益程度不尽相同。有时只有100%的CPU利用率发生,这是正常的。


具体有关我建议你看一下最近引入莎回购的evaluate工具训练数据。它包含一个可能有助于识别故障区域的混淆矩阵。

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


我对其中6000例是从哪里来的,如果他们是平衡的,每个意图如何不同的是,你有没有证实,从训练例子的话是你正在使用的语料库等更多的问题但我认为以上就足够了。

这将是毫不奇怪的莎团队MITIE正在采取永远去训练,这将是更多的是惊喜,你不能得到良好的精度了另一个管道的。

万不得已我会鼓励你拉沙NLU GitHub的页面上打开一个问题,并参与球队有进一步的支持。或加入Gitter对话。

+0

感谢您的答复,我很欣赏你介绍了新的评估工具。我其实目前正在使用'mitie_sklearn'管道和MITIE分叉。我发现'ner_mitie'在我的数据集上表现得比'ner_crf'好。 'ner_mitie'就是我在多线程中遇到的问题,并且正在减慢训练速度(这是'mitie_sklearn'管线的一部分)。这听起来像是结论是'ner_mitie'不支持多线程。 – hackerman

+0

拿着电话,你特意在谈论意图,现在你已经搬到了NER。当你说准确率低时,意图还是实体的准确性?当你说你有6000个例子是那些意图的例子或实体例子或两者?如果你有175个意图,你有多少个实体,每个实体有多少个训练样例。你能提供一些你有实体的例子吗? –

+0

对不起,我感到困惑。总共有大约900个实体示例,用于25个不同的实体。实体的一个例子是'broken_things',例如:“我的电视不工作”,其中与值电视机实体'broken_things'的电视栏目。 'ner_crf'模型比'ner_mitie'更频繁地测试“tv”。 – hackerman