我创建了一个聊天机器人,告知用户我(扩展)家庭成员的姓名以及他们的生活地点 . 我已经创建了一个包含MySQL的小型数据库,其中存储了这些数据,并且只要这是合适的,我就会使用PHP脚本来获取它们,具体取决于用户与聊天机器人的交互 .
出于这个原因,我在 Default Fallback Intent
和 Default 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 回答
我正在使用dialogflow工作聊天机器人,我遇到了类似的问题 .
我们的测试经理发明了“香肠测试”,用“香肠”这个词取代了问题中的某些词语,我们的机器人崩溃了!即使有一个0.8的门槛,我们仍然经常遇到意图解释无意义句子的问题,并且企业级聊天机器人提供产品安装建议我们无法承受错误 .
我们发现,在某些情况下,我们获得了最大的信心水平(1),因为明显狡猾的“香肠”输入 .
我们解决这个问题的方法是将所有答案都备份到API上,并将置信度评分与其他测试结合使用 . 例如,我们引入了正则表达式测试来检查问题中的关键字以及参数匹配(确保关键实体参数也在DialogFlow的数据中传递) .
最近我们还在答复开始时在答复中加入了一个低信任句子,即'我想你是在询问XYZ,但如果没有,请重新解释你的问题 . 这是你的回答' . 当我们所有额外测试都失败并且阈值介于0.8和0.98之间时,我们会这样做 .
尝试在代理设置中使用
ML CLASSIFICATION THRESHOLD
(Settings > ML Settings
) . 默认情况下它的分数非常低(0.2),这有点激进 .您可以在JSON响应中查看查询的分数:
比较正确和错误匹配之间的分数,您将很好地了解哪个自信分数对您的代理人来说是正确的分数 .
更改此设置后,让它训练,再试一次,然后调整它直到满足您的需要 .
Update
对于仍然会获得高分的查询,例如
Where is he cooking?
,您可以添加另一个意图 custom fallback 来处理这些误报,可能使用自定义实体:NonLocationActions
,并在用户表达式中使用template mode
(@) .他在哪里
@NonLocationActions:NonLocationActions
哪个城市他
@NonLocationActions:NonLocationActions
因此,这些查询将在新的自定义回退中获得1分,而不是在位置意图中获得0.7 .