【问题标题】:Does Microsoft QnA maker use LUIS?Microsoft QnA 制造商是否使用 LUIS?
【发布时间】:2017-12-10 06:14:29
【问题描述】:

我打算使用 QnA maker,但它在后台使用 LUIS 吗? 如果问题的提问方式与受过 QnA 制作者培训的方式不同,它会回应吗?

【问题讨论】:

    标签: botframework azure-language-understanding qnamaker


    【解决方案1】:

    它在后台使用 LUIS 吗?

    不,但你可以Combining Search, QnA Maker, and/or LUIS

    根据文档,建议采用以下三种方式来实现 QnA 与 LUIS。

    1. 同时调用 QnA Maker 和 LUIS,并使用第一个返回特定阈值分数的信息来响应用户。

    2. 首先调用 LUIS,如果没有意图满足特定阈值分数,即触发“无”意图,则调用 QnA Maker。或者,为 QnA Maker 创建一个 LUIS 意图,为您的 LUIS 模型提供映射到“QnAIntent”的示例 QnA 问题。

    3. 首先致电 QnA Maker,如果没有答案达到特定阈值分数,则致电 LUIS。

    在这里,我发布了一个代码示例,仅适用于用 C# 编写的第三种方法。

    MessagesController 中首先调用 QnA Maker:

    if (activity.Type == ActivityTypes.Message)
    {
        await Conversation.SendAsync(activity, () => new Dialogs.MyQnADialog());
    }
    

    MyQnADialog中,查看是否有匹配的答案,如果没有,调用LUIS:

    [QnAMakerAttribute("QnASubscriptionKey", "QnAKnowledgebaseId", "No Answer in Knowledgebase, seraching in Luis...", 0.5)]
    [Serializable]
    public class MyQnADialog : QnAMakerDialog
    {
    
        protected override async Task DefaultWaitNextMessageAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
        {
            if (result.Answers.Count == 0)
            {
                await context.Forward(new MyLuisDialog(), this.ResumeAfterNewOrderDialog, message, CancellationToken.None);
            }
            context.Wait(this.MessageReceivedAsync);
            //return base.DefaultWaitNextMessageAsync(context, message, result);
        }
        private async Task ResumeAfterNewOrderDialog(IDialogContext context, IAwaitable<object> result)
        {
            var resultfromnewdialog = await result;
            context.Wait(this.MessageReceivedAsync);
        }
    
    }
    

    【讨论】:

    • 如果我们使用 QnA 和 LUIS,那么课程的馈送应该进行两次。一次在 QnA 上,又一次在 LUIS 上?请纠正我的理解。
    • @ZEE,它们是不同的服务,您可以直接同时向这两个服务发送消息并检查结果,或者您可以一个一个地通过它们。例如,如果用户先从 QnA 查询并找到答案,则无需进一步调用 LUIS。
    • 感谢您的明确答复,但我主要担心我是否必须训练两次,即一次到 QnA 一次到一次到 LUIS,所以如果第一个选项的结果低于某个分数,我会继续打电话给第二个。
    • @ZEE,我认为在调用 QnA 后是否再次调用 LUIS 由您决定。如果您觉得这个答案有帮助,请您标记这个答案吗?
    • @ZEE,我想你误解了 QnA 和 Luis,将 QnA 视为一个知识库,其中有一组固定的问题和答案,而 Luis 就像一个人类解释器,它了解您的意图和您的实体。其次,QnA 会回答,即使问题的提问方式与受过 QnA 制造商培训的方式不同(如果有匹配项),但最好通过在回答中添加多个问题来进行培训。第三,理想情况下,您不应该相同的问题训练 luis 和 qna(那么同时使用这两个有什么意义呢?)
    【解决方案2】:

    QnA 不使用 LUIS 或意图识别,而是使用 n-gram 来检测相似性,就像文档中用来说明的那样。

    自 MS Build 2018 起,您可以使用 LUIS 调度应用。它允许您将多个 LUIS 应用程序和 QnA 知识库合并到一个调度应用程序中。这意味着将用户输入发送到 LUIS 和 QnA,或者根据置信度分数以特定顺序发送应该成为过去。

    您拨打的第一个电话是针对 LUIS 调度应用的。结果将告诉您是否需要联系儿童 luis 应用程序,或者更确切地说是 QnA 知识库。它可以执行此操作,因为 LUIS 调度应用程序的话语充满了来自 QnA 知识库的话语。您可以向此调度添加多个 LUIS 应用和/或 QnA 知识库。

    我建议查看 Bot Builder 调度工具 (CLI)。

    【讨论】:

    • 使用dispatch工具有一个问题,每次添加或更新KB时,都需要重新创建新的dispatch模型并使用。
    • 您不需要再次创建新模型,您可以在 .dispatch 文件所在的同一文件夹中运行调度刷新。这将使用您的子 LUIS 应用/KB 中已发布的所有更改来更新 LUIS 调度应用。
    猜你喜欢
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多