某些上下文:Node.js,Bot,natural module。
我想构建一个Bot,我正在使用自然模块来解析和整体分类用户输入。
var classifier = new natural.BayesClassifier();
classifier.addDocument('Hi', 'welcome');
classifier.addDocument('Hello', 'welcome');
classifier.addDocument('Hey', 'welcome');
classifier.addDocument('Good', 'welcome');
...
//back to home
classifier.addDocument('go back to home', 'back2home');
classifier.addDocument('go back home', 'back2home');
classifier.addDocument('return', 'back2home');
classifier.addDocument('return to home', 'back2home');
...
classifier.train();
...
classifier.classify(text);
这些测试工作正常:
"I would like to go back home" => back2home
"Hi" => welcome
一切都很好,但是如果用户文本中包含以下内容:" bla bla bla",我想知道文本在上述任何一种情况下都不适合。 " bla bla bla"返回我=>欢迎,但实际上我希望它返回一些这样的东西"未知" /不理解。
这是一种培训"这样的分类器? 感谢。
答案 0 :(得分:2)
您可以使用getClassifications()
方法获取分类列表以及相关分数或“置信度”。从该列表中,您可以确定最佳匹配项(如果有)。例如:
console.log(classifier.getClassifications('blah blah blah'));
输出:
[ { label: 'welcome', value: 0.5 },
{ label: 'back2home', value: 0.5 } ]
这个例子不是很好但你可以看到它与任何一个标签都不匹配。 value
越高,置信度越高。
您可以检查它的值以确保它高于某个级别。我喜欢使用0.8
作为我的检查值。循环结果。
const results = classifier.getClassifications('blah blah blah');
let intents = [];
// Check for confidence greater than 8
results.forEach((result) => {
if(result.value > 0.8) {
intents.push(result);
}
});
// Sort intents array by object.value
intents.sort((a,b) => {
if(a.value < b.value) {
return -1;
}
if(a.value > b.value) {
return 1;
}
return 0;
});
现在你有一个intents
数组,置信度大于0.8,按其置信度得分降序排列。
https://github.com/NaturalNode/natural#classifiers的更多信息 归功于排序函数Sort array of objects by string property value in JavaScript