我目前正在使用 IBM 对话服务。除了官方文档中的信息或此处记录的信息之外,是否存在任何创建意图的最佳实践:https ://github.com/watson-developer-cloud/text-bot#best-practices ?
还有其他我可以看的演示吗?我看过 IBM 的汽车仪表板和 Weather bot。
问候,
凯蒂尔
我目前正在使用 IBM 对话服务。除了官方文档中的信息或此处记录的信息之外,是否存在任何创建意图的最佳实践:https ://github.com/watson-developer-cloud/text-bot#best-practices ?
还有其他我可以看的演示吗?我看过 IBM 的汽车仪表板和 Weather bot。
问候,
凯蒂尔
意图是对话的机器学习组件。
当您使用最终用户的代表语言训练系统时,它们的效果最好。代表不仅可以指最终用户的语言,还可以指用于捕捉该问题的媒介。
重要的是要了解问题驱动答案/意图,而不是相反。
人们通常会认为您需要先定义意图。首先收集问题可以让您了解用户将要问什么,并专注于您的意图采取的行动。
预定义的意图更容易出现人为的问题,并且您会发现并非每个人都会询问您认为他们会提出的意图。因此,您将时间浪费在不需要的领域上。
人为的问题并不总是坏事。它们可以方便地引导您的系统以捕获更多问题。但是在创建它们时您必须注意。
首先,您可能认为常见的术语或短语可能不适用于公众。他们没有领域经验。因此,请避免只有在阅读过材料后才会说的领域术语或短语。
其次,你会发现即使你不遗余力地尝试改变事物,你仍然会重复模式。
举个例子:
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
没有变化。他们可以说visa
,,,,甚至只是。话虽如此,意图可以非常聪明。但在处理大量问题时,最好多变。master card
gold card
plastic
card
对于经过适当训练的集群,您至少需要 5 个问题。最佳值为 10。如果您收集问题而不是制造问题,您会发现集群没有足够的训练量。这很好,只要你有一个类似这样的模式的长尾巴:
(水平 = 问题数,垂直 = 按大小排序的集群 ID)
如果你发现有太多独特的问题(graph = flat line),那么intents 组件并不是最擅长解决这个问题。
集群时要寻找的另一件事是彼此非常接近的集群。如果您的“意图”是给出答案,您可以通过为两者制定答案并合并集群来提高性能。这可能是实施弱集群的好方法。
一旦你把所有东西都聚集在一起,删除一个随机的 10%-20%(取决于问题的数量)。不要看这些问题。你用这些作为你的盲测。测试这些会让你对它在现实世界中的表现有一个合理的预期(假设问题不是制造出来的)。
在早期版本的 WEA 中,我们进行了所谓的实验(k 倍验证)。系统会从训练中删除一个问题,然后再问回来。它会为所有问题做到这一点。目的是测试每个集群,看看哪些集群会影响其他集群。
NLC/Conversation 不这样做。要做到这一点需要永远。您可以改用蒙特卡罗交叉折叠。为此,您从训练集中随机抽取 10%,对 90% 进行训练,然后对移除的 10% 进行测试。您应该这样做几次并对结果进行平均(至少 3 次)。
结合您的盲测,它们应该彼此相对靠近。如果他们说彼此超出了 5% 的范围,那么你的训练就有问题。使用蒙特卡罗结果来检查原因(而不是你的盲集)。
此测试的另一个因素是信心。如果您计划在一定的置信水平下不采取行动,那么也可以在测试中使用它来查看最终用户体验如何。
目前实体非常基本,但可能会发生变化。您将在您尝试捕获的内容的明确范围很窄的情况下使用实体。目前它没有机器学习组件,所以它只能检测你告诉它的内容。
它还允许您传回系统可以对其执行操作的关键字。例如,有人可能会说“猫和狗”,但您想返回 @Weather:rain
确定用户意图的最后一种形式是条件部分。这也非常强大,因为您可以创建嵌套的正则表达式。例如:
input.text.matches('fish|.*?\b[0-9]{4,6}\b.*?')
如果他们在问题中只说“鱼”或 4-6 位数字,则会触发此示例。