Python NLTK-多标签分类

Python NLTK-多标签分类,python,nlp,nltk,document-classification,Python,Nlp,Nltk,Document Classification,我使用NLTK对文档进行分类,每个文档有一个标签,有10种文档类型 对于文本提取,我正在清理文本(标点符号删除、html标记删除、小写)、删除nltk.corpus.stopwords以及我自己的stopwords集合 对于“我的文档”功能,我查看了所有50k个文档,并按频率(frequency_words)收集了前2k个单词,然后针对每个文档确定文档中哪些单词也在全局frequency_words中 然后,我将每个文档作为{word:boolean}的hashmap传递到nltk.NaiveB

我使用NLTK对文档进行分类,每个文档有一个标签,有10种文档类型

对于文本提取,我正在清理文本(标点符号删除、html标记删除、小写)、删除nltk.corpus.stopwords以及我自己的stopwords集合

对于“我的文档”功能,我查看了所有50k个文档,并按频率(frequency_words)收集了前2k个单词,然后针对每个文档确定文档中哪些单词也在全局frequency_words中

然后,我将每个文档作为
{word:boolean}
的hashmap传递到nltk.NaiveBayesClassifier(…)中,相对于文档总数,我有一个20:80的测试训练比率

我面临的问题是:

  • NLTK的分类器是否适用于多标签数据我所看到的所有示例都更多地是关于2类分类的,例如某个东西是否声明为
  • 这些文档应该有一套关键技能——不幸的是,我还没有一个语料库来展示这些技能。所以我采取了一种理解的方法,每个文档的字数并不是一个好的文档提取器——这是正确的吗?每个文档都是由个人编写的,因此我需要为文档中的个别变化留出余地。我知道SkLearn处理单词计数
  • 是否有我应该使用的替代库,或者该算法的变体

  • 谢谢

    术语:将文档分为10个不同的类别,这使其成为一个多类别分类问题。此外,如果要使用多个标签对文档进行分类,则可以将其称为多类多标签分类

    对于您所面临的问题

  • NaiveBayesClassifier()是一个现成的多类分类器。所以你可以用这个来解决这个问题。根据多标签数据,如果标签为a、b、c、d、e、f、g、h、i、j,则必须将特定文档的标签“b”定义为“0,1,0,0,0,0,0,0”

  • 特征提取是分类(机器学习)中最难的部分。我建议您研究不同的算法,以了解并选择最适合您的数据的算法(不查看您的数据,很难推荐使用哪种算法/实现)

  • 有许多不同的图书馆可以分类。我个人使用了scikit learn,我可以说它是一个很好的开箱即用的分类器


  • 注意:使用scikit learn,我能够在一周内取得成果,因为数据集非常庞大,而且还遇到了其他挫折

    多标签数据是指一个文档可以有多个标签,还是指有两个以上的标签?如果有两个以上的标签,大约有10个。每个文档只有一个labelOkay。我不太明白你的第二个问题。“每个文档的字数”是什么意思?您的意思是说您执行了某种形式的降维(“收集前2k个单词”)?因此,在从每个文档提取特征时,您只需计算单词数,就可以使用nltk.FreqDist创建哈希图,即{'manage':1029,…..}这可以传递给NaiveBayes算法进行训练,classifierNLTK可以在多个类别中进行分类,只需提供一个带有多个标签的训练集。您可以忽略作者之间的个体差异,使用您描述的FreqDist。