使用来自 Python 的 Rasa NLU 时未找到元数据

Metadata not found when using Rasa NLU from Python

我正在尝试按以下方式使用 Python 3.7Rasa 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.jsonnlu 文件夹下。
然后您可以使用实际模型目录的完整路径。

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.gzTrainer 的结果可以被 Interpreter 使用。