我创建了一个聊天机器人,通知用户我(扩展)家庭成员的姓名以及他们的生活地点。我已经创建了一个包含MySQL的小型数据库,其中存储了这些数据,并且只要这是合适的,我就会使用PHP脚本来获取它们,具体取决于用户与聊天机器人的交互。
出于这个原因,我已经为Default Fallback Intent
和Default Welcome Intent
创建了两个意图:
Names
Location_context
第一个意图('Names'
)是通过诸如“你叔叔的名字是什么?”这样的短语来训练的。并有一个输出上下文。第二个意图('Location_context'
)是通过以下短语进行训练的:“他住在哪里?','他在哪里?','在哪里?他找到了?' '他居住在哪个城市?'等,并有一个输入上下文(来自'Names'
)。
一般来说,这个基本的聊天机器人可以很好地满足它的需求。但是,我的问题是(在触发'Names'
意图之后)如果你问一些荒谬的事情,例如“他在哪里下雪?”#39;然后聊天机器人将触发'Location_context'
意图,聊天机器人将响应(如其定义)您的叔叔居住在纽约'。另外,请允许我提一下,由于我已经构建了聊天机器人,因此这种响应得分高于0.75
,这是非常高的。
如何让我的聊天机器人在这些荒谬的问题中触发默认后备意图(甚至在更合理的问题中,例如'他在哪里吃?'然而这些问题与{无关紧要} {1}}意图)而不是触发'Location context'
之类的意图,它只包含一些类似的关键字,例如单词'Location_context'
?
答案 0 :(得分:3)
尝试在代理设置(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
}
比较正确和错误比赛之间的得分,您将很好地了解哪个自信得分对您的代理人来说是正确的。
更改此设置后,让它训练,再试一次,然后进行调整直至满足您的需求。
<强>更新强>
对于仍会获得高分的查询,例如Where is he cooking?
,您可以添加另一个意图自定义回退,以处理这些误报,可能使用自定义实体:{{ 1}},并在用户表达式中使用NonLocationActions
(@)。
template mode
@NonLocationActions:NonLocationActions
因此,这些查询将在新的自定义回退中获得1分,而不是在位置意图中获得0.7分。
答案 1 :(得分:1)
我正在使用dialogflow在聊天机器人上工作,并且遇到了类似的问题。
我们的测试经理发明了“香肠测试”,将问题中的某些单词替换为“香肠”一词,而我们的机器人则崩溃了!即使将阈值设置为0.8,我们仍然会经常遇到一些意想不到的句子引发问题的问题,并且借助提供产品安装建议的企业级聊天机器人,我们也无法承担错误的责任。
我们发现,在某些情况下,对于明显模糊的“香肠式”输入,我们获得了最高置信度(1)。
解决这个问题的方法是将所有答案都备份到API上,并将置信度得分与其他测试结合使用。例如,我们引入了正则表达式测试来检查问题中的关键字以及参数匹配(确保关键实体参数也在DialogFlow的数据中传递)。
最近,我们还开始在回复的开头添加低信度句子,即“我认为您是在询问XYZ,但如果不是,请重新说明您的问题。这是你的答案。当我们所有额外的测试都失败并且阈值在0.8到0.98之间时,我们就会执行此操作。