【问题标题】:NLP software for classification of large datasets用于大型数据集分类的 NLP 软件
【发布时间】:2011-11-07 01:58:25
【问题描述】:

背景

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

对每个项目进行三种类型的分类:

  1. 30个类别,其中每个项目必须属于一个类别,最多两个类别。
  2. 其他10个类别,其中每个项目只有在强匹配时才与一个类别相关联,并且每个项目可以属于匹配的多个类别。
  3. 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,它似乎可以满足我的大部分需求,但不是全部。如果可能,我还想避免依赖外部服务。

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

【问题讨论】:

    标签: nlp nltk


    【解决方案1】:

    我会推荐 Mahout,因为它旨在处理非常大规模的数据集。 ML 算法是基于 Apache Hadoop(map/reduce)构建的,因此扩展是固有的。

    看看下面的分类部分,看看它是否有帮助。 https://cwiki.apache.org/confluence/display/MAHOUT/Algorithms

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 根据您的推荐,我广泛研究了 Vowpal Wabbit,但我不明白它如何用于分类;它似乎只是回归(数字)(和LDA)。输入标签是浮点数,与输出预测相同。
      • 大众汽车无疑是一个分类器。它可以进行多类分类(v7+)。看一看:github.com/JohnLangford/vowpal_wabbit
      【解决方案3】:

      MALLET 有许多分类器(NB、MaxEnt、CRF 等)。这是 Andrew McCallum 的小组写的。 SVMLib 是另一个不错的选择,但 SVM 模型通常需要比 MaxEnt 更多的调整。或者,在这种情况下,某种在线聚类(如 K-means)可能还不错。

      一旦您训练了模型,SVMLib 和 MALLET 就会非常快(C 和 Java)。模型训练可能需要一段时间!不幸的是,找到示例代码并不总是那么容易。我有some examples of how to use MALLET programmatically(还有斯坦福解析器,它很慢,可能对你的目的来说有点过分了)。 NLTK 是一个很棒的学习工具,而且非常简单,您可以在那里制作原型,非常理想。

      NLP 更多的是关于功能和数据质量,而不是您使用的机器学习方法。 3-grams 可能很好,但是字符 n-grams 呢?即,3-gram 中的所有字符 ngram 来解释拼写变化/词干/等?命名实体也可能有用,或者某种词典。

      【讨论】:

        【解决方案4】:

        你试过MALLET吗?

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

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

        【讨论】:

          猜你喜欢
          • 2016-05-24
          • 2015-09-09
          • 2020-08-12
          • 2018-04-26
          • 2019-12-15
          • 2018-01-05
          • 2013-12-15
          • 2021-07-27
          • 2018-10-01
          相关资源
          最近更新 更多