首页 文章

Dialogflow将不相关的短语与现有意图进行匹配

提问于
浏览
2

我创建了一个聊天机器人,告知用户我(扩展)家庭成员的姓名以及他们的生活地点 . 我已经创建了一个包含MySQL的小型数据库,其中存储了这些数据,并且只要这是合适的,我就会使用PHP脚本来获取它们,具体取决于用户与聊天机器人的交互 .

出于这个原因,我在 Default Fallback IntentDefault Welcome Intent 之外创建了两个意图:

  • Names

  • Location_context

第一个意图( 'Names' )由诸如'What is the name of your uncle?'之类的短语训练并具有输出上下文 . 第二个意图( 'Location_context' )由诸如'Where is he living?','Where is he based?','Where is he located?' 'Which city does he live in?'等短语训练,并具有输入上下文(来自 'Names' ) .

一般来说,这个基本的聊天机器人可以很好地满足它的需求 . 但是,我的问题是(在 'Names' 意图被触发之后)如果你问一些荒谬的东西,例如'Where is he snowing?',那么聊天机器人将触发 'Location_context' 意图,聊天机器人将响应(如它所定义的)'Your uncle is living in New York' . 另外,让我提一下,因为我已经构建了聊天机器人,到目前为止,这种反应得分高于 0.75 ,这是非常高的 .

如何让我的聊天机器人在这些荒谬的问题中触发默认后备意图(或者甚至在更合理的问题中,例如'Where is he eating?',但这些问题与 'Location context' 意图无关)并且不会触发意图,例如 'Location_context' ,它只包含一些类似的它的关键字如 'Where'

2 回答

  • 2

    我正在使用dialogflow工作聊天机器人,我遇到了类似的问题 .

    我们的测试经理发明了“香肠测试”,用“香肠”这个词取代了问题中的某些词语,我们的机器人崩溃了!即使有一个0.8的门槛,我们仍然经常遇到意图解释无意义句子的问题,并且企业级聊天机器人提供产品安装建议我们无法承受错误 .

    我们发现,在某些情况下,我们获得了最大的信心水平(1),因为明显狡猾的“香肠”输入 .

    我们解决这个问题的方法是将所有答案都备份到API上,并将置信度评分与其他测试结合使用 . 例如,我们引入了正则表达式测试来检查问题中的关键字以及参数匹配(确保关键实体参数也在DialogFlow的数据中传递) .

    最近我们还在答复开始时在答复中加入了一个低信任句子,即'我想你是在询问XYZ,但如果没有,请重新解释你的问题 . 这是你的回答' . 当我们所有额外测试都失败并且阈值介于0.8和0.98之间时,我们会这样做 .

  • 1

    尝试在代理设置中使用 ML CLASSIFICATION THRESHOLDSettings > ML Settings ) . 默认情况下它的分数非常低(0.2),这有点激进 .

    定义置信度分数的阈值 . 如果返回的值小于阈值,则将触发回退意图,或者,如果没有定义回退意图,则不会触发任何意图 .

    您可以在JSON响应中查看查询的分数:

    {
        "source": "agent",
        "resolvedQuery": "Which city does he live at?",
        "metadata": {
            "intentId": "...",
            "intentName": "Location_context"
        },
        "fulfillment": {
            "speech": "Your uncle is living in New York",
            "messages": [{
                "type": 0,
                "speech": "Your uncle is living in New York"
            }]
        },
        "score": 0.9
    }
    

    比较正确和错误匹配之间的分数,您将很好地了解哪个自信分数对您的代理人来说是正确的分数 .

    更改此设置后,让它训练,再试一次,然后调整它直到满足您的需要 .

    Update

    对于仍然会获得高分的查询,例如 Where is he cooking? ,您可以添加另一个意图 custom fallback 来处理这些误报,可能使用自定义实体: NonLocationActions ,并在用户表达式中使用 template mode (@) .

    • 他在哪里 @NonLocationActions:NonLocationActions

    • 哪个城市他 @NonLocationActions:NonLocationActions

    因此,这些查询将在新的自定义回退中获得1分,而不是在位置意图中获得0.7 .

相关问题