提高文本分类的准确性

数据挖掘 机器学习 nlp 特征选择 支持向量机 情绪分析
2021-10-08 09:07:19

我正在研究一个文本分类问题,目标是将新闻文章分类到相应的类别,但在这种情况下,类别不是很宽泛,如政治、体育、经济等,但密切相关,在某些情况下案件甚至部分重叠。这是一个单类分类问题,而不是多类分类问题。以下是我使用的方法的详细信息。

数据准备 -

  1. 破坏单词列表中的文档。
  2. 删除了停用词、标点符号。
  3. 进行了词干化。
  4. 用“#num#”替换数值以减少词汇量。
  5. 将文档转换为 TF-IDF 向量。
  6. 根据 TF-IDF 值对所有单词进行排序并选择前 20K 单词,这些将用作分类算法的特征列表。
  7. 使用 SVM。

我有17 个类别的4,500 个分类文档,我使用80:20的比例来训练和测试数据集。我使用了 Sklearn python 库。

我设法获得的最佳分类准确度是61%,我需要它至少为85%

任何有关如何提高准确性的帮助将不胜感激。非常感谢。如果您需要更多详细信息,请告诉我。

4个回答

首先,在处理数据和提出基本模型方面做得很好。我建议您可以尝试几件事:

  1. 通过添加二元组和三元组作为特征来改进您的模型。
  2. 尝试使用指定数量的主题(例如 20 个)对语料库进行一些主题建模,例如潜在 Dirichlet 分配或概率潜在语义分析。您将获得一个包含 20 个概率的向量,对应于每个文档的 20 个主题。您可以使用该向量作为分类的输入,或者将其用作您已经从使用二元组和三元组增强的基本模型中获得的附加功能。
  3. 我要说的另一件事是尝试使用基于树的分类器集成来捕获特征之间的非线性和交互。随机森林或梯度提升都可以。在梯度提升中,您可以使用 xgboost 作为一个非常好的包,可以提供良好的分类。
  4. 如果您熟悉深度学习,您可以尝试使用循环神经网络架构(主要是 LSTM 版本)。

希望这会有所帮助,并让我知道这是否会提高您的分类准确性。

在考虑如何清理文本时,我们应该考虑我们正在尝试解决的数据问题。这里还有一些预处理步骤可以改进您的功能。

1.) 使用良好的分词器(textblob,stanford 分词器)

2.) 尝试 Lemmatization ,词干在新闻文章中总是表现不佳。

3.) 分词

4.) 归一化(术语的等价分类)

用于选择型号

1.)在上面的示例中,我们通过比较文档向量中匹配项的数量来对文档进行分类。在现实世界中,存在许多更复杂的分类算法,例如支持向量机 (SVM)朴素贝叶斯决策树最大熵

2.)您可以将您的问题视为制作新闻集群并从这些集群中获取源新闻的语义关系。您可以尝试主题建模(LDA 和 LSA)和Doc2vec/word2vec技术来获取文档/单词的向量,然后将这些向量用于分类任务。

此外,如果您在为问题选择合适的模型时感到困惑,您可以阅读此链接选择机器学习算法:Microsoft Azure 的教训

另一个重要的工具是规范您的文档/文本矩阵。例如,如果您有许多长文档和许多短文档,则长文档在文档/术语矩阵中的权重更高。如果您对每个文档行进行规范化,使所有文档行加起来为 1.0,这会为短文档和长文档提供更平等的权重。人们已经为文档/术语矩阵创建了几个非线性函数,以解决基础数据的各种问题。

这是我曾经写过的关于这个主题的一系列帖子: https ://ultrawhizbang.blogspot.com/2012/09/document-summarization-with-lsa-1.html

你应该试试 FastText,它是 Facebook 研究的开源库。https://fasttext.cc/docs/en/supervised-tutorial.html

您需要创建 Fasttext 算法所需的文件格式。

还遵循清洁文本的建议

  1. 将大小写更改为更低
  2. 删除超链接
  3. 尝试删除错字

Fasttext 自动将单词转换为 n-gram。所以你不需要担心。我用 Fasttext 得到了很好的结果

尝试监督学习中的自动调谐选项。

祝你好运