NLTK - 多标记分类

时间:2014-05-09 18:39:57

标签: python nlp nltk document-classification

我正在使用NLTK对文件进行分类 - 每个文件有1个标签,有10种文件。

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

对于我的文档功能,我查看所有50k文档,并按频率(frequency_words)收集前2k个单词,然后为每个文档识别文档中哪些单词也在全局frequency_words中。

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

我遇到的问题:

  1. NLTK的分类器是否适用于多标记数据? - 我看到的所有例子都是关于2级分类的,例如是否将某些内容声明为positive or negative.
  2. 这些文件应该具备一系列关键技能 - 遗憾的是,我还没有这些技能所在的语料库。所以我采取了理解的方法,每个文件的字数不是一个好的文件提取器 - 这是正确的吗?每份文件都是由个人撰写的,因此我需要为文件中的个别变化留出让路。我知道SkLearn MBNaiveBayes处理字数。
  3. 是否有我应该使用的替代库,或者此算法的变体?
  4. 谢谢!

1 个答案:

答案 0 :(得分:2)

术语:文档将被分为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,我可以说这是一个很好的开箱即用分类器。

  4. 注意:使用scikit-learn,我能够在一周内获得结果,因为数据集是巨大的和其他挫折。