我目前正在使用IBM对话服务。除了官方文档中的信息或此处记录的信息之外,是否存在创建意图的最佳实践?
我还有其他演示可以看吗?我看过IBM的汽车仪表板和Weather机器人。
问候,
凯捷
最佳答案
意图
意图是对话的机器学习组成部分。
当您使用最终用户的代表语言来培训系统时,它们最有效。代表不仅可以指最终用户的语言,还可以指用于捕获该问题的媒介。
重要的是要理解问题驱动答案/意图,而不是相反。
人们经常想到您需要首先定义意图。首先收集问题,您可以查看用户会问的内容,并集中精力进行自己的意图。
预定义的意图更容易出现制造问题,而且您会发现并非每个人都问自己认为会的意图。因此,您将时间浪费在不需要的地方。
人为问题
人为制造的问题并不总是一件坏事。它们可以很方便地引导您的系统以捕获更多问题。但是在创建它们时必须谨记。
首先,您可能认为的通用术语或短语可能不适合大众。他们没有域名经验。因此,请避免仅在阅读了该材料后才能说的领域术语或短语。
其次,您会发现,即使您竭尽全力尝试改变事物,您仍然会重复使用模式。
举个例子:
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按大小排序)
如果发现有太多独特的问题(图形=扁平线),则意图组件并不是解决此问题的最佳方法。
集群时要寻找的另一件事是彼此非常接近的集群。如果您的“意图”是一个答案,则可以通过仅对两个答案都进行成形并合并集群来提高性能。这可能是强制执行弱群集的好方法。
测验
一切都完成后,随机删除10%-20%(取决于问题的数量)。不要看这些问题。您将这些用作盲目测试。对它们进行测试将使您对它在现实世界中的性能有一个合理的预期(假设问题并非由制造出来的)。
在早期版本的WEA中,我们进行了所谓的实验(k倍验证)。系统将从训练中删除一个问题,然后再提出。它将解决所有问题。目的是测试每个群集,并查看哪些群集正在影响其他群集。
NLC /对话不执行此操作。要做到这一点将永远。您可以改用蒙特卡洛十字褶皱。为此,您从训练组中随机抽取10%,对90%进行训练,然后对删除的10%进行测试。您应该这样做几次,然后平均结果(至少3次)。
结合您的盲测,它们应该相对靠近。如果说彼此的误差范围超出5%,则说明您的培训存在问题。使用蒙特卡洛结果检查原因(而不是盲目性)。
进行此测试的另一个因素是信心。如果您不打算在一定的置信度下采取任何措施,那么也可以在测试中使用它来查看最终用户的体验。
实体
目前,实体非常基础,但可能会发生变化。您将在试图捕获的实体的狭窄显式范围内使用实体。目前尚无机器学习组件,因此它只能检测您所说的内容。
它还允许您返回系统可以对其执行操作的关键字。例如,有人可能说“猫和狗”,但您想返回@Weather:rain
正则表达式
确定用户意图的最后一种形式是条件部分。这同样非常强大,因为您可以创建嵌套的正则表达式。例如:
input.text.matches('fish|.*?\b[0-9]{4,6}\b.*?')
如果他们在问题中只说“鱼”或4到6位数字,则此示例将触发。
关于ibm-cloud - 使用IBM Conversation Service创建意图/实体的最佳实践,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39800476/