NLTK/NLP 多对多/多标签主题分类器构建
我有一个人类标记的语料库,里面有超过5000个主题索引的文档,格式是XML。这些文档的大小从几百千字节到几百兆字节不等,既有短文章也有手稿。它们都被细致地标记到了段落级别。我很幸运能拥有这样一个语料库,现在我正在自学一些自然语言处理(NLP)的概念。老实说,我才刚开始,目前只读过免费的NLTK书籍、streamhacker,还有翻阅过jacobs(?)的NLTK食谱。我想尝试一些想法。
有人建议我可以使用二元组(bi-grams)和朴素贝叶斯分类法来标记新的文档。但我觉得这个方法可能不太对。朴素贝叶斯适合处理真假关系,但如果要在我的层级标签集上使用它,我需要为每个标签建立一个新的分类器,几乎有1000个标签。我有足够的内存和处理能力来完成这个任务,但对结果持怀疑态度。不过,我会先尝试这个方法,以满足某人的要求。我预计在接下来的一两天内能完成,但我预测准确率会很低。
所以我的问题有点开放式。主要是因为这个领域的性质以及我数据的特殊性,可能很难给出确切的答案。
对于这个任务,什么样的分类器比较合适?我是不是错了,朴素贝叶斯能否用于除了真假以外的操作?
我应该追求什么样的特征提取方法?我对二元组的期望不高。
每个文档还包含一些引用信息,包括作者、作者性别(男、女、混合),文档类型、出版日期(从16世纪到现在)、人类分析师,以及其他一些一般性元素。我也希望能有一些有用的描述性任务,帮助我更好地调查这些数据,比如性别偏见、分析师偏见等。但我意识到这有点超出这个问题的范围。
2 个回答
我明白你这里有两个任务需要解决。第一个任务是你想根据文章的主题给它打标签,这样这篇文章就可以被归类到多个类别中,这就是一个多标签分类的问题。为了解决多标签分类问题,有很多算法可以使用,建议你查阅相关文献。我在处理类似问题时发现这篇论文很有帮助:http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.104.9401
第二个问题是你想给论文打上作者、性别和文档类型的标签。这是一个多类问题——每个类别有两个以上的可能值,但所有文档在这些类别上都有一些值。
我认为第一步很重要的是理解多类分类和多标签分类之间的区别。
对于这个任务,应该用什么样的分类器呢?我是不是错了,贝叶斯分类器能不能用于不仅仅是对错的判断?
你可以很简单地通过为每个类别建立一个单独的二分类器来构建一个多标签分类器。这个分类器可以区分这个类别和其他所有类别。那些对应的分类器输出正值的类别,就是这个组合分类器的结果。你可以用朴素贝叶斯分类器来做这个,或者用其他算法也可以。(你也可以对朴素贝叶斯的概率输出和一个阈值进行一些技巧性的处理,但朴素贝叶斯的概率估计通常不太准确;它的价值主要在于它的排名。)
我应该追求什么样的特征提取来完成这样的任务?
对于文本分类,tf-idf向量被认为效果很好,但你没有具体说明任务是什么。任何关于文档的元数据也可能有效;试着做一些简单的统计分析。如果数据的某个特征在某些类别中出现得更频繁,那可能就是一个有用的特征。