是否有办法改变意图检测的阈值/敏感度?
目前,我在一个包含以下消息的模型上进行了训练:
// "message.delete" intent
Delete last message by %user%
Delete last %count% messages by %user%
Delete last message in %channel%
Delete last message from %user% in %channel%
Delete last %count% messages from %user% in %channel%
现在,任何包含单词“message”的提示都被标记为“message.delete”意图。有没有办法改变敏感度,以便不那么激进地标记意图?
2条答案
按热度按时间5q4ezhmt1#
是的,这非常重要。我花了一个小时到处寻找,NER有一个阈值设置,但似乎在NLP管理器中无法设置它...这使得这个库在我的应用中无法使用,即当意图无法识别时,将消息传递给LLM。
c3frrgcw2#
[解决方法] result.score 在每条消息上 ... result.action 也存在。
这个模式在意图上执行了功能,并微调了分数,或者定义了一个单独的变量:
await nlp.process('en', message).then(async result => { const intent = result.intent; const score = result.score; if (intent==='greetings.hello' && score>=0.99) { } else if (intent==='greetings.bye' && score>=0.99) { } else if (intent==='greetings.name' && score>=0.99) { } else if (intent==='weather' && score>=0.99) { } else { //default when intent:none }
这对于传递给语料库中每个意图注册的响应是有效的:
if (intent!='None' && score>=0.9) { console.log(result.answer); } else { //default intent:none console.log('Message passed to LLM. Awaiting...'); };
还有一个对象,其中包含每个意图的分数,可以将其与消息中排名的具体意图进行比较。应该提供一些灵活的触发逻辑。
result.classifications: [ { intent: 'weather', score: 0.6301063890655614 }, { intent: 'greetings.name', score: 0.3698936109344386 }, { intent: 'greetings.bye', score: 0 }, { intent: 'greetings.hello', score: 0 }
附注:仅加载初始测试意图会产生很多误报,我通过添加更多的短语和意图来评分以减少这种情况的发生,这样更不可能得到“1”的评分。Huggingface 有一些可以提取到语料库中的意图数据集,用于噪声或初始意图。