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

Dialogflow es Dialogflow将不相关的短语与现有意图相匹配,dialogflow-es,Dialogflow Es,我创建了一个聊天机器人,它可以通知用户我的(大)家庭成员的姓名以及他们的居住地。我用MySQL创建了一个小数据库,其中存储了这些数据,并根据用户与聊天机器人的交互情况,随时使用PHP脚本获取这些数据 因此,除了默认回退意图和默认欢迎意图,我还创建了两个意图: 名称 Location\u context 第一个意图('Names')由诸如“你叔叔叫什么名字?”之类的短语进行训练,并具有输出上下文。第二个意图('Location\u context')由诸如“他住在哪里?”、“他在哪里?”、“他

我创建了一个聊天机器人,它可以通知用户我的(大)家庭成员的姓名以及他们的居住地。我用MySQL创建了一个小数据库,其中存储了这些数据,并根据用户与聊天机器人的交互情况,随时使用PHP脚本获取这些数据

因此,除了
默认回退意图
默认欢迎意图
,我还创建了两个意图:

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

一般来说,这个基本的聊天机器人可以很好地完成它的功能。然而,我的问题是(在触发
'Names'
意图之后),如果你问一些毫无意义的问题,比如“他在哪里下雪?”那么聊天机器人将触发
'Location\u context'
意图,聊天机器人将响应(定义为)“你叔叔住在纽约”。还请允许我提到,由于我已经构建了聊天机器人,到目前为止,此类响应的得分高于相当高的
0.75


我如何让聊天机器人在这些无意义的问题中触发默认的回退意图(甚至在更合理的问题中,例如“他在哪里吃饭?”这些问题与
位置上下文
意图并不完全相关)不要触发意图,例如只包含一些类似关键字的
'Location\u context'
,例如单词
'Where'

尝试在代理设置(
设置>ML设置)中使用
ML分类阈值。默认情况下,它的分数很低(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
}
比较正确和错误比赛的分数,你会很好地知道哪个自信的分数适合你的经纪人

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

更新

对于仍然会获得高分的查询,如
他在哪里做饭?
,您可以添加另一个意图自定义回退,以处理这些误报,可能使用自定义实体:
非定位操作
,并在用户表达式中使用
模板模式
(@)

  • 他在哪里?
    @NonLocationActions:NonLocationActions
  • @NonLocationActions:NonLocationActions


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

我正在使用dialogflow开发聊天机器人,并且遇到类似的问题

我们的测试经理发明了“香肠测试”,她用香肠这个词替换了问题中的某些词,我们的机器人崩溃了!即使阈值为0.8,我们仍然经常遇到一些问题,这些问题的意图是因为一些无稽之谈而引发的,而对于一个提供产品安装建议的企业级聊天机器人,我们也不能承担这样的错误

我们发现,在某些情况下,对于明显不可靠的“香肠”输入,我们得到了最大置信水平(1)

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


最近,我们还开始在回复的开头加入一句低置信度的句子,即“我想你是在问XYZ,如果不是,请重新表述你的问题。这是你的答案。当所有额外测试都失败并且阈值在0.8到0.98之间时,我们会这样做。

感谢您的回复(upvote)。是的,更改
ML阈值肯定是一个不错的选择。然而,在一些不太相关的问题上,比如“他在哪里做饭?”我得到了非常高的
0.81分,我不确定将
ML阈值设置为0.85是解决我的问题的最佳策略。也许,就每个问题定义其他实体是更好的选择;例如,关于居住地点的实体,以便排除关于就餐地点或任何地点的问题。你觉得呢?是的,当然,ML阈值不是完美的,但它是向前迈出的一步。这个数字取决于你有多少个例子,对你来说可能是0.85,因为你可能只有两个意图。我会添加另一个意图来匹配这些误报,并将它们作为后备意图处理。非常有趣的回答。我将测试它,并考虑一下是否有更好的选择。我的第一印象是,即使是正确的问题也可能会引发这种自定义的回退意图……但我将首先测试它。我还想知道这个
NonLocationActions
实体将包括什么。从某种意义上说,它必须包括除与正确问题相关的词语以外的一切……但也许最好定义一个实体,包括“生活、基础、工作等”和