情感分类推荐使用什么算法和软件包
发布网友
发布时间:2022-04-19 22:13
我来回答
共1个回答
热心网友
时间:2022-04-27 11:24
从最基本的开始吧: 基于词典的正负词词频, 我们实验室一个小组曾经在新浪微博上使用这个方法, 惊讶的发现这个如此不优美的方法的效果竟然那么的“可以看”。 在此之上一个改进的办法是对大量数据做一次二元的离散化(假定是正负情感), 以此选定阈值, 离散化的方法有很多, 不再赘述。
接下来的方法主要分为两类:
基于特征(feature-based):
这类方法比较好理解, 无非是人来选定特征空间, 然后对每一个数据项生成一个特征向量, 使用分类器对向量进行分类, 理论上所有的分类器都可以实现这个需求, 只是效果更不同。
方法之一是就是KNN, 但是和所有基于特征的方法一样, 特征的选取是一个永恒的话题,像KNN这种还需要维护巨大矩阵的方法尤其难以满足实用需求, 但是对于KNN的空间优化也有相应的办法, 就是对每个数据项指记录K项最近距离, 也就是K个<数据项ID, 距离>, 当有更近的数据项进来时, 替换最远的数据项, 此外, 我也同意@范文阁下的观点, 觉得KNN的效果不会好于SVM。
SVM: 经典分类器, 我决不敢自称完全理解SVM, 但使用方法大同, 也是将数据项生成特征向量(稍后会介绍另一种方法), 但是特征的选取是一个永恒的话题, 因为一切特征对于描述一个数据项来说都是必要的(但是不一定重要), 但是我们尽量选取合适的特征组来保证分类的准确率, 这一切, 这所做的一切都是对无法枚举出所有特征的现状的妥协。 SVM的开源包有很多, 楼主可以试试libsvm和svmlight。
基于核函数(KernelMethod-based):
前面提到人为的选取特征的局限性, 并且隐含的线性不可分问题。 核函数是一个计算两个对象之间“相关度”(kernel)的函数。 有关核函数的定义和优化方法不一会儿能够谈清, 仅列出文献:
wiki:http://en.wikipedia.org/wiki/Kernel_methods
Text Classification using String Kernels:http://dl.acm.org/citation.cfm?id=944799&dl=ACM&coll=DL&CFID=96216241&CFTOKEN=33225628
Kernel Method for General Pattern Analysis:http://www.kernel-methods.net/tutorials/KMtalk.pdf
(*以下方法没有经过验证)
基于核函数的SVM, 应用方式(以情感分类为例)可以简单地做文本分类(当然可以预先做词性过滤), 对于每一个需要做情感分类的文本之间算出kernel值, 用这个矩阵在svm中得到model, 然后对于测试数据, 或者预测数据在对训练数据中的每一项算kernel值, 拿这个矩阵用model去做测试(预测)。 这个过程的一个“快餐”的理解方式是: 将每一个数据与测试数据集中的每一项的相似度的向量当成之前feature-based的方法中的特征向量, 整个过程不过还是一个基于特征的训练-预测过程(当然, 这说法是不对的)。 libsvm中自带subsequence kernel 的实现使用参数-t来进行使用, 此外也支持自定义核函数。
之前谈过的KNN, 我觉得也可以引入kernel, 但是至于可行性和必要性嘛, 大家也就当讨论一下吧。 简单来说就是将KNN中的欧式距离替换成kernel值。
==============================
CRF应该没办法做情感分类吧, 毕竟不是分类器, 拿它做过实体识别, 感觉序列标注器不适合这个问题。
严重同意@范文阁下的说法, 在实用领域, 预处理和数据获取(语料)才是王道, 机器学习就和人学习一样, 教育方法再好, 教的东西不好一样是浮云。 拿我大二数据挖掘老师的话讲, 统计模型都是现成的, 拼得就是数据。