MALLET与NLTK中的主题建模

时间:2011-09-19 19:24:04

标签: nltk mallet

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

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

3 个答案:

答案 0 :(得分:23)

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

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

NLTK是使用Python构建的,并附带了很多额外的东西,比如WordNet等语料库。 NLTK的目标更多是人们学习NLP,因此更多地被用作学习平台,而不是作为工程解决方案。

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

Mallet更瞄准那些在该领域工作并已经知道他们想做什么的研究人员和从业人员。与NLTK广泛收集的一般NLP内容相比,它提供的文档较少(尽管它有很好的示例,并且API已有详细记录)。

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

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

<强>更新

我最近发现了sklearn Python库。这更多地针对机器学习,而不是直接针对NLP,但也可以用于此。它配备了大量的建模工具,大部分都依赖于NumPy所以它应该非常快。我已经使用了很多,并且可以说它写得很好并且有文档记录,并且有一个活跃的开发者社区推动它(至少从2013年5月开始)。

更新2

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

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

答案 1 :(得分:2)

问题是你是在使用Python还是Java(或者不是上述任何一种)。 Mallet适用于Java(因此是Clojure和Scala),因为您可以轻松地使用Java访问它的API。 Mallet还有一个很好的命令行界面,因此您可以在应用程序之外使用它。

出于同样的原因,使用Python,NLTK非常适合python,你不需要做任何Jython疯狂来让它们在一起玩得很好。如果你正在使用python,Gensim只是添加了一个值得检查的Mallet包装器。现在,它基本上是一个简单的alpha功能,但它可以做你需要的。

答案 2 :(得分:1)

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

  • SimpleLDA(LDA与崩溃的吉布斯采样)
  • ParallelTopicModel(适用于多核的LDA)
  • HierarchicalLDA
  • LabeledLDA(LDA的半监督方法)
  • 使用LDA进行弹珠机分配。
  • WeightedTopicModel

它也有

  • 几个有助于诊断LDA模型的课程。 (TopicModelDiagnostics.java)
  • 序列化和反序列化训练有素的LDA模型的能力。

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