为意图分配权重

Assigning weights to intents

我刚刚开始使用 Watson Conversation,我 运行 进入以下问题。

我对#greetings(你好,嗨,问候......)有一个总体意图,对#general-issues 有另一个意图(我有一个问题,我有一个问题,东西不工作,等等...... ...)。如果用户说:"hello, I have a problem with your product.",它匹配#greetings 意图并回复,但在这种情况下我想匹配#general-issue 意图。

根据:https://console.bluemix.net/docs/services/conversation/dialog-overview.html#dialog-overview

我希望列表顶部的节点首先匹配,所以我在对话树的底部有#greetings 节点,让 "higher weight" 节点有机会被匹配先匹配,但好像每次都不行

复制#general-issue 中的#greeting 意图是这里唯一的解决方案吗?

所以,根据我的经验来帮助你,你可以使用intents[0].confidence作为你的帮助。

例如:

在我的示例中,我创建了一个条件:

intents[0].confidence > 0.75

因此,只要用户为 #greetings Intent.

如您所见,效果很好:

因此,您可以采用另外两种方法。

将偏离主题视为污染。

构建对话系统时,了解最终用户实际在说什么很重要。所以收集真实用户的问题。

你会发现没有多少人会说一句问候一句问一句。我个人没有对我做过的项目进行过统计机会,但至少在轶事中我没有看到它经常发生。

了解这一点后,您可以尝试从意图中删除离题/闲聊。因为它不能完全反映您要训练的领域。

为了解决这个问题,您可以关闭 topic/chit-chat 创建一个更详细的第二个工作区。如果您没有在主要工作区获得成功,您可以呼叫第二个工作区。您可以通过在主工作区中添加 chit-chat 来对抗示例来改进这一点。

您也可以通过简单地向用户说明您的初始响应来缓解这种情况。例如,如果您的初始回答是“你好”,让系统也问一个问题。或者让它在对话变得多余时推进对话。

检测可能的复合意图。

目前,这只能在应用层轻松实现。

alternate_intents 设置为 true 将 return 前 10 个意图及其置信度。

在继续之前,如果最高意图 < 0.2 则需要更多训练(因此无需继续)。

如果 > 0.2,你可以将这些映射到图表上,你可以直观地看到前两个意图。例如:

要让您的应用程序看到这一点,您可以使用 k-means 算法创建两个桶 (k=2)。那将是相关的和无关的。

一旦您看到超过一个相关的,您可以采取行动忽略 chit-chat/off-topic。

还有更多的细节,sample code here