我正在使用 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
预测“I”的类仍然返回 label.i_don't_know,即使文本正好在这样的训练数据中,这可能是由于一元组“I”在 label.i_don't_know 中出现的频率高于 label.i_don't_know在标签.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。