28

我刚刚阅读了一篇关于如何将 MALLET 用于主题建模的精彩文章,但我在网上找不到任何将 MALLET 与 NLTK 进行比较的东西,我已经有了一些经验。

它们之间的主要区别是什么?MALLET 是一个更“完整”的资源吗(例如,有更多的工具和算法)?或者在哪里有回答前两个问题的好文章?

4

3 回答 3

25

并不是说一个比另一个更完整,而是一个有一些东西另一个没有的问题,反之亦然。这也是目标受众和目的的问题。

Mallet 是一个基于 Java 的机器学习工具包,旨在为各种自然语言处理任务提供健壮和快速的实现。

NLTK 是使用 Python 构建的,并带有许多额外的东西,例如 WordNet 等语料库。NLTK 更多地针对学习 NLP 的人,因此更多地用作学习平台,而可能较少用作工程解决方案。

在我看来,两者之间的主要区别在于 NLTK 更适合作为对机器学习和 NLP 感兴趣的人的学习资源,因为它带有大量的文档、示例、语料库等。

Mallet 更针对在该领域工作并且已经知道自己想做什么的研究人员和从业者。与 NLTK 广泛收集的一般 NLP 资料相比,它的文档更少(尽管它有很好的示例并且 API 有很好的文档记录)。

更新:描述这些的好文章将是http://mallet.cs.umass.edu/上的 Mallet 文档和示例- 侧边栏有指向序列标记、主题建模等的链接。

对于 NLTK,NLTK 书籍Natural Language Processing with Python是对 NLTK 和 NLP 的一个很好的介绍。

更新

我最近发现了 sklearn Python 库。这更普遍地针对机器学习,不是直接用于 NLP,但也可以用于 NLP。它提供了非常多的建模工具选择,而且其中大部分似乎都依赖于 NumPy,因此它应该非常快。我已经用过很多次了,可以说它写得很好,文档也很好,并且有一个活跃的开发者社区在推动它(至少截至 2013 年 5 月)。

更新 2

我现在也使用 mallet 有一段时间了(特别是 mallet API),可以说如果你打算将 mallet 集成到另一个项目中,你应该非常熟悉 Java,并准备花大量时间调试一个几乎完全未记录的代码库。

如果您只想使用 mallet 命令行工具,那很好,使用 API 需要大量挖掘 mallet 代码本身,并且通常还要修复一些错误。请注意,mallet 附带关于 API 的最少文档。

于 2012-08-24T10:51:05.040 回答
2

问题是您使用的是 Python 还是 Java(或者以上都不是)。Mallet 非常适合 Java(因此是 Clojure 和 Scala),因为您可以轻松地在 Java 中访问它的 API。Mallet 还有一个不错的命令行界面,因此您可以在应用程序之外使用它。

出于与 Python 相同的原因,NLTK 非常适合 Python,而且您无需做任何疯狂的 Jython 操作就能让它们很好地协同工作。如果您使用的是 python,Gensim 刚刚添加了一个 Mallet 包装器,值得一试。现在,它基本上是一个基本的 alpha 功能,但它可以满足您的需求。

于 2014-04-07T22:48:46.413 回答
2

我对 NLTK 的主题建模工具包不熟悉,所以我不会尝试比较它。Github 中的 Mallet 源包含多种算法(其中一些在“已发布”版本中不可用)。据我所知,有

  • SimpleLDA(带有折叠吉布斯采样的 LDA)
  • ParallelTopicModel(适用于多核的 LDA)
  • 分层LDA
  • LabeledLDA(LDA 的半监督方法)
  • 弹珠机分配与 LDA。
  • 加权主题模型

它也有

  • 一些有助于诊断 LDA 模型的类。(TopicModelDiagnostics.java)
  • 序列化和反序列化经过训练的 LDA 模型的能力。

总而言之,它是一个用于试验主题模型的优秀工具包,具有平易近人的开源许可证 (CPL)。

于 2015-03-12T09:33:59.737 回答