NLTK - 多标签分类

7
我正在使用NLTK对文档进行分类,每个文档有1个标签,共有10种类型的文档。
为了进行文本提取,我正在清理文本(去除标点符号、HTML标记、小写化),删除nltk.corpus.stopwords以及我自己的停用词集合。
对于我的文档特征,我正在查看所有50k个文档,并收集前2k个单词,按频率排序(frequency_words),然后对于每个文档,确定文档中也在全局frequency_words中的单词。
然后,我将每个文档作为{word: boolean}哈希映射传递给nltk.NaiveBayesClassifier(...),我在总文档数方面采用20:80的测试训练比例。
我遇到的问题:
  1. 这个由NLTK提供的分类器是否适用于多标签数据?所有我看到的例子都更多地涉及2类分类,例如某物是被声明为积极或消极
  2. 这些文档应该具有一组关键技能,但不幸的是,我没有一个包含这些技能的语料库。因此,我采用了一种理解方式,即每个文档的单词计数不是一个好的文档提取器,这样做正确吗?每个文档都是由个人编写的,所以我需要留下个体差异的空间。我知道SkLearn MBNaiveBayes 处理单词计数。
  3. 是否有其他库或此算法的变体我应该使用?

谢谢!


通过多标签数据,您是指一个文档可以有多个标签,还是指有超过两个标签? - Hans Then
好的。我没有很好地理解你的第二个问题。你所说的“每个文档的单词计数”是什么意思?你的意思是执行某种形式的降维(“收集前2k个单词”)吗? - Hans Then
因此,在从每个文档中提取特征时,您可以只计算单词数量,使用nltk.FreqDist创建哈希映射,例如{'manage':1029,....},这可以传递给NaiveBayes算法以训练分类器。 - redrubia
NLTK可以将文本分类到多个类别中,只需提供一个带有多个标签的训练集。您可能可以忽略作者之间的个体差异,并像您所描述的那样使用FreqDist。 - Hans Then
让我们在聊天中继续这个讨论。点击此处进入聊天室 - Hans Then
显示剩余4条评论
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,我能够在一周内获得结果,考虑到数据集非常庞大以及其他困难。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接