Создать сущности и обучающие фразы для значений в функциях для действий Google - PullRequest
0 голосов
/ 27 сентября 2018

Я создал игру викторины, используя SDK, она принимает пользовательский ввод и затем сравнивает его со значением в моей БД, чтобы определить, правильно ли оно.

В данный момент я просто передаю необработанную входную переменную в моем разговоре, это означает, что она регулярно завершается сбоем, когда слышит пользователя, поскольку точная строка, которая была выбрана, редко == к значению вDB.

В частности, я бы хотел, чтобы он только подбирал числа и, например, понимал, что он должен извлечь «10» из речевого ввода «мой ответ - 10».

  {
  "actions": [
    {
      "description": "Default Welcome Intent",
      "name": "MAIN",
      "fulfillment": {
        "conversationName": "welcome"
      },
      "intent": {
        "name": "actions.intent.MAIN"
      }
    },
    {
      "description": "response",
      "name": "Raw input",
      "fulfillment": {
        "conversationName": "rawInput"
      },
      "intent": {
        "name": "raw.input",
        "parameters": [{
          "name": "number",
          "type": "org.schema.type.Number"
        }],
        "trigger": {
          "queryPatterns":[
            "$org.schema.type.Number:number is the answer",
            "$org.schema.type.Number:number",
            "My answer is $org.schema.type.Number:number"
          ]
        }
      }
    }
  ],
  "conversations": {
    "welcome": {
      "name": "welcome",
      "url": "https://us-central1-triviagame",
      "fulfillmentApiVersion": 2
    },
    "rawInput": {
      "name": "rawInput",
      "url": "https://us-central1-triviagame",
      "fulfillmentApiVersion": 2
    }
  }
}

app.intent('actions.intent.MAIN', (conv) => {
  conv.data.answers = answersArr;
  conv.data.questions = questionsArr;
  conv.data.counter = answersArr.length;
  var thisQuestion = conv.data.questions;
  conv.ask((conv.data.answers)[0]));
});

app.intent('raw.input', (conv, input) => {

if(input == ((conv.data.answers)[0])){


       conv.ask(nextQuestion());
}


app.intent('actions.intent.TEXT', (conv,input) => {
 //verifying if input and db value are equal
// at the moment input is equal to 'my number is 10' (for example) instead of '10'

//therefore the string verification never works
conv.ask(nextQuestion());

});

В предыдущем проекте я использовал пользовательский интерфейс диалогового потока и использовал этот числовой параметр @ system.entities вместе с созданием некоторых обучающих фраз, чтобы он понимал различные речевые шаблоны.

Этот параметр input, который я передаю через мой conv, является только необработанной строкой, в которой я бы хотел, чтобы она была отфильтрована с использованием какой-либо схемы сущности.

Как мнесоздать тот же эффект обучения фраз / сущностей, используя файл JSON?

1 Ответ

0 голосов
/ 28 сентября 2018

Вы не можете сделать это, используя только Action SDK.Вам нужна система обработки естественного языка (например, Dialogflow), чтобы справиться с этим.Action SDK сам по себе будет выполнять преобразование речи в текст и будет использовать конфигурацию actions.json, чтобы помочь понять, как интерпретировать текст.Но он будет только возвращать весь текст от пользователя - он не будет пытаться определить, как он может соответствовать Намерению, или какие параметры могут существовать в нем.

Для этого вам нужна система NLP / NLU,Вам не нужно использовать Dialogflow, но вам нужно что-то, что выполняет анализ.Попытка сделать это с помощью простого сопоставления с шаблоном или регулярными выражениями приведет к кошмарам - найдите хорошую систему для этого.

Если вы хотите придерживаться того, что можете редактировать самостоятельно, Dialogflow действительно позволяет вам загрузить его конфигурациюфайлы (это просто JSON), отредактируйте их и обновите или замените конфигурацию через пользовательский интерфейс или API.

...