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

Poe*_*dit 4 dialogflow-es

我创建了一个聊天机器人,它会通知用户我(大)家庭成员的姓名以及他们的生活地点。我用 MySQL 创建了一个小型数据库,其中存储了这些数据,并在适当的时候使用 PHP 脚本获取它们,具体取决于用户与聊天机器人的交互。

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

  • Names
  • Location_context

第一个意图 ( 'Names') 由诸如“你叔叔的名字是什么?”之类的短语训练。并有一个输出上下文。第二个意图 ( 'Location_context') 由诸如“他住在哪里?”、“他在哪里?”、“他在哪里?”等短语进行训练。“他住在哪个城市?” 等并具有输入上下文(来自'Names')。

一般来说,这个基本的聊天机器人很适合它的用途。但是,我的问题是(在'Names'触发意图之后)如果您问一些荒谬的问题,例如“他在哪里下雪?” 然后聊天机器人将触发'Location_context'意图,聊天机器人将响应(按照定义)“你的叔叔住在纽约”。还要让我提一下,到目前为止,由于我已经构建了聊天机器人,因此这种响应的得分高于0.75相当高的得分。

我怎样才能让我的聊天机器人在这些无意义的问题中触发默认回退意图(或者甚至在更合理的问题中,例如“他在哪儿吃?”,但与'Location context'意图并不完全相关),而不触发诸如'Location_context'which 之类的意图只需包含一些与其相似的关键字,例如单词'Where'?

Mar*_*nde 5

尝试ML CLASSIFICATION THRESHOLD在您的代理设置 ( Settings > 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
}
Run Code Online (Sandbox Code Playgroud)

比较正确和错误匹配之间的分数,您就会清楚哪个自信分数最适合您的代理。

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

更新

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

  • 他在哪里 @NonLocationActions:NonLocationActions
  • 他在哪个城市 @NonLocationActions:NonLocationActions

在此处输入图片说明

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