使用调度程序在“LUIS”和“QNA Makers”中重复相同关键字时如何训练 NLP
Posted
技术标签:
【中文标题】使用调度程序在“LUIS”和“QNA Makers”中重复相同关键字时如何训练 NLP【英文标题】:How to train a NLP when there is same key word is repeating in "LUIS" and "QNA Makers" using dispatcher 【发布时间】:2020-02-25 14:33:13 【问题描述】:以下是我的问题: 当我问问题 2 时,我在 LUIS 和 QnA 制造商中训练了如下示例话语,它正在从 LUIS 中获得最高得分意图,我如何在这些类型的场景中训练 LUIS 和 QnA? 路易斯发言: 1.我的费用状况如何 等等
QNA 发言: 2.如何为我的费用提出问题 等等
【问题讨论】:
【参考方案1】:在不了解您的应用的情况下,我认为问题在于您如何使用 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();
【讨论】:
以上是关于使用调度程序在“LUIS”和“QNA Makers”中重复相同关键字时如何训练 NLP的主要内容,如果未能解决你的问题,请参考以下文章