2016-05-15 20 views
1

某些上下文:Node.js,Bot,natural modulenode.js上的列車分類器(自然 - NLP)用於意外的句子

我想建立一個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」返回我=>歡迎,但實際上我希望它返回一些「未知」/未被理解的東西。

這是一種以這種方式「訓練」分類器的方法嗎? 謝謝。

回答

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