【问题标题】:Loading a trained Rasa NLU model takes more time加载经过训练的 Rasa NLU 模型需要更多时间
【发布时间】:2020-02-07 17:03:44
【问题描述】:

我已经使用以下配置训练了一个 RASA NLU 模型

language: en
pipeline:
- name: "pretrained_embeddings_convert"

此配置默认为组件列表,

language: "en"

pipeline:
- name: "SpacyNLP"
- name: "SpacyTokenizer"
- name: "SpacyFeaturizer"
- name: "RegexFeaturizer"
- name: "CRFEntityExtractor"
- name: "EntitySynonymMapper"
- name: "SklearnIntentClassifier"

我还尝试了所有其他现成的配置,例如 supervised_embeddings and pretrained_embeddings_spacy 和自定义配置。实例化 Trainer 对象需要 6~9 秒的加载时间。同样,当我尝试加载持久模型进行推理时,

interpreter = Interpreter.load('../path_to_trained_model')

再次加载它几乎需要 6~9 秒。无论如何,这可以减轻吗?还是我做错了什么?因为我想按需提供这些模型,这需要更快的加载时间。

【问题讨论】:

  • 在调试时我试图找出每个组件的加载时间。第一个组件只花了大约 6-9 秒,其余的只花了微秒。然后我用 ComponentBuilder 单独尝试了一个非耗时组件,这令人惊讶地花了大约 6-9 秒,所以我的猜测是还有其他原因导致了这种延迟。

标签: rasa-nlu rasa-core rasa


【解决方案1】:

supervised_embeddings(参见here)是加载时间最短的管道,因为它不加载任何预训练的词嵌入。

pretained_embeddings_convertpretrained_embeddings_spacy 都在启动时加载词嵌入(分别为 ConveRTspacy 嵌入),它们的大小非常大,因此需要一些时间来加载。

所以如果快速加载时间很重要,我建议使用supervised_embeddings。但是,一旦加载了模型,推理时间相对较快,因此您只需要等待那几秒钟。

PS:如果您还没有加入我们的社区forum,我们会经常回答此类问题

【讨论】:

  • 嘿@Akela 我在 Rasa 社区和 GitHub 上也问过同样的问题。感谢您花时间解释您的答案。正如您指出的其他方法,单词嵌入将在开始时加载。在这里,我使用 SpaCy 模型,单独加载只需约 0.7 秒,但在这里需要很多时间。但这也发生在 监督嵌入 方法中。我浏览了代码库,发现延迟发生在第一个组件加载时,与使用的组件和方法(空间/监督嵌入)无关。
  • 你的模型有多大?
  • 正如我已经提到的,监督嵌入也会发生这种情况。所以它不取决于我现在的模型大小。顺便说一句,我只使用默认的 spacy 模型。
  • 我的意思是你训练的 rasa 模型有多大(以 MB 为单位,保存时)?不是 spacy 模型
  • 嘿,Akela,它是 38 MB。
猜你喜欢
  • 1970-01-01
  • 2018-10-24
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-28
相关资源
最近更新 更多