我的故事训练结果不可预测



我正在尝试开发一个天气机器人,但遇到了一些问题。

  1. 我用故事和理解选项卡来训练系统。智慧的行为对我来说似乎是不可预测的——它结合了故事(我想应该这样做),所以似乎是随机对话的
  2. 即使使用相同的故事,意向值也不一致。我使用调试器来显示intent值。例如,我说"天气怎么样",训练的意图值应该是forecast_all,但有时它变成了"什么",有时其他故事中的一些其他实体会出现,比如我为主题外对话创建的"off_topic"实体。然后机器人的行为将与我的训练故事有所不同

有什么见解吗?我做错什么了吗?我错过了什么?非常感谢你的帮助!

我感觉到你的痛苦:)

你必须根据用户的输入"强迫"wit.ai进入正确的故事,如果你需要用户跟随故事直到最后,你必须不断地"强迫"他们进入对话链。

我的意思是:

如果用户说What's the weather,您可以再引入一个名为wth的自定义实体,并在"理解"选项卡中使其基于关键字,并添加与weather单词相关的严格关键字列表(预测…)。

这可能是你的"指导线"。当这个实体出现时=用户已经使用了与天气问题相关的关键字=您可以使用该实体wth作为您故事的每个动作和响应的要求(动作选项卡)。

在我的几个应用程序中,对于每个故事,我都会想到"这个故事在做什么",可以说,切入点是什么,并通过使用"操作"选项卡和设置Only if,想出了一个实体,引导用户沿着对话路径前进。。。Always if。。。答复和行动要求。

这种方法非常严格,但它可以让你在一定程度上控制用户从你的"机器人"那里收到的内容,这样你就可以预测动作和回复。

我在尝试另一种方法,你有很多故事,它们都是"不完整的",但它们试图涵盖用户可能给出的不同答案。因此,用户开始在一个故事中聊天,然后根据他的回答——另一个故事开始了,然后又是另一个,然后又一个。。。

这也是一种有效、更灵活的方法,但它需要对"机器人回复"\故事进行良好的规划,以便他们以合乎逻辑的对话方式感受到联系。是的,它也需要仔细的上下文管理,因为如果每个故事都会添加上下文,那么它可能会变成一大堆实体和值,所以你需要认为故事a会将实体A1添加到上下文中,但如果后来故事B加入并将B1实体添加到上下文,那么我需要删除A1,因为它们是冲突的。。。

总结一下:你似乎想有更多的控制权,知道对话的方向。为此,请尝试"操作"选项卡并设置答案和操作的要求。你可以把它做得非常直接。

我想在这里澄清一个重要的概念。上下文是您的。Wit读取它只是为了预测下一步或通过变量生成Bot答案。我们从不更新我们这边的情况。

您可以在上下文中使用自己的操作来更新密钥。这些关键点反过来可以影响基于故事的预测。Wit使用当前上下文(仅限现在的键)、上下文的先前状态(在交互N-1、N-2…)以及用户消息(特征实体)来预测下一个动作。

此处的其他信息:https://wit.ai/docs/recipes#manage-上下文和会话id

最新更新