在node.js上训练意外句子的分类器(自然 - NLP)

时间:2016-05-15 19:53:43

标签: node.js nlp classification

某些上下文: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"返回我=>欢迎,但实际上我希望它返回一些这样的东西"未知" /不理解。

这是一种培训"这样的分类器? 感谢。

1 个答案:

答案 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