【发布时间】:2011-11-07 01:58:25
【问题描述】:
背景
多年来,我一直在使用自己的类似贝叶斯的方法,根据不断更新的大型训练数据集对来自外部来源的新项目进行分类。
对每个项目进行三种类型的分类:
- 30个类别,其中每个项目必须属于一个类别,最多两个类别。
- 其他10个类别,其中每个项目只有在强匹配时才与一个类别相关联,并且每个项目可以属于匹配的多个类别。
- 4 个其他类别,其中每个项目必须仅属于一个类别,如果没有强匹配项,则将项目分配到默认类别。
每个项目由大约 2,000 个字符的英文文本组成。在我的训练数据集中,大约有 265,000 个项目,其中包含粗略估计的 10,000,000 个特征(唯一的三个单词短语)。
我的自制方法相当成功,但肯定还有改进的余地。我读过 NLTK 书的“Learning to Classify Text”一章,这本书很棒,让我对 NLP 分类技术有了一个很好的概述。我希望能够尝试不同的方法和参数,直到我的数据得到最好的分类结果。
问题
有哪些现成的 NLP 工具可以有效地对如此大的数据集进行分类?
到目前为止我尝试过的那些:
- NLTK
- TIMBL
我尝试使用包含不到 1% 的可用训练数据的数据集来训练它们:1,700 个项目,375,000 个特征。对于 NLTK,我使用了稀疏二进制格式,而对于 TIMBL,我使用了类似的紧凑格式。
两者似乎都依赖于在内存中做所有事情,并且很快消耗了所有系统内存。我可以让他们使用很小的数据集,但没有什么大的。我怀疑如果我尝试逐步添加训练数据,那么在当时或在进行实际分类时会出现同样的问题。
我查看了 Google 的 Prediction API,它似乎可以满足我的大部分需求,但不是全部。如果可能,我还想避免依赖外部服务。
关于功能的选择:多年来用我的自制方法测试,三个词组产生了迄今为止最好的结果。虽然我可以通过使用单词或两个单词的短语来减少特征的数量,但这很可能会产生较差的结果并且仍然是大量的特征。
【问题讨论】: