2017-09-04 1 views
0

Ich versuche, die Beispiel-Restaurant-Suche zu replizieren. Ich benutze es auf Windows 64/Python 3.6 Anaconda 4.4. Mein config.json sieht so aus.nicht vorhersagbar mit rasa_nlu in Python

{ 
     "name": null, 
     "pipeline": ["nlp_spacy", "tokenizer_spacy", "intent_entity_featurizer_regex", "intent_featurizer_spacy", "ner_crf", "ner_synonyms", "intent_classifier_sklearn"], 
     "language": "en", 
     "num_threads": 4, 
     "path": "D:/rasa-nlu-working/models", 
     "response_log": "logs", 
     "config": "config.json", 
     "log_level": "INFO", 
     "port": 5000, 
     "data": null, 
     "emulate": null, 
     "log_file": null, 
     "mitie_file": "data/total_word_feature_extractor.dat", 
     "spacy_model_name": null, 
     "server_model_dirs": null, 
     "token": null, 
     "max_number_of_ngrams": 7, 
     "duckling_dimensions": ["time", "number", "money","ordinal","duration"], 
     "entity_crf_BILOU_flag": true, 
     "entity_crf_features": [ 
     ["low", "title", "upper", "pos", "pos2"], 
     ["bias", "low", "word3", "word2", "upper", "title", "digit", "pos", "pos2", "pattern"], 
     ["low", "title", "upper", "pos", "pos2"]] 
    } 

Ich versuche zu trainieren und vorherzusagen mit Jupyter Notebook. Der Zug fährt reibungslos weiter. Wie erwartet, werden Modelle erstellt. Aber wenn ich versuche, den folgenden Code vorherzusagen.

from rasa_nlu.model import Metadata, Interpreter 

# where `model_directory points to the folder the model is persisted in 
interpreter = Interpreter.load('D:/rasa-nlu-working/models/model_20170904-132507', RasaNLUConfig("D:/rasa-nlu-working/config.json")) 

Ich erhalte den folgenden Fehler.

--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
<ipython-input-2-9f85d157325d> in <module>() 
     4 
     5 # where `model_directory points to the folder the model is persisted in 
----> 6 interpreter = Interpreter.load('D:/rasa-nlu-working/models/model_20170904-132507', RasaNLUConfig("D:/rasa-nlu-working/config.json")) 

D:\Anaconda3\lib\site-packages\rasa_nlu\model.py in load(model_metadata, config, component_builder, skip_valdation) 
    206   # Before instantiating the component classes, lets check if all required packages are available 
    207   if not skip_valdation: 
--> 208    components.validate_requirements(model_metadata.pipeline) 
    209 
    210   for component_name in model_metadata.pipeline: 

AttributeError: 'str' object has no attribute 'pipeline' 

Aber die gleiche Konfiguration funktioniert gut, wenn ich es im HTTP-Server-Modus ausführen. Bitte helfen Sie mir bei der Lösung des Problems.

+0

Ist 'D:/rasa-nlu-working/models/model_20170904-132507' ein Verzeichnis oder eine Datei? Es sollte Verzeichnis sein –

+0

Es ist ein Verzeichnis. Ich habe sechs Dateien nämlich crf_model.pkl, entity_synonyms.json, intent_classifier.pkl, metadata.json, regex_featurizer.json und training_data.json. Dieser Unterordner wurde generiert, nachdem ich mit Beispieldaten trainiert habe. – Subramanian

+0

Können Sie den Befehl posten, den Sie zum Trainieren verwenden? Kannst du auch den Inhalt von metadata.json veröffentlichen? –

Antwort

1

Ich habe in den Kommentaren um einige Klarstellungen gebeten, dachte aber, ich würde trotzdem anfangen, eine Antwort zu schreiben.

Der Fehler, den Sie gepostet haben, ist nicht wirklich ein Problem mit Ihrer Konfigurationsdatei. Es sieht aus wie metadata.json wird nicht korrekt geladen und/oder analysiert. metadata.json ist eine Art Momentaufnahme der Konfigurationsdatei zum Zeitpunkt der Modellschulung.

Hier ist die Reihenfolge der Operationen:

  1. Wann immer rufen Sie Interpreter.load eines der ersten Dinge, die die metadata.json Datei wird geladen erledigt wird. See here.
  2. Weiter über in Metadata.load versuchen wir, diese Datei zu laden und zu analysieren. See here
  3. Zurück in Interpreter versuchen wir, die Pipeline aus den Metadaten zu erhalten, die zurückgegeben wurde. See here.

Das ist, wo Ihr Fehler passiert. Aus irgendeinem Grund wird die Datei metadata.json ohne Fehler geladen, aber nicht richtig analysiert.

Einige mögliche Fehler:

  • metadata.json ist JSON falsch formatiert. nicht sicher, wie dies passieren würde, aber können Sie die metadata.json zur Verfügung stellen, damit wir es überprüfen können.
  • Es gibt ein Windows-Codierungsproblem, das nicht korrekt behandelt wird.

Auch Sie erwähnen speziell die http-API. Kann die http-API dieses Modell laden und zum parsen verwenden? Sie sollten in der Lage sein, das unten stehende zu rufen, um es zu testen, nachdem Sie den Server gestartet haben.

curl -XPOST localhost:5000/parse -d '{"q":"hello there", "model": "model_20170904-132507"}' 

Wenn der HTTP-Server geladen werden können/analysieren sie dann wissen wir, dass es speziell wahrscheinlich etwas in Ihrem Python-Code.

Umgekehrt, wenn das funktioniert, dann sollten Sie versuchen, die Daten mit der http-API zu trainieren und sehen, was beim metadata.json-Dateitraining über http api vs. Ihrer Python-Implementierung anders ist.

Weitere zu kommen, wie Sie mehr Informationen zur Verfügung stellen.

+0

Ich benutze 0.9 .2 Version. Probleme beim Klonen der Github-Version aufgrund von Sicherheitseinschränkungen Ich werde zu dir zurückkommen, sobald ich vorbei bin. – Subramanian

+0

Ich werde meine metadata.json als Antwort hinzufügen. Da ist es riesig und kann nicht als Kommentar eingefügt werden. Ich sehe gut aus für JSON. – Subramanian

+0

@Subramanian haben Sie die Lösung für dieses Problem finden, auch vor dem gleichen Problem –

0

Ich hatte das gleiche Problem bei der Verwendung von Rasa aus Python, und stolperte über diesen Thread beim googlen den gleichen Fehler, aber wie oben von @Caleb Keller erwähnt, das Ändern der rasa-Version von 0.9.0 auf 0.10.0a5 löste das Problem. Danke für die Hilfe.