部分提问无法命中带有槽位的意图,也无法提取槽位中的词典信息
现在行为
我的clientId为: 641801eab1fcf4001379a113
创建了意图 goods_state,查询语句设置为 查询${mbl}状态 查看提单号为{mbl}的货物状态
在云平台进行意图测试 语句"查看提单号为SNLDSHPLMF03436的货物状态",能够正确识别意图,并且提取到字典信息:SNLDSHPLMF03436 语句"查询SNLDSHPLMF03436状态",不能够正确识别意图。 语句"查看提单号为SNLDSHTLMF01849的货物状态",不能够正确识别意图。
SNLDSHPLMF03436 和 SNLDSHTLMF01849 在字典表中都有存储。
@hailiang-wang
看起来是训练数据生成的有问题。 感谢反馈,今天下午开始解决,预计本周内可以解决。
经过查看您的机器人之前的训练过程,也就是有问题的模型的训练数据,发现其和您定义的词表不同,导致训练出来的模型有问题。
然后,我又进行以下工作:
1)在测试环境:通过复用您提供的 clientId 的机器人的数据,重新训练,发现意图识别工作正常。
2)在 Chatopera 云服务,即我们的生产环境,对您的机器人重新训练,语料生成正常,您现在可以验证一下 clientId 641801eab1fcf4001379a113 是否正常了。
对于以上工作,是可以确定,是机器人的训练过程中,自定义词典的词条没有全部作为输入进行训练,可能存在 BUG,接下来我们会继续的深入的解决。
对于您使用的一个临时方案:每次更改自定义词典的词条,都是在上一次训练完成之后。因为现在词典多,训练时间长,可能发生两个训练同时进行,这可能是造成问题的原因。
使用以下的 Java 代码进行训练:
this.trainMgr = new TrainMgr(botClientId,
botClientSecret,
"https://bot.chatopera.com");
// 提交训练任务
this.trainMgr.trainAll();
// 等待训练结束
this.trainMgr.waitForJobsDone();
对于意图识别模型的训练,有另外一些提醒:
- 正在训练的意图识别模型,不会影响已经发布的意图识别模型,也就是上一次训练的意图识别模型可以正常用,直到新的模型训练完成,之前的模型被替换。
- 意图识别的模型正在训练中,此时触发新的训练,那么两个模型是同时训练的,如果模型较大,不能保证按照触发的顺序完成训练。从时间上,最后一次训练成功的模型是生效的。
@halfray 有没有可能您之前使用的时候是这样:先发送了一些自定义词条,进行训练,然后又添加了一些自定义词条。那么第二次添加的词典,不会出现在意图识别训练的语料中,这样就会出现您遇到的问题。 在 Chatopera 云服务控制台上,此时打开聊天机器人的自定义词典,会有提示:词典不同步。
@hailiang-wang 每次同步词条后都会进行再次训练
this.trainMgr.trainAll();
this.trainMgr.waitForJobsDone();
在 Chatopera 云服务控制台上,打开聊天机器人的自定义词典,也没有“词典不同步”的提示
@hailiang-wang 每次同步词条后都会进行再次训练
this.trainMgr.trainAll(); this.trainMgr.waitForJobsDone();在 Chatopera 云服务控制台上,打开聊天机器人的自定义词典,也没有“词典不同步”的提示
那么,问题就是多个模型同时训练,最终生效的模型,没有使用最新的自定义词典。这个需要 Chatopera 优化一下,让最后触发的训练生效。但是为了保证数据的一致性,您可以在批量更新自定义词典后,调用训练,并等待完成。
该问题再次出现
我的clientId为: 641801eab1fcf4001379a113
创建了意图 goods_state,查询语句设置为 查看提单号为{mbl}的货物状态
在云平台进行意图测试 语句"查看提单号为SNLASHTLMF00024的货物状态",能够正确识别意图,并且提取到字典信息:SNLASHTLMF00024 语句"查看提单号为SNLESHJLMF03672的货物状态",不能够正确识别意图。
SNLASHTLMF00024 和 SNLESHJLMF03672 在字典表中都有存储。
@hailiang-wang