1

在我们的机器人中,我们有几个意图。在其中一个意图中,我们有以下示例话语:

I {injuryType} my {bodyPart}

所以它匹配诸如I broke my leg.

然后,在另一个意图中,我们有一个用于bodyPart以下示例话语的槽:

I broke my {bodyPart}

我们遇到的问题是,当用户收到提示时bodyPart,他说I broke my leg,而不是仅仅填充插槽,而是切换到另一个意图。

有没有办法表明槽话语应该优先于意图话语?

4

1 回答 1

2

不幸的是,我们没有办法显式地强制 Lex 保持在槽值匹配范围内,而不是尝试在意图级别进行匹配。

根据我对这个问题的经验(它经常发生,所以这是一个持续的平衡行为),当你在一个意图中时,槽值确实优先于意图话语。使用良好的机器人结构(“意图模式”),意图话语似乎只有在槽值未找到完美匹配时才会被检查。但是,Lex可能每次都检查两者并简单地提供最佳匹配,在您的情况下,这是意图表达,因为变量少了一个。

我们实际上只有一种控制方式,即我们如何设置意图、话语、slotTypes 和 slotType 值。

以下是一些建议:

  1. 重新考虑意图的设置,并寻找两个意图过于相似并且可以合并为一个意图的可能性。
  2. 评估话语和 slotType 值之间的相似性,然后简单地删除一个以支持另一个。
  3. 尝试加强 slotType 值列表如:“break”、“broke”、“broken”、“braked”等(甚至拼写错误)

我用#3 最不成功,用#1 和#2 最成功。

就像我说的,考虑到意图的结构、不同意图中可能的 slotType 值、输入匹配的任何重叠以及自然语言用户体验,这是一个不断平衡的行为。你将不得不牺牲一个人的一些自由/结构来给另一个人更多的自由/结构。

于 2019-03-19T06:08:47.363 回答