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

问题描述 投票:1回答:2

在开发和测试对话时,IBM Watson Assistant会识别多个意图,并对具有最高置信度的那个进行响应。有时我希望它响应第二个意图而不是第一个意图,因为它与当前对话环境更相关。例如,如果对话包含处理转移或支付的节点,则在转移方案期间,用户可以说执行将匹配执行转移和执行支付。因此,我希望Watson始终响应执行转移,这是当前的上下文,即使它更可靠地识别执行支付。

因此,用户会询问一般性问题,假设机器人知道当前上下文并将相应地做出回应。

例如,假设我正在开发一个FAQ机器人来回答有关2个程序Loyalty and Saving的查询。为简单起见,我假设有4个意图

(忠诚度 - 定义 - 其中包含与忠诚度计划相关的示例)(忠诚度 - 加入 - 其中包含与如何加入忠诚度计划相关的示例)(保存定义 - 其中包含与保存程序相关的示例)(保存) -Join - 其中有关于如何加入保存程序的示例)

因此,用户可以通过“告诉我有关忠诚度计划”等话语开始对话。然后他们会问“如何加入”(假设机器人知道的话,没有提到程序)。在这种情况下,Watson将识别2个意图(Loyalty-Join,Saving-Join)和Saving-Join意图可能具有更高的置信度。

所以我需要拦截对话(可能是创建一个父节点来检查上下文,并根据这将过滤 - 关于错误的意图)。

我找不到在对话框中编写代码的方法来检查上下文并修改意图数组,所以我想询问最佳实践。

ibm-cloud ibm-watson watson-conversation
2个回答
1
投票

你不能编辑意图对象,所以它使你想做的事情变得棘手但并非不可能。

在您的答案节点中,添加一个像$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。然后在应用程序层传回第二个intent,让对话逻辑采取行动。有一个example here

Watson Assistant Plus也会通过消除歧义功能自动执行此操作。


0
投票

你可以train Watson Assistant做出相应的回应。在您处理技能的工具中,单击导航栏中的“用户对话”页面。在消息概述中,您需要识别那些未正确回答的那些,然后指定正确的意图。 Watson Assistant会选择它,重新训练,然后希望正确回答。

此外,您可以重新审视如何定义意图。示例是真实的用户消息吗?你能提供更多变化吗?让Watson Assistant选择一个但不是另一个意图的冲突是什么?

添加:

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

© www.soinside.com 2019 - 2024. All rights reserved.