Я использую scikit для текстовой классификации коротких фраз в их значении. Вот некоторые примеры:Лучший классификатор scikit для задачи классификации текста
"Yes" - label.yes
"Yeah" - label.yes
...
"I don't know" - label.i_don't_know
"I am not sure" - label.i_don't_know
"I have no idea" - label.i_don't_know
Все работало довольно хорошо, используя TfidfVectorizer и классификатор MultinomialNB.
Проблема возникла, когда я добавил новый текст/метки пары:
"I" - label.i
Предсказание класс для «Я» по-прежнему возвращает label.i_don't_know, даже если текст именно в обучающих данных, как это , что, вероятно, связано с тем, что униграмма «I» чаще встречается в label.i_don't_know, чем в label.i.
Существует ли классификатор, который даст сопоставимую или лучшую производительность для этой задачи и гарантирует правильное отображение прогнозов элементов данных обучения?
Этот код иллюстрирует проблему далее:
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
#instantiate classifier and vectorizer
clf=MultinomialNB(alpha=.01)
vectorizer =TfidfVectorizer(min_df=1,ngram_range=(1,2))
#Apply vectorizer to training data
traindata=['yes','yeah','i do not know','i am not sure','i have no idea','i'];
X_train=vectorizer.fit_transform(traindata)
#Label Ids
y_train=[0,0,1,1,1,2];
#Train classifier
clf.fit(X_train, y_train)
print clf.predict(vectorizer.transform(['i']))
кода выводит метку 1, но правильная классификация будет метка 2.
Без воспроизводимого примера вашего кода будет очень сложно сказать, будет ли решение использовать другой классификатор или изменить способ использования существующих классификаторов. – Marius
Спасибо, я добавил пример кода. – Matt