用于大型数据集分类的NLP软件 背景

用于大型数据集分类的NLP软件 背景,nlp,nltk,Nlp,Nltk,多年来,我一直在使用我自己的类似贝叶斯的方法,根据一个不断更新的大型训练数据集,对来自外部来源的新项目进行分类 每个项目有三种类型的分类: 30个类别,其中每个项目必须属于一个类别,最多两个类别 10个其他类别,其中每个项目仅在存在强匹配时与一个类别关联,并且每个项目可以属于与匹配相同的多个类别 4个其他类别,其中每个项目必须只属于一个类别,如果没有强匹配项,则将项目指定给默认类别 每个项目由大约2000个字符的英文文本组成。在我的培训数据集中,大约有265000个项目,其中包含10000000

多年来,我一直在使用我自己的类似贝叶斯的方法,根据一个不断更新的大型训练数据集,对来自外部来源的新项目进行分类

每个项目有三种类型的分类:

  • 30个类别,其中每个项目必须属于一个类别,最多两个类别
  • 10个其他类别,其中每个项目仅在存在强匹配时与一个类别关联,并且每个项目可以属于与匹配相同的多个类别
  • 4个其他类别,其中每个项目必须只属于一个类别,如果没有强匹配项,则将项目指定给默认类别
  • 每个项目由大约2000个字符的英文文本组成。在我的培训数据集中,大约有265000个项目,其中包含10000000个特征(独特的三词短语)的粗略估计

    我的自制方法相当成功,但肯定还有改进的余地。我已经阅读了NLTK书籍的“学习分类文本”一章,这一章非常好,并且给了我NLP分类技术的一个很好的概述。我希望能够用不同的方法和参数进行实验,直到我的数据得到最好的分类结果

    问题 有哪些现成的NLP工具可以有效地对如此大的数据集进行分类

    到目前为止我已经试过了:

    • NLTK
    • 廷布尔
    我试着用一个数据集来训练他们,该数据集包含不到1%的可用训练数据:1700个项目,375000个特征。对于NLTK,我使用了稀疏二进制格式,对于TIMBL,使用了类似的紧凑格式

    两者似乎都依赖于在内存中执行所有操作,并很快消耗了所有系统内存。我可以让他们处理小数据集,但不能处理大数据集。我怀疑,如果我尝试递增地添加训练数据,那么,或者在进行实际分类时,同样的问题也会发生

    我看过谷歌的预测API,它似乎完成了我所寻找的大部分功能,但不是全部。如果可能的话,我也希望避免依赖外部服务

    关于功能的选择:多年来,在使用我的自制方法进行测试时,三个单词的短语产生了迄今为止最好的结果。虽然我可以通过使用单词或两个单词短语来减少功能的数量,但这很可能会产生较差的结果,并且仍然会有大量功能。

    您尝试过吗

    我不能确定它是否能够处理您的特定数据集,但我在以前的测试中发现它非常健壮。
    然而,我的重点是主题建模,而不是分类本身


    此外,请注意,对于许多NLP解决方案,您不需要自己输入“功能”(如N-gram,即问题中提到的三个单词短语和两个单词短语),而是依靠各种NLP函数生成自己的统计模型。

    MALLET有许多分类器(NB、MaxEnt、CRF等)。这是安德鲁·麦卡勒姆的团队写的。SVMLib是另一个不错的选择,但SVM模型通常比MaxEnt需要更多的调整。或者,在这种情况下,像K-means这样的在线集群可能并不坏

    一旦您对模型进行了培训,SVMLib和MALLET就相当快了(C和Java)。不过,模特训练可能需要一段时间!不幸的是,找到示例代码并不总是那么容易。我有(还有斯坦福解析器,它速度很慢,而且对于您的目的来说可能有点过头了)。NLTK是一个很好的学习工具,非常简单,你可以将你在那里做的事情原型化,这很理想


    NLP更多的是特性和数据质量,而不是您使用的机器学习方法。3克可能不错,但是在这些字符上的字符n克呢?也就是说,3克中的所有字符都要考虑拼写变化/词干等?命名实体可能也很有用,或者是某种词典。

    根据个人经验,我推荐。据说它拥有最快的文本分类算法之一

    我推荐Mahout,因为它用于处理超大规模的数据集。 ML算法是在ApacheHadoop(map/reduce)上构建的,因此伸缩性是固有的

    看看下面的分类部分,看看它是否有用。

    我根据您的建议对Vowpal Wabbit进行了广泛的研究,但我不知道如何将其用于分类;它似乎只是回归(数字)和LDA。输入标签是一个浮点,与输出预测相同。VW肯定是一个分类器。它可以进行多类分类(v7+)。看一看: