rasa nlu ner_crf не извлекает никаких сущностей - PullRequest
0 голосов
/ 12 марта 2019

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

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.

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

1 Ответ

0 голосов
/ 19 июня 2019

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

...