#java #machine-learning #stanford-nlp #text-classification
Вопрос:
Я пытаюсь выполнить базовую классификацию текста с помощью классификатора Стэнфорда. Мой пример набора данных основан на ветчине или Спаме.
Это мой код:
Properties props = new Properties();
ColumnDataClassifier cdc = new ColumnDataClassifier(props);
Classifier<String, String> cl = cdc.makeClassifier(cdc.readTrainingExamples("data.train"));
for (String line : ObjectBank.getLineIterator("data.test", "utf-8")) {
Datum<String, String> d = cdc.makeDatumFromLine(line);
System.out.println(line " ==> " cl.classOf(d));
}
Однако, какой бы текст я ни пытался классифицировать, он всегда классифицирует его как Ветчину. Следующее предложение явно является спамом, тем не менее оно классифицируется как Ветчина:
БЕСПЛАТНОЕ СООБЩЕНИЕ Активируйте свои 500 БЕСПЛАТНЫХ текстовых сообщений, ответив на это сообщение словом БЕСПЛАТНО Для условий и положений, посетите www.example.com
В чем моя ошибка?
Комментарии:
1. Тот факт, что есть несколько ошибок, неудивителен, но есть более серьезная проблема, поскольку она предсказывает каждый экземпляр с меткой большинства. Сначала вы можете проверить, правильно ли интерпретированы обучающие данные, т. Е. У каждого экземпляра есть метка, которую он должен иметь после
readTrainingExamples
. Я предполагаю, что там что-то идет не так, возможно, формат не соответствует ожиданиям функции. Также возникает вопрос о размере обучающего набора: если он слишком мал, классификатор, вероятно, будет по умолчанию все время использовать класс большинства.
Ответ №1:
Моя ошибка заключалась в том, что я не предоставил никаких свойств:
Properties props = new Properties();
ColumnDataClassifier cdc = new ColumnDataClassifier(props);
Вы можете либо указать свойства непосредственно в коде:
// set up pipeline properties
Properties props = new Properties();
// set the list of annotators to run
props.setProperty("annotators", "tokenize,ssplit,pos,lemma,ner,parse,depparse,coref,kbp,quote");
// set a property for an annotator, in this case the coref annotator is being set to use the neural algorithm
props.setProperty("coref.algorithm", "neural");
Или вы можете предоставить файл свойств:
ColumnDataClassifier cdc = new ColumnDataClassifier(propFile);