rasa nlu ner_crf не извлекает никаких сущностей

Я успешно получил свой код для определения правильного намерения, но никакие объекты не появляются, хотя я предоставил некоторые объекты в своих обучающих данных.

data.json:

    { “common_examples”: [ 

    { “text”:“Hello”, 
      “intent”:“greeting”, 
      “entities”:[] }, 

    { “text”:“Hi”, 
      “intent”:“greeting”, 
      “entities”:[] }, 

    { “text”:“I want a recipe for my lunch”, 
      “intent”:“get_recipe”, 
      “entities”:[ 
         { “start”:22, 
           “end”: 28, 
           “value”: “lunch”, 
           “entity”: “mealtime” } 
      ] 
     }, 

    { “text”:“Can you give me a recipe for dinner tonight?”, 
      “intent”:“get_recipe”, 
      “entities”:[ 
          { “start”:29, 
            “end”:35, 
            “value”: “dinner”, 
            “entity”: “mealtime” } 
       ] 
     }, 

    { “text”:“I don’t know what to have for lunch”, 
      “intent”:“get_recipe”, 
      “entities”:[ 
          { “start”:31, 
            “end”: 35, 
            “value”: “lunch”, 
            “entity”: “mealtime” } 
       ] 
     } 
},

}
],
    "regex_features": [],
    "entity_synonyms":[]
  }

}

Это всего лишь отрывок. Всего я создал 15 примеров для цели get_recipe. Мне просто нужно, чтобы выбрать «время приема пищи» из сообщения, отправленного боту.

Мой config.yml выглядит следующим образом:

language: “en”

pipeline:

-name: “nlp_spacy”
-name: “tokenizer_spacy”
-name: “intent_entity_featurizer_regex”
-name: “intent_featurizer_spacy”
-name: “ner_crf”
-name: “ner_synonyms”
-name: “intent_featurizer_count_vectors”
-name: “intent_classifier_tensorflow_embedding”

и это код, который я использую для обучения бота:

from rasa_nlu.training_data import load_data 
from rasa_nlu.model import Trainer 
from rasa_nlu import config 
from rasa_nlu.model import Interpreter

def train_bot(data_json,config_file,model_dir): 
    training_data = load_data(data_json) 
    trainer = Trainer(config.load(config_file)) 
    trainer.train(training_data) 
    model_directory=trainer.persist(model_dir,fixed_model_name=‘vegabot’)

Это нормально.

И код, который я запускаю, чтобы предсказать намерение:

def predict_intent(text): 
    interpreter = Interpreter.load(‘models/nlu/default/vegabot’) 
    print(interpreter.parse(text))

Что дает результат:

{‘intent’: {‘name’: ‘get_recipe’, ‘confidence’: 0.9701309204101562}, ‘entities’: [], ‘intent_ranking’: [{‘name’: ‘get_recipe’, ‘confidence’: 0.9701309204101562}, {‘name’: ‘greeting’, ‘confidence’: 0.03588612377643585}], ‘text’: ‘can you find me a recipe for dinner’}

Как видите, намерение правильное, но объекты пустые [], и я не могу понять, почему. Кажется, я не получаю никаких ошибок. Все работает нормально, кроме этого!

Я также провел оценку и получил:

- intent examples: 12 (2 distinct intents) 
- Found intents: ‘greeting’, ‘get_recipe’ 
- entity examples: 10 (1 distinct entities) 
- found entities: ‘mealtime’ which all looks fine.

Итак, очевидно, что он знает, что нужно высматривать объект приема пищи, но почему он не берет его из моих тестовых сообщений?

например Мне нужен рецепт на обед. Можете ли вы дать мне рецепт на время ужина? так далее

Я использую RASA NLU версии 0.14.

Любая помощь будет принята с благодарностью. Спасибо.


person Francesca Z    schedule 12.03.2019    source источник
comment
ner_crf извлекает объекты на основе позиционных подсказок. вы можете попробовать добавить больше примеров аналогичного типа. например > I don’t know what to have for lunch. > I do not know what to have for lunch. > I don't really know what to have for lunch дайте мне знать, как это происходит.   -  person mvs    schedule 13.03.2019
comment
@msv Я добавил больше похожих примеров, и, похоже, это сработало, спасибо!   -  person Francesca Z    schedule 13.03.2019
comment
рад что сработало! пожалуйста, не забудьте продвигать правильные ответы на stackoverflow :)   -  person mvs    schedule 15.03.2019


Ответы (1)


Моделям машинного обучения в Rasa требуется немного данных для обучения. Как правильно предложено в комментариях, вы должны дать условному случайному полю пару примеров, чтобы оно действительно могло быть обобщено. Также убедитесь, что вы меняете предложения вокруг него, иначе crf не будет распространяться на другие контексты.

person Tobias    schedule 19.06.2019