使用IBM Conversation Service创建意图/实体的最佳实践

时间:2016-09-30 21:41:17

标签: ibm-cloud watson-conversation

我目前正在使用IBM Conversation Service。除了官方文档中的信息或此处记录的信息之外,是否存在创建意图的最佳实践:https://github.com/watson-developer-cloud/text-bot#best-practices

我可以看一下其他演示吗?我见过IBM的汽车仪表板和Weather bot。

问候,

谢蒂尔

1 个答案:

答案 0 :(得分:15)

意图

意图是对话的机器学习组件。

当您使用最终用户的代表语言训练系统时,它们的效果最佳。代表不仅可以表示最终用户语言,还可以表示用于捕获该问题的媒介。

重要的是要理解问题驱动答案/意图而不是反过来。

人们常常认为你需要先定义意图。首先收集问题可以让您了解用户会问什么,并专注于您的意图所采取的行动。

预先定义的意图更容易产生制造问题,并且您发现并非所有人都会询问您认为他们会想要的意图。所以你浪费时间训练你不需要的领域。

制造问题

制造的问题并不总是坏事。它们可以方便地引导您的系统以捕获更多问题。但是在创建它们时你必须要小心。

首先,您可能认为的一个常见术语或短语可能不适用于一般公众。他们没有域名经验。因此,请避免仅在他们阅读材料时才会说的域名或短语。

其次,你会发现,即使你不顾一切地尝试改变事物,你仍然会复制模式。

举个例子:

how do I get a credit card?
Where do I get a credit card?
I want to get a credit card, how do I go about it?
When can I have a credit card? 

这里的核心术语credit card并没有变化。他们可以说visamaster cardgold cardplastic甚至只是card。话虽如此,意图可以非常聪明。但是在处理大量问题时,最好改变一下。

聚类

对于经过适当培训的群集,您至少需要5个问题。最佳值为10.如果您收集的是问题而不是制造问题,那么您会发现无法训练的群集。只要你有一个像这样的类似模式的长尾巴就可以了:

example long tail graph

(水平=问题数,垂直=按大小排序的群集ID)

如果您发现有太多独特的问题(图表=扁平线),则意图组件不是解决此问题的最佳方法。

当群集是彼此非常接近的群集时,要寻找的另一件事。如果你的意图"给出答案,您可以通过塑造两者的答案并合并集群来提高性能。这可以是强制执行弱集群的好方法。

测试

将所有内容群集后,删除随机10%-20%(取决于问题数量)。不要看这些问题。你用这些作为盲目测试。测试这些将使您对现实世界中的表现有一个合理的期望(假设没有制造问题)。

在早期版本的WEA中,我们进行了所谓的实验(k-fold验证)。系统会从培训中删除一个问题,然后再回复。它会为所有问题做到这一点。目的是测试每个群集,并查看哪些群集正在影响其他群集。

NLC / Conversation不会这样做。要做到这一点需要永远。您可以使用monte-carlo交叉折叠。要做到这一点,你从火车组中随机取10%,训练90%,然后测试10%被移除。你应该这样做几次并平均结果(至少3次)。

与盲目测试一起,他们应该相对靠近彼此。如果他们说的是彼此的5%范围之外,那么你的训练有问题。使用monte-carlo结果来检查为什么(不是你的盲集)。

此测试的另一个因素是信心。如果您打算不在某个置信水平下采取行动,那么也要在测试中使用它来了解最终用户体验。

实体

目前,实体非常基本,但可能会发生变化。您将使用实体,在这些实体中,您尝试捕获的内容范围很窄。目前没有机器学习组件,所以它只能检测你告诉它的内容。

它还允许您传回系统可以对其执行操作的关键字。例如,有人可能会说"猫和狗"但是你想要回归@Weather:rain

REGEX

确定用户意图的最后一种形式是条件部分。这也可以非常强大,因为您可以创建嵌套的正则表达式。例如:

input.text.matches('fish|.*?\b[0-9]{4,6}\b.*?')

如果他们只说“鱼”,那么这个例子就会触发。或者问题中的4-6位数字。