Spacy培训师使用多处理

时间:2020-02-28 13:47:48

标签: python nlp python-multiprocessing spacy ner

我正在尝试使用spacy训练自定义ner模型。目前,我有超过2k的培训记录,每个文本由100多个单词组成,每个记录至少包含2个以上的实体。我运行了50次迭代。 完全训练需要2个多小时。

有什么方法可以使用多重处理进行训练?会缩短培训时间吗?

1 个答案:

答案 0 :(得分:1)

答案简短...可能不是

由于以下几个原因,您不太可能使它正常工作:

  • 正在训练的网络正在执行迭代优化
    • 在不知道之前批次的结果的情况下,无法优化下一个批次
  • 只有一个网络
    • 任何并行培训都会创建不同的网络...
    • ...然后您将不得不以某种方式合并

长答案...您可以做很多事!

不过,您可以尝试以下几种操作:

  • 获得 GPU培训(如果您没有的话)
    • 这很痛苦,但是可以稍微加快训练时间
    • 但是它将大大降低CPU使用率
  • 尝试使用spaCy command line tools
    • JSON format很痛苦,但是...
    • 好处是您得到了专家编写的优化算法
    • 与手工制作的方法相比,它可以产生更快,更好的结果
  • 如果您拥有不同的实体,则可以培训多个专业网络
    • 这些训练的速度可能更快
    • 这些网络可以彼此并行完成(CPU允许)
  • 优化您的python 带有参数的实验
    • 速度和质量很大程度上取决于参数调整(批量大小,重复次数等)
    • 您的python实现提供了批处理(确保这是一流的)
  • 预处理示例
    • 空间NER提取仅需少量上下文即可工作
    • 您可以尝试对片段进行预处理以包含10或15个周围的单词,并查看您的时间和准确性如何变化

最终想法...您的网络何时“完成”?

我已经训练了包含许多实体的网络,其中数千个示例的时间比指定的时间长,而长和短则有时需要时间。

但是,在培训的前10%中捕获了90%的性能提升。

  • 您需要等待50批吗?
  • ...还是您正在寻找特定的性能水平?

如果您每X个批次监视一次质量,则当达到预定的质量水平时,您可以纾困。

您还可以保留以前训练过的旧网络,然后再进行新的培训以“补足”它们,从而达到从头开始同时进行无法达到的性能水平。

祝你好运!