与聚类的区别
聚类是无监督学习而分类是监督学习
聚类是根据密度,距离等将数据集分成若干个簇,而分类是根据训练集提供的标签,训练模型,达到将文本归到某个固定的类中.
卡方特征
在构建词袋模型的过程中,有些对特征影响很小的词语(如助词,标点符号等).可以使用停用词,但不一定准确。这个时候,可以使用卡方特征
卡方特征通过统计某词语在某种特定类型的文档中出现的次数,计算该词语出现在某类型文档上的数学期望,再通过查表的方式计算两者独立的置信度.这个置信度越低,说明该词语和该类文档关联的可能性越高.
利用卡方特征提取后,可以减少词袋向量的长度,降低运算的复杂度
朴素贝叶斯分类器
基本原理
典型的生成模型.
通过贝叶斯定理将联合概率转换为先验分布和条件概率
p(x = x, y = y1) = p(y = y1)* p(x = x|y=y1)
p(y = y1) 通过统计的方法,利用极大似然估计很好估计
而p(x = x|y=y1)就不是很好估计
这时朴素贝叶斯假设X之间完全独立,也就是p = (x = x|y=y1) = p(x = x1|y = y1)*p(x = x2|y = y1)…
这也就是朴素二字的由来
在预测种类时,取能使p(x = x, y = y1) 最大的y为预测种类
优点
贝叶斯分类器适合多分类任务,适合增量式训练,对于大规模数据,计算复杂度较低,同时算法原理比较简单易懂。
缺点
特征独立的假设显然不成立,会影响准确性;并且对输入的数据比较敏感
支持向量机(svm)
前面我们学习了感知机,通过使用超平面划分数据集来达到序列标注的目的
感知机追求最大正确划分,非常容易导致过拟合;而支持向量机追求大致正确划分,且能一定程度避免过拟合(因为它追求的是最大化所有样本点的集合间隔的最小值,所以当出现噪声的时候,不会产生太大的影响;而感知机追求的是通过超平面尽可能多的将样本点划分,噪声容易产生影响)
SVM存在的不足之处
不适合样本过大的情况,因为其时间复杂度较高
hanlp实现
hanlp中封装了支持向量机分类器, 下面是实现代码
训练模型:
def train_or_load_classifier():
model_path = sogou_corpus_path + '.svm.ser'
if os.path.isfile(model_path):
return LinearSVMClassifier(IOUtil.readObjectFrom(model_path))
classifier = LinearSVMClassifier()
classifier.train(sogou_corpus_path)
model = classifier.getModel()
IOUtil.saveObjectTo(model, model_path)
return LinearSVMClassifier(model)
预测:
predict(classifier, "text")
另外,只要把文本种类改成“正面”与“负面”,修改训练集,不需要改变代码,就可以实现情感分析
文本分类的步骤
根据本书提供的步骤,大概可分为
构建模型(朴素贝叶斯,svm等)
投入大量带标签的数据集进行训练
训练时通过卡方特征去除一些与本次分类关联较小的词语,减少运算量
预测