如何提高小文本的分类

时间:2015-12-29 15:02:02

标签: python machine-learning nlp text-classification

我获得的数据主要是推文或小评论(300-400个字符)。我使用了Bag-Of-Word模型并使用了NaiveBayes分类。现在我有很多错误分类的案例属于下面提到的类型: -

1.] He sucked on a lemon early morning to get rid of hangover.
2.] That movie sucked big time.

现在的问题是,在情绪分类期间,两者都会得到“消极的”#34;仅仅因为" sucked"

Sentiment Classification : 1.] Negative 2.] Negative

类似地,在文档分类期间,两者都被分类为"电影"由于存在单词" sucked"。

Document classification  : 1.] Movie    2.] Movie

这只是其中一个例子,我面临着大量错误的分类,并且对如何提高准确性一无所知。

2 个答案:

答案 0 :(得分:3)

(1) 使用Naive Bayes的Bag-of-Words中的一个直接可能的变化是生成Bag-of-Words特征的多项式组合。它可能会解决您上面显示的问题。

  

“sucked”+“lemon”(积极的)

     

“sucked”+“movie”(否定)

当然,您也可以生成n-gram的多项式组合,但功能的数量可能太大。

scikit-learn库为此目的准备了一个预处理类。

sklearn.preprocessing.PolynomialFeatures(http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PolynomialFeatures.html

理论上,具有多项式内核的SVM与PolynomialFeatures +线性SVM具有相同的功能,但在存储模型信息方面略有不同。

根据我的经验,PolynomialFeatures +线性SVM在短文本分类方面表现相当不错,包括情绪分析。

如果数据集大小不够大,训练数据集可能不包含“sucked”+“lemon”。在这种情况下,降维(如奇异值分解(SVD))和主题模型(如潜在Dirichlet分配(LDA))是适用于单词语义聚类的工具。

(2) 另一个方向是利用更复杂的自然语言处理(NLP)技术从短文本中提取附加信息。例如,词性(POS)标记,命名实体识别(NER)将提供比普通BoW更多的信息。一个名为Natural Language Toolkit(NLTK)的NLP python库实现了这些功能。

(3) 你也可以采取缓慢而稳定的方式。通过当前模型分析预测误差来设计新的手工制作特征是提高模型准确性的有前途的方法。

有一个名为LibShortText的短文本分类库,它还包含错误分析功能和预处理功能,如TF-IDF加权。它可以帮助您学习如何通过错误分析来改进模型。

LibShortText(https://www.csie.ntu.edu.tw/~cjlin/libshorttext/

(4) 有关详细信息,请查看有关推文情感分析的文献,将为您提供更多高级信息。

答案 1 :(得分:0)

也许您可以尝试使用更强大的分类器,如Support Vector Machines。此外,根据您拥有的数据量,您可以尝试使用卷积神经网络进行深度学习。为此,您需要大量的培训示例(100k-1M)。