使用 SVM 对文本数据进行多标签分类

Posted

技术标签:

【中文标题】使用 SVM 对文本数据进行多标签分类【英文标题】:Multi-label classification using SVM for text data 【发布时间】:2018-10-02 09:58:20 【问题描述】:

我有一个 Excel 文件中的数据,我需要使用它来使用 SVM 执行多标签分类。它有两列,如下所示。 'tweet' - A,B,C,D,E,F,G 和 'category' = X,Y,Z

推文类别

乙是

CZ

D X,Y

Y,Z

F X,Y,Z

G X,Z

给定一条推文,我想训练我的模型来预测它所属的类别。推文和类别都是文本。我正在尝试使用 Weka 的 LibSVM 分类器进行分类,因为我阅读它进行多标签分类。我将 csv 文件转换为 arff 文件并将其加载到 Weka 中。然后我运行了“LibSVM”分类器。但是,我得到的结果很差,如下所示。知道我做错了什么吗? “LibSVM”甚至可以进行多标签文本分类吗?

正确分类的实例 82 25.9494 %

错误分类的实例 234 74.0506 %

Kappa 统计量 0

平均绝对误差 0.0423

均方根误差 0.2057

相对绝对误差 89.9823 %

相对平方根误差 134.3377 %

实例总数 316

【问题讨论】:

【参考方案1】:

SVM 绝对可以用于多类分类。 我以前没有使用过 Weka LibSV,但如果你还没有使用过,则需要在输入文本进行任何分类之前进行一些数据清理。 清理的类型还取决于您的分类任务,但您可以查看以下在实践中用于文本分析的技术:

1) 从文本中删除 twitter 句柄

2) 删除停用词或您确定不会影响分类的词。也许您只能保留代词并删除任何其他词。您可以使用 POS 标记来执行此任务。更多信息here

3) 删除标点符号

4) 使用 n-gram 从文本中获取上下文含义。 This 网站对它的工作原理有一些很好的解释。从本质上讲,这意味着您会将一系列单词视为一个特征,而不是将单个单词用作模型中的数据点。请注意,这可能会影响模型在训练时占用的内存量。

5) 删除数据集中出现太频繁或不太频繁出现的词。

6) 在您的案例中平衡您的课程或类别。这意味着在训练模型之前,请确保训练数据具有相似数量的 X、Y 和 Z 类别。您的数据可能有很多分类为 X 和 Y 的推文,但在您的测试集中,您有大部分映射到 Z 类别的推文。

【讨论】:

以上是关于使用 SVM 对文本数据进行多标签分类的主要内容,如果未能解决你的问题,请参考以下文章

Python:如何在多标签类的 SVM 文本分类器算法中找到准确度结果

大型数据集的多标签分类

Sklearn Linear SVM 无法在多标签分类中进行训练

多标签文本分类,每个训练数据的类标签分布不均匀

opencv SVM多分类 人脸识别

使用 Sklearn 进行多标签文本分类