使用来自 Python 的 Rasa NLU 时未找到元数据
Metadata not found when using Rasa NLU from Python
我正在尝试按以下方式使用 Python 3.7
和 Rasa 1.1.4
加载模型:
from rasa.nlu.model import Interpreter
interpreter = Interpreter.load("./models/generic")
出现以下错误:
FileNotFoundError:
[Errno 2] No such file or directory: './models/generic/metadata.json'
已使用以下命令训练模型:
rasa train nlu --config config.yml
--nlu data/generic.md
--out models
--fixed-model-name generic/model
仅生成以下文件,未生成元数据文件:
models/generic/model.tar.gz
最好的一步是什么?生成元数据文件,以不同方式加载模型?
您可以解压 model.tar.gz 以公开 metadata.json 和其余模型文件。
使用从 rasa init
生成的示例模型,如果我解压它:
$ ls models
20190622-213707.tar.gz
$ cd models
$ mkdir 20190622-213707
$ tar xvf 20190622-213707.tar.gz -C 20190622-213707
$ tree 20190622-213707
我会得到:
20190622-213707
├── core
│ ├── ....
├── fingerprint.json
└── nlu
├── checkpoint
├── component_1_RegexFeaturizer.pkl
├── component_4_CountVectorsFeaturizer.pkl
├── component_5_EmbeddingIntentClassifier.ckpt.data-00000-of-00001
├── component_5_EmbeddingIntentClassifier.ckpt.index
├── component_5_EmbeddingIntentClassifier.ckpt.meta
├── component_5_EmbeddingIntentClassifier_encoded_all_intents.pkl
├── component_5_EmbeddingIntentClassifier_inv_intent_dict.pkl
├── metadata.json
└── training_data.json
...显示 metadata.json 在 nlu 文件夹下。
然后您可以使用实际模型目录的完整路径。
interpreter = Interpreter.load("./models/20190622-213707/nlu/")
print(interpreter.parse("hello"))
# {'intent': {'name': 'greet', 'confidence': 0.9470939636230469},
# 'entities': [],
# 'intent_ranking': [{'name': 'greet', 'confidence': 0.9470939636230469},
# {'name': 'deny', 'confidence': 0.17162932455539703},
# {'name': 'affirm', 'confidence': 0.05398404598236084},
# {'name': 'mood_great', 'confidence': 0.0},
# {'name': 'goodbye', 'confidence': 0.0},
# {'name': 'mood_unhappy', 'confidence': 0.0}],
# 'text': 'hello'}
我不太熟悉 rasa
,但您可能会混合使用命令行和 "manual" Python API 来编写您自己的 trainer/interpreter 应用程序。
查看 rasa.nlu.model
中的 Trainer
class。它有一个 persist
方法可以将你的模型保存到一个目录,但不是 tar.gz。 Trainer
的结果可以被 Interpreter
使用。
我正在尝试按以下方式使用 Python 3.7
和 Rasa 1.1.4
加载模型:
from rasa.nlu.model import Interpreter
interpreter = Interpreter.load("./models/generic")
出现以下错误:
FileNotFoundError:
[Errno 2] No such file or directory: './models/generic/metadata.json'
已使用以下命令训练模型:
rasa train nlu --config config.yml
--nlu data/generic.md
--out models
--fixed-model-name generic/model
仅生成以下文件,未生成元数据文件:
models/generic/model.tar.gz
最好的一步是什么?生成元数据文件,以不同方式加载模型?
您可以解压 model.tar.gz 以公开 metadata.json 和其余模型文件。
使用从 rasa init
生成的示例模型,如果我解压它:
$ ls models
20190622-213707.tar.gz
$ cd models
$ mkdir 20190622-213707
$ tar xvf 20190622-213707.tar.gz -C 20190622-213707
$ tree 20190622-213707
我会得到:
20190622-213707
├── core
│ ├── ....
├── fingerprint.json
└── nlu
├── checkpoint
├── component_1_RegexFeaturizer.pkl
├── component_4_CountVectorsFeaturizer.pkl
├── component_5_EmbeddingIntentClassifier.ckpt.data-00000-of-00001
├── component_5_EmbeddingIntentClassifier.ckpt.index
├── component_5_EmbeddingIntentClassifier.ckpt.meta
├── component_5_EmbeddingIntentClassifier_encoded_all_intents.pkl
├── component_5_EmbeddingIntentClassifier_inv_intent_dict.pkl
├── metadata.json
└── training_data.json
...显示 metadata.json 在 nlu 文件夹下。
然后您可以使用实际模型目录的完整路径。
interpreter = Interpreter.load("./models/20190622-213707/nlu/")
print(interpreter.parse("hello"))
# {'intent': {'name': 'greet', 'confidence': 0.9470939636230469},
# 'entities': [],
# 'intent_ranking': [{'name': 'greet', 'confidence': 0.9470939636230469},
# {'name': 'deny', 'confidence': 0.17162932455539703},
# {'name': 'affirm', 'confidence': 0.05398404598236084},
# {'name': 'mood_great', 'confidence': 0.0},
# {'name': 'goodbye', 'confidence': 0.0},
# {'name': 'mood_unhappy', 'confidence': 0.0}],
# 'text': 'hello'}
我不太熟悉 rasa
,但您可能会混合使用命令行和 "manual" Python API 来编写您自己的 trainer/interpreter 应用程序。
查看 rasa.nlu.model
中的 Trainer
class。它有一个 persist
方法可以将你的模型保存到一个目录,但不是 tar.gz。 Trainer
的结果可以被 Interpreter
使用。