在 Watson 对话中,如何只为同义词而不为值打开模糊匹配?

In Watson conversation, How to turn on fuzzy matching only for synonyms and not for the value?

我正在 Watson 对话中对对话进行建模。谈话围绕着机场可用的设施展开。我已将机场名称配置为一个实体,并将机场名称的变体添加为同义词,并将机场的 IATA 代码保留为实体值。例如阿姆斯特丹的史基浦机场如下图

我在这个实体上启用了模糊匹配,这样我就可以捕捉到人们在尝试说 Schiphol 或 Amsterdam 时会犯的错别字。但是,Watson 现在将下面句子中的单词 am 捕获为这个实体

I am wondering if there is wifi in schiphol airport?

如何阻止 Watson 对实体值进行模糊匹配,而只对同义词进行模糊匹配?

我认为目前无法仅对同义词启用模糊匹配。我看到了一些 "easy" 解决方法。

选项 1:利用 Watson 的置信水平。

如果您将 <? entities ?> 放在节点的响应中并在 试用面板 中对其进行测试,您会注意到每个检测到的实体都有一个相关联的置信度用它。这是 Watson 对实体的置信度,表示为 0 到 1 之间的浮点数。

使用您的实体值和同义词对其进行测试时,amsterdaam 的置信度为 90%(即 0.9),但 am 的置信度仅为 70%。

因此,假设这些数字对您适用,您可以使用 entities[0].confidence > 0.7 作为节点中的条件来决定何时将机场分配给上下文变量以及何时在响应中要求用户进行澄清.

您可能需要进行一些测试,看看您是否可以找到一个合理有效的置信度值作为您的 @airport 实体值及其常见拼写错误的阈值。

选项 2:使用两个实体

  1. @airport-code: 使用机场代码作为值,没有同义词,也没有启用模糊匹配。
  2. @airport-name:使用机场名称作为值,包括城市在内的各种同义词,并启用模糊匹配。

根据您的聊天机器人的工作方式,这可能是一个可以接受的妥协或使您的逻辑过于复杂。

我举个例子。如果您的 $airport 上下文变量无论存储 AMS 还是 Amsterdam Airport Schiphol 都有效,则此解决方案可以按原样为您解决问题。如果不是,则在将值分配给 $airport 上下文变量之前还有一个额外的步骤。即,您可能需要执行查找以检索给定机场名称的机场代码。