Не удается извлечь сущность для сингальского языка - PullRequest
0 голосов
/ 06 мая 2019

Попытка разработки чат-бота для сингальского языка с помощью RASA NLU.

Мой config.yml

pipeline:
- name: "WhitespaceTokenizer"
- name: "CRFEntityExtractor"
- name: "EntitySynonymMapper"
- name: "CountVectorsFeaturizer"
- name: "EmbeddingIntentClassifier"

И в data.json я добавил пример данных, как показано ниже. Когда я тренирую nlu-модель и пытаюсь использовать образец ввода для извлечения «සිංහලෙන්» как среднего, он выводит только намерение и значение сущности, а не сущность. Что я делаю не так?

{
          "text": "සිංහලෙන් දේශන පවත්වන්නේ නැද්ද?",
          "intent": "ask_medium",
          "entities": [{
                "start":0,
                "end":8,
                "value": "සිංහලෙන්",
                "entity": "medium"
          }]
        },
        {
          "text": "සිංහලෙන් lectures කරන්නේ නැද්ද?",
          "intent": "ask_medium",
          "entities": [{
                "start":0,
                "end":8,
                "value": "සිංහලෙන්",
                "entity": "medium"
          }]
        }

Ответ, который я получаю при тестировании модели nlu,

{'intent': 
{'name': 'ask_langmedium', 'confidence': 0.9747527837753296}, 'entities': 
[{'start': 10, 
'end': 18, 
'value': 'සිංහලෙන්',
'entity': '-', 
'confidence': 0.5970129041418675,
'extractor': 'CRFEntityExtractor'}], 
'intent_ranking': [
{'name': 'ask_langmedium', 'confidence': 0.9747527837753296}, 
{'name': 'ask_langmedium_request_possibility', 'confidence': 
0.07433460652828217}],
'text': 'උගන්නන්නේ සිංහලෙන් ද ?'}

1 Ответ

1 голос
/ 06 мая 2019

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

Enter a message: උගන්නන්නේ සිංහලෙන් ද?
{
  "intent": {
    "name": "ask_medium",
    "confidence": 0.9638749361038208
  },
  "entities": [
    {
      "start": 10,
      "end": 18,
      "value": "\u0dc3\u0dd2\u0d82\u0dc4\u0dbd\u0dd9\u0db1\u0dca",
      "entity": "medium",
      "confidence": 0.7177257810884379,
      "extractor": "CRFEntityExtractor"
    }
  ]
}

Это мой полный код

DataSet.json

{
    "rasa_nlu_data": {
        "common_examples": [
            {
                "text": "හෙලෝ",
                "intent": "hello",
                "entities": []
            },
            {
                "text": "සිංහලෙන් දේශන පවත්වන්නේ නැද්ද?",
                "intent": "ask_medium",
                "entities": [{
                      "start":0,
                      "end":8,
                      "value": "සිංහලෙන්",
                      "entity": "medium"
                }]
            },
            {
                "text": "සිංහලෙන් lectures කරන්නේ නැද්ද?",
                "intent": "ask_medium",
                "entities": [{
                      "start":0,
                      "end":8,
                      "value": "සිංහලෙන්",
                      "entity": "medium"
                }]
            }
        ],
        "regex_features" : [],
        "lookup_tables"  : [],
        "entity_synonyms": []
    }
}

nlu_config.yml

pipeline: "supervised_embeddings"

Команда обучения

python -m rasa_nlu.train -c ./config/nlu_config.yml --data ./data/sh_data.json -o models --fixed_model_name nlu --project current --verbose

& testing.py

from rasa_nlu.model import Interpreter
import json

interpreter = Interpreter.load('./models/current/nlu')


def predict_intent(text):
    results = interpreter.parse(text)
    print(json.dumps({
        "intent": results["intent"],
        "entities": results["entities"]
    }, indent=2))


keep_asking = True
while(keep_asking):
    text = input('Enter a message: ')
    if (text == 'exit'):
        keep_asking = False
        break
    else:
        predict_intent(text)
...