【发布时间】:2020-02-25 14:33:13
【问题描述】:
以下是我的问题: 当我问问题 2 时,我在 LUIS 和 QnA 制造商中训练了如下示例话语,它正在从 LUIS 中获得最高得分意图,我如何在这些类型的场景中训练 LUIS 和 QnA? 路易斯发言: 1.我的费用状况如何 等等
QNA 发言: 2.如何为我的费用提出问题 等等
【问题讨论】:
标签: bots azure-language-understanding
以下是我的问题: 当我问问题 2 时,我在 LUIS 和 QnA 制造商中训练了如下示例话语,它正在从 LUIS 中获得最高得分意图,我如何在这些类型的场景中训练 LUIS 和 QnA? 路易斯发言: 1.我的费用状况如何 等等
QNA 发言: 2.如何为我的费用提出问题 等等
【问题讨论】:
标签: bots azure-language-understanding
在不了解您的应用的情况下,我认为问题在于您如何使用 LUIS 和 QnA。 LUIS 应该用于根据话语检测用户的意图。在这种情况下,两个示例话语都是关于“费用”的。如果模型的结构和训练正确,LUIS 会检测到这一点并返回“费用”意图。
返回的意图将指示将实际问题引导至哪个知识库,从而返回对所提出问题的响应。
至于流程,您可以通过多种方式构建它。主要是为了秩序。
您可以将其构建为一系列瀑布步骤。第一步是解析 LUIS 中的响应,第二步是根据 LUIS 响应从 QnA 返回答案。在此示例中,我说“你好”,LUIS 将其识别为“问候”意图。当该意图被返回并匹配时,该语句被传递给 QnA,它返回“问题”响应:'Hi!'。
希望有帮助!
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();
}
【讨论】: