谷歌对话流检测到错误的意图



我们正在使用谷歌对话流实现我们定制的聊天机器人。我在对话框流中创建了一些意图,如下所示。

Intent : DVR
Training Phrases : 
Unable to play DVR
Unable to play Recording
Not able to list Recordings
Intent : listings
Training Phrases : 
Where are my TV listings
Intent : movies
Training Phrases : 
Unable to play Movies
Unable to list movies
Intent : new movies
Training Phrases : 
New movies are not getting listed
Very few new movies are getting listed
How can I buy new movies on mobile app?
New Movies not displayed
Seeing blank entries on New Movies
Seeing blank titles on New Movies

对话框流中的意图顺序如上所述->DVR、列表、电影、新电影

创建的实体如下。

DVR -> DVR, Recordings, Record
Listings -> listings
Movies -> movies
New_Movies -> new movies

当我尝试下面的文本时,它们都很好。

unable to play recording -> detected intent : DVR, Entity : DVR
unable to play DVR -> detected intent : DVR, Entity : DVR
Unable to play movies -> detected intent : movies, Entity : Movies

第一个问题:当我尝试">无法播放新电影"时,检测到的意图是新电影(具有"intentDetectionConfidence":0.81950855((实体:new_movies(。我不知道这是怎么回事,尽管我没有在"新电影"下面加上任何训练短语,比如不能玩。

Unable to play New Movies -> detected intent : new movies, Entity : New_Movies, Confidence : 0.81950855

第二个问题:如果我尝试">无法播放DVR新电影",则未检测到"DVR"意图和"DVR"实体。它将意图检测为"新电影",将实体检测为"new_movies",如下所示。

Unable to play DVR New Movies -> detected intent : new movies, Entity : New_Movies, Confidence : 0.7595941
Unable to play DVR 'New Movies' -> detected intent : new movies, Entity : New_Movies, Confidence : 0.7595941

我不知道为什么对话流会这样。请任何人告诉我如何解决这些问题(为什么DVR意图未被检测到,为什么DVR实体未被检测(。

我刚才又发现了一个问题。下面是我在谷歌对话流中写的另一个意图。

Intent : Remove Device
Training Phrases : 
Having issues with device removal
Unable to remove the device from registration
Unable to remove the device
Issue with Registration removal

现在我试着用文本">不能玩">它应该检测意图"DVR",但它检测到意图"删除设备",该设备没有任何与播放相关的训练短语

有两种类型的匹配算法用于将短语分配给特定的意图(1(。我相信这些算法都不能在您的特定情况下如预期那样工作:

-针对不同意图给出的训练短语的语法非常相似。这可能会导致模型混乱:

"无法播放DVR,无法播放电影,无法删除设备">

要解决这个问题,您应该提供各种不同的结构,例如"无法、不能玩、不允许、不可用"。

-如(1(所述,准确的ML匹配需要大量的训练短语示例。否则,该模型将不会针对您的特定用例进行微调,并且会混淆一些短语,尽管对人类来说可能看起来很简单,但它们有点相似:

"列表录制、电视节目表、列表电影、新电影正在获取列出">

计算机理解语言的方式与人类不同。通常,模型是为一般目标而训练的,因此,你提供的训练示例越多,它们就越能适应特定的用例。

最后,还有一个关于您所描述的Dialogflow代理的问题。考虑到意图相当相似,某些意图可能会为某些短语获得几乎相同的置信度分数。当这种情况发生时,将以最高分数为准(例如0.76比0.74(。这可以通过配置意图优先级(2(来部分解决。

关于你上面描述的三个问题:

-1st:即使你没有把"无法"放在这个意图中,它也是唯一具有实体"新电影"的意图。然而,请记住,实体"新电影"包含实体"电影",在许多情况下,这两个意图会混淆。

-第二:这个短语包含三个不同意图的实体"新电影"、"电影"one_answers"DVR"。也许所有这些意图都会得到超过阈值的分数,但只有最高的一个占上风。因此,这并不是说DVR的意图没有被检测到,只是"新电影"的意图可能会得到稍高的分数。

-3d:"Unable to play"(无法播放(不会向代理提供足够的信息来确定要触发的意图。考虑到你有"无法播放电影"的训练短语,它甚至可能被检测为"电影"。"cannot play"中不存在任何实体,并且有多个意图与语法结构"cannot"匹配。

总而言之,你们的意图太相似了,训练短语也太少了。请记住,其中一些例子即使对人类来说也很难分类("不会玩"(。

祝你今天愉快!

最新更新