Как обучить НЛП, когда одно и то же ключевое слово повторяется в «LUIS» и «QNA Makers» с помощью диспетчера - PullRequest
0 голосов
/ 30 октября 2019

Ниже описана моя проблема: у меня есть примерное высказывание, обученное в LUIS и QnA maker, как показано ниже, когда я задаю вопрос 2, он выбирает лучший результат из LUIS. Как я могу обучить LUIS и QnA в сценариях такого типа? Выражение Луи: 1. каков статус моих расходов и т. Д.

высказывание QNA: 2.Как поднять вопрос о моих расходах и т. Д.

1 Ответ

0 голосов
/ 05 ноября 2019

Не зная больше о вашем приложении, я думаю, что проблема заключается в том, как вы используете LUIS и QnA. LUIS должен использоваться для определения намерений пользователя на основе высказываний. В этом случае оба примера высказываются о «расходах». LUIS, если модель структурирована и обучена правильно, обнаружит это и возвратит намерение «расходов».

Возвращенное намерение будет указывать, в какую базу знаний направить фактический вопрос и, таким образом, возвращенный ответ назаданный вопрос.

Что касается потока, есть несколько способов, которыми вы могли бы построить это. Это в основном порядок.

Вы можете построить это как последовательность шагов водопада. Один шаг для анализа ответа в LUIS и второй шаг для возврата ответа от QnA в зависимости от ответа LUIS. В этом примере я говорю «Привет», который LUIS распознает как «приветствие». Когда это намерение возвращается и соответствует, тогда оператор передается в QnA, который возвращает ответ «вопрос»: «Привет!».

Надежда на помощь!

async luisStep ( stepContext ) {
  if ( stepContext.context.activity.text ) {
    const stepResults = stepContext.context.activity.text.toLowerCase();

    await stepContext.context.sendActivity( `You said: ${ stepResults }` );

    const recognizerResult = await this.recognizer.recognize( stepContext.context );
    let intent = await LuisRecognizer.topIntent( recognizerResult );

  if ( intent ) {
      await stepContext.context.sendActivity( `Luis recognized: ${ intent }` );
      return stepContext.next( recognizerResult );
    } else {
      await stepContext.context.sendActivity( 'No LUIS intent was found.' );
      return stepContext.next( recognizerResult );
    }
  } else {
    await stepContext.context.sendActivity( 'Moving to the QnA step' );
    return await stepContext.next();
  }
}

async qnaStep ( stepContext ) {
  const resultDetails = stepContext.result;
  const topScoringIntent = stepContext.result.luisResult.topScoringIntent;

  if ( topScoringIntent.intent === 'Greeting' ) {
    let qnaResults = await this.qnaMaker.getAnswers(stepContext.context);

    if(qnaResults[0]) {
      stepContext.context.sendActivity(`QnA response: ${qnaResults[0].answer}`)
    }

    return { status: DialogTurnStatus.waiting };
  } else {
    await stepContext.context.sendActivity( 'There was an error retrieving QnA results.' );
  }
  return await stepContext.next();
}

enter image description here

...