NLTK - 多标签分类

7 投票
1 回答
2460 浏览
提问于 2025-04-18 06:01

我正在使用NLTK来对文档进行分类,每个文档都有一个标签,总共有10种文档类型。

在提取文本时,我会先清理文本,包括去掉标点符号、去掉HTML标签、把字母转换成小写,还会去掉NLTK自带的停用词,以及我自己收集的停用词。

在处理文档特征时,我会查看所有5万份文档,找出出现频率最高的2000个单词(称为frequency_words),然后在每个文档中识别哪些单词也出现在这个全局的frequency_words中。

接着,我把每个文档作为一个哈希表({word: boolean})传入nltk.NaiveBayesClassifier(...)。我将文档分为80%用于训练,20%用于测试。

我遇到的问题有:

  1. NLTK的这个分类器适合处理多标签数据吗?我看到的例子大多是关于二分类的,比如判断某个东西是正面还是负面
  2. 这些文档应该包含一组关键技能,但我没有找到包含这些技能的语料库。所以我认为单纯通过每个文档的单词计数来提取文档信息并不好,这样理解对吗?每个文档都是个人写的,所以我需要考虑到文档中的个体差异。我知道SkLearn有一个MBNaiveBayes,它处理单词计数。
  3. 我是否应该使用其他库,或者这个算法的变种?

谢谢!

1 个回答

3

术语解释:我们需要把文档分成10个不同的类别,这就叫做多类别分类问题。如果你想给文档贴上多个标签,那就叫做多类别多标签分类。

针对你遇到的问题,

  1. nltk.NaiveBayesClassifier() 是一个现成的多类别分类器。所以你可以用它来解决这个问题。对于多标签数据,如果你的标签是 a, b, c, d, e, f, g, h, i, j,那么你需要把某个文档的标签 'b' 定义为 '0,1,0,0,0,0,0,0,0,0'。

  2. 特征提取是分类(机器学习)中最难的部分。我建议你研究一下不同的算法,了解它们,选择最适合你数据的那个(在不了解你数据的情况下,很难推荐具体使用哪个算法或实现)。

  3. 有很多不同的库可以用来进行分类。我个人使用过 scikit-learn,觉得它是一个很不错的现成分类器。

注意:使用 scikit-learn,我在一周内就能得到结果,尽管数据集很大,还有其他一些问题。

撰写回答