IBM Watson Assistant:如何训练聊天机器人以选择正确的意图?

时间:2019-03-08 06:48:38

标签: ibm-cloud ibm-watson watson-conversation

在开发和测试对话时,IBM Watson Assistant会识别多个意图并以最高的置信度做出回应。有时我希望它响应第二个意图而不是第一个意图,因为它与当前对话上下文更相关。例如,如果对话框包含处理转账或付款的节点,则在转账场景中,用户可以说执行将与执行转账和执行付款匹配的执行。因此,我希望Watson始终响应当前执行的执行转移,即使它以较高的置信度确定执行付款。

因此,假设机器人知道当前上下文并会做出相应答复,那么用户会问一些通用问题。

例如,假设我正在开发一个FAQ机器人来回答有关2个程序“忠诚度和储蓄”的询问。为简单起见,我假设有4种意图

(忠诚度定义-包含与忠诚度计划有关的示例) (忠诚度加入-包含有关如何加入忠诚度计划的示例) (Saving-Define-具有有关什么是保存程序的示例) (“保存加入-具有有关如何加入保存程序的示例”)

因此,用户可以通过诸如“告诉我有关忠诚度计划”之类的对话来开始对话。然后他们会询问“如何加入”(假设机器人知道该程序就不会提及该程序)。在这种情况下,Watson将确定2个意图(忠诚度加入,储蓄加入),并且储蓄加入的意图可能具有较高的置信度。

所以我需要拦截对话(可能正在创建一个父节点来检查上下文,并以此为基础过滤错误的意图)。

我找不到在对话中编写代码以检查上下文并修改intents数组的方法,所以我想问一谈这样做的最佳实践。

2 个答案:

答案 0 :(得分:1)

您无法编辑Intent对象,因此它会使您想做的事情变得棘手,但并非不可能。

在答案节点中,添加一个上下文变量,例如$topic。您用一个表示该主题的术语来填充它。

然后,如果未回答用户问题,则可以检查主题上下文并将其添加到新的上下文变量中。然后,该新变量由应用程序层选择以重新询问问题。

示例:

User: tell me about the loyalty program
WA-> Found #Loyality-Define
     Set $topic to "loyalty"
     Return answer. 

User: how to join
 WA-> No intent found. 
      $topic is not blank. 
      Set $reask to "$topic !! how to join"
APP-> $reask is set. 
      Ask question "loyalty !! how to join"
      Clear $reask and $topic
 WA-> Found #Loyalty-join
      $topic set to "loyalty"
      Return answer

现在在最后一种情况下,即使找不到加载的问题,清除$ topic也会停止循环。

要注意的另一件事是,如果用户更改主题,则必须设置主题或将其清除。为了防止它选择旧主题。

注意::问题已更改,因此从技术上讲是另一个问题。将先前的答案留在下面


您可以使用intents[]对象来分析返回的结果。

因此,您可以检查第一个意图和第二个意图之间的置信度差异。如果它们在一定范围内,则可以采取措施。

示例条件:

intents[0] > 0.24 && intents.[1] - intents[0] > 0.05

这将检查两个意图是否在5%之内。 0.24的阈值是忽略第二个意图,因为第二个意图很可能会降到0.2以下,这通常意味着不应对该意图采取任何行动。

您可能要使用此阈值。

仅说明您为什么这样做。看这两个图表。显然,第一个问题只问一个。第二张图表显示这两个意图是紧密相连的。

enter image description here enter image description here


要采取实际行动,最好有一个关闭的文件夹(condition = false)。在该文件夹中,寻找匹配的intents[1]。这样可以降低对话框的复杂性。


如果您想要更复杂的东西,可以在应用程序层执行k-means。然后在应用程序层传递第二个意图,以使对话框逻辑起作用。有一个example here

Watson Assistant Plus还可以使用“消歧”功能自动执行此操作。

答案 1 :(得分:0)

您可以train Watson Assistant做出相应的回应。在使用该技能的工具中,单击导航栏中的“用户对话”页面。在消息概述中,您需要确定那些回答不正确的消息,然后指定正确的意图。 Watson Assistant将接好电话,对其进行重新培训,然后希望正确回答。

此外,您可以重新定义定义意图的方式。这些示例是否像真实的用户消息一样?您能提供更多变化吗?是什么让Watson Assistant选择一个目的,而不是另一个目的?

添加:

如果希望Watson Assistant“了解”上下文,则可以提取当前意图并将其作为主题存储在上下文变量中。然后,如果检测到“加入”意图,则根据意图“加入”和特定主题切换到对话框节点。为此,我建议只对“加入程序”有一个意图,或者如果确实需要,将有关细节的细节放入意图中。可能差别不大,您最终只有一种意图。