2016-12-28 3 views
0

Я начал изучать обработку естественного языка и уже начал спотыкаться.НЛП: Классификация дает неправильный результат. Как узнать, что результат классификации НЛП неверен?

Я использую NodeJs для создания моего приложения с помощью NaturalNode library Natural Node GitHub project

Проблема

Я готовлю мой документ с несколькими сценариями, как показано ниже

/// importing package 
var natural = require('natural'); 
var classifier = new natural.BayesClassifier(); 



/// traning document 
classifier.addDocument("h", "greetings"); 
classifier.addDocument("hi", "greetings"); 
classifier.addDocument("hello", "greetings"); 
classifier.addDocument("data not working", "internet_problem"); 
classifier.addDocument("browser not working", "internet_problem"); 
classifier.addDocument("google not working", "internet_problem"); 
classifier.addDocument("facebook not working", "internet_problem"); 
classifier.addDocument("internet not working", "internet_problem"); 
classifier.addDocument("websites not opening", "internet_problem"); 
classifier.addDocument("apps not working", "internet_problem"); 
classifier.addDocument("call drops", "voice_problem"); 
classifier.addDocument("voice not clear", "voice_problem"); 
classifier.addDocument("call not connecting", "voice_problem"); 
classifier.addDocument("calls not going through", "voice_problem"); 
classifier.addDocument("disturbance", "voice_problem"); 
classifier.addDocument("bye", "close"); 
classifier.addDocument("thank you", "feedback_positive"); 
classifier.addDocument("thanks", "voice_problem"); 
classifier.addDocument("shit", "feedback_negeive"); 
classifier.addDocument("shit", "feedback_negeive"); 
classifier.addDocument("useless", "feedback_negetive"); 
classifier.addDocument("siebel testing", "siebel_testing") 


classifier.train(); 


/// running classification 
console.log('result for hi'); 
console.log(classifier.classify('hi')); 
console.log('result for hii'); 
console.log(classifier.classify('hii')); 
console.log('result for h'); 
console.log(classifier.classify('h')); 

Выход

result for hi: 
greetings 


result for hii: 
internet_problem 

result for h: 
internet_problem 

Как вы можете видеть, в результате ключевой работы hi величина приходит правильно, но если я неправильно hi для hii или ih то это дает неверный результат. Я не могу понять, как работает классификация, и как я должен обучать классификатор, или есть способ узнать, что результат классификации неверен, чтобы я мог попросить пользователя ввести его снова.

Любая помощь или объяснение или что-либо заслуживает высокой оценки. Спасибо заранее.

Пожалуйста, считайте меня нубом и прощайте за любую ошибку.

ответ

2

HII и Ih никогда не видели ваш классификатором раньше, так что если natural.BayesClassifier не делает некоторую предварительную обработку входных данных, он не знает, что делать с ними и таким образом классифицирует их, используя prior probability, полученный из частоты отдельных ярлыков класса: internet_problem - самый распространенный ярлык среди ваших 22 учебных примеров.

Редактировать 29/12/2016: Как обсуждалось в комментариях, можно обрабатывать «плохие» классификации, предлагая пользователю повторно вводить данные, для которых показатель достоверности классификации ниже заданного минимального порога :

const MIN_CONFIDENCE = 0.2; // Tune this 

var classLabel = null; 
do { 
    var userInput = getUserInput(); // Get user input somehow 
    var classifications = classifier.getClassifications(userInput); 
    var bestClassification = classifications[0]; 
    if (bestClassification["value"] < MIN_CONFIDENCE) { 
     // Re-prompt user in the next iteration 
    } else { 
     classLabel = bestClassification["label"]; 
    } 
} while (classLabel == null); 
// Do something with the label 
+0

есть ли способ узнать, не дал ли классификация неправильный результат, чтобы я мог попросить пользователя повторно ввести инструкцию. Большое спасибо за понимание. –

+0

В соответствии с документацией Natural Node вы можете получить доступ к уровням достоверности классификаторов, используя 'console.log (classifier.getClassifications ('i am long copper'));'. Если ваше предсказание soley опирается на предыдущие вероятности вашего класса, уровень уверенности должен быть относительно низким. –

+0

См. Обновленный ответ re. доверительный порог. – errantlinguist

Смежные вопросы