Я использую StanfordNLP для классификации текста. У меня есть тренировочный набор с двумя ярлыками: ДА и НЕТ. Обе метки имеют более или менее одинаковые значения для каждой метки (~ = 120K).
Проблема в том, что StanfordNLP неправильно классифицирует какой-то текст, и я не могу определить, почему. Как мне отладить его?
Мой файл поезда выглядит так:
YES guarda-roupa/roupeiro 2 portas de correr
YES guarda-roupa/roupeiro 3 portas
YES guarda roupa , roupeiro 3 portas
YES guarda-roupa 4 portas
YES guarda roupa 6p mdf
YES guardaroupas 3 portas
YES jogo de quarto com guarda-roupa 2 portas + cômoda + berço
YES guarda roupa 4pts
NO base para guarda-sol
NO guarda-sol alumínio
NO guarda chuva transparente
NO coifa guarda po alavanca cambio
NO lancheira guarda do leao vermelha
NO hard boiled: queima roupa
NO roupa nova do imperador
NO suporte para passar roupa
Метка YES обозначает «guarda roupa» (гардероб), а NO обозначает вещи, которые не являются «guarda roupa», но содержат одно или несколько общих слов (например, «guarda chuva» - зонтик или «roupa» - одежда).
Я не знаю почему, но моя модель настаивает на том, чтобы классифицировать «guarda roupa» (и его вариации, такие как «guardaroupa», «guarda-roupas» и т. Д.) Как НЕТ ...
Как мне отладить это? Я уже дважды проверил свой файл поезда, чтобы увидеть, не ошибся ли я, что-то ошибся, но не смог найти ...
Любой совет приветствуется.
ОБНОВЛЕНИЕ 1
Я использую следующие свойства для управления созданием объектов:
useClassFeature=false
featureMinimumSupport=2
lowercase=true
1.useNGrams=false
1.usePrefixSuffixNGrams=false
1.splitWordsRegexp=\\s+
1.useSplitWordNGrams=true
1.minWordNGramLeng=2
1.maxWordNGramLeng=5
1.useAllSplitWordPairs=true
1.useAllSplitWordTriples=true
goldAnswerColumn=0
displayedColumn=1
intern=true
sigma=1
useQN=true
QNsize=10
tolerance=1e-4
ОБНОВЛЕНИЕ 2
В поиске API я обнаружил, что ColumnDataClassifier
имеет метод getClassifier()
, который дает доступ к базовому LinearClassifier
, который имеет метод dump()
. Свалка производит вывод, который выглядит как ниже. Из API: "Print all features in the classifier and the weight that they assign to each class.
"
YES NO
1-SW#-guarda-roupa-roupeiro-2portas 0,01 -0,01
1-ASWT-guarda-roupa-roupeiro 0,19 -0,19
1-SW#-guarda-roupa-roupeiro 0,19 -0,19
Если я введу toString()
в LinearClassifier
, будет напечатано:
[-0.7, -0.7+0.1): 427.0 [(1-SW#-guarda-roupa-roupeiro-2portas,NO), ...]
[0.6, 0.6+0.1): 427.0 [(1-SW#-guarda-roupa-roupeiro-2portas,YES), ...]