当使用调度程序在“ LUIS”和“ QNA Makers”中重复相同的关键字时,如何训练NLP

时间:2019-10-30 10:06:37

标签: bots luis

以下是我的问题: 当我问问题2从LUIS获得最高评分意图时,我在LUIS和QnA制造商中对样本话语进行了如下培训,如何在此类情况下训练LUIS和QnA? LUIS话语: 1.我的支出状况如何 等

QNA演讲: 2.如何自费提出问题 等

1 个答案:

答案 0 :(得分:0)

在不了解您的应用程序的更多信息的情况下,我认为问题出在您如何使用LUIS和QnA。应使用LUIS基于话语来检测用户的意图。在这种情况下,两个示例话语都是关于“费用”的。如果模型的结构和训练正确,LUIS将会检测到该错误并返回“费用”意图。

返回的意图将指示将实际问题定向到哪个知识库,从而返回对所问问题的答复。

关于流程,有很多方法可以构造它。主要是关于订单。

您可以将其构造为一系列瀑布步骤。第一步,解析LUIS中的响应,第二步,根据LUIS响应,从QnA返回答案。在此示例中,我说“ Hello”,LUIS将此识别为“问候”意图。返回并匹配该意图后,该语句将传递给QnA,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