2016-05-15 5 views
1

いくつかのコンテキスト:Node.js、Bot、natural module予期せぬ文章のためのnode.jsの分類器(natural - NLP)

私はBotをビルドしたいと思います。ユーザー入力を解析し、全体的に分類するためにnaturalモジュールを使用しています。

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; 
}); 

あなたは今0.8よりも大きな自信を持ってintentsの配列を持って、その信頼性スコアで降順にソート。機能Sort array of objects by string property value in JavaScript

をソートするための https://github.com/NaturalNode/natural#classifiers
クレジットで

詳しい情報

関連する問題