2011-09-19 22 views
28

Acabo de leer un artículo fascinante sobre cómo se puede usar MALLET para el modelado de temas, pero no pude encontrar nada en línea comparando MALLET con NLTK, con el que ya he tenido alguna experiencia.Modelado de temas en MALLET vs NLTK

¿Cuáles son las principales diferencias entre ellos? ¿MALLET es un recurso más "completo" (por ejemplo, tiene más herramientas y algoritmos debajo del capó)? ¿O dónde están algunos buenos artículos que responden estas dos primeras preguntas?

+1

No puedo responder eso, pero el NLTK incluye una interfaz de mazo para que pueda probarlos en tándem. – alexis

+2

Si ya está familiarizado con Python, simplemente use "gensim, modelado de temas para humanos". – Radim

+0

@Radim; P yes 'gensim' es uno de los módulos de modelado de temas más fáciles de usar que he utilizado/visto personalmente para python. Debería haber sido "gensim, modelo de tema para meros mortales" =) – alvas

Respuesta

23

No es que uno sea más completo que el otro, es más una cuestión de que uno tenga algunas cosas que el otro no y viceversa. También es una cuestión de audiencia y propósito.

Mallet es un juego de herramientas de aprendizaje automático basado en Java que tiene como objetivo proporcionar implementaciones robustas y rápidas para diversas tareas de procesamiento del lenguaje natural.

NLTK está construido con Python y viene con muchas cosas adicionales como corpora como WordNet. NLTK está dirigido más a las personas que aprenden NLP, y como tal se utiliza más como una plataforma de aprendizaje y tal vez menos como una solución de ingeniería.

En mi opinión, la principal diferencia entre los dos es que NLTK es mejor posicionado como recurso de aprendizaje para las personas interesadas en el aprendizaje automático y PNL, ya que viene con toda una tonelada de documentación, ejemplos, etc., etc. corpus

Mallet está más dirigido a investigadores y profesionales que trabajan en el campo y ya saben lo que quieren hacer. Viene con menos documentación (aunque tiene buenos ejemplos y la API está bien documentada) en comparación con la extensa colección de material NLP general de NLTK.

ACTUALIZACIÓN: buenos artículos que describen estos serían los documentos Mallet y ejemplos en http://mallet.cs.umass.edu/ - la barra lateral tiene enlaces a secuencia marcadora, etc. tema de modelado

y para NLTK el libro NLTK Natural Language Processing with Python es una buena introducción a la vez NLTK y a NLP.

ACTUALIZACIÓN

he encontrado recientemente, la biblioteca de Python sklearn. Esto está dirigido al aprendizaje automático en general, no directamente para PNL, pero también se puede usar para eso. Viene con una gran selección de herramientas de modelado y la mayoría parece depender de NumPy, por lo que debería ser bastante rápido. Lo he usado bastante y puedo decir que está muy bien escrito y documentado y que cuenta con una comunidad de desarrolladores activa que lo impulsa (al menos hasta mayo de 2013).

ACTUALIZACIÓN 2

He estado usando ahora también mazo durante algún tiempo (en concreto la API de mazo) y puedo decir que si usted está pensando en la integración de un mazo en otro proyecto que debe estar muy familiarizado con Java y listo para pasar mucho tiempo depurando una base de código casi completamente no documentada.

Si todo lo que quiere hacer es utilizar las herramientas de línea de comando de mazo, está bien, usar la API requiere una gran cantidad de exploración a través del código de mazo y generalmente también corrige algunos errores. Advierta que el mazo viene con una documentación mínima con respecto a la API.

+0

"Se trata de ..." error tipográfico? – Trindaz

+0

Oh, no lo siento, volver a trabajar el texto :) –

+1

@Trindaz por favor, vea las actualizaciones de arriba. –

2

La pregunta es si estás trabajando en Python o Java (o ninguno de los anteriores). Mallet es bueno para Java (por lo tanto, Clojure y Scala) ya que puede acceder fácilmente a su API en Java. Mallet también tiene una interfaz de línea de comandos agradable para que pueda usarlo fuera de una aplicación.

Por la misma razón con Python, NLTK es ideal para python, y no tendrá que hacer ninguna locura Jython para que estos jueguen bien juntos. Si usa Python, Gensim acaba de agregar un contenedor de Mallet que vale la pena consultar. En este momento, es básicamente una característica alfa escueta, pero puede hacer lo que necesita.

+1

Si está usando gensim, puede ir con la versión lda en línea en 'gensim.models.ldamodel.LdaModel' en lugar del mazo, a menos que realmente quiera usar la variedad de muestreo de Gibbs que implementa el mazo. –

+1

@MattiLyra bien ... las implementaciones de LDA de mazo optimizan los parámetros. En la mayoría de los casos, esto mejora profundamente la calidad del modelo aprendido. Si no necesita un algoritmo en línea (es decir, no necesita seguir agregando documentos y perfeccionando el modelo), optaría por el mazo. No he comparado las velocidades de convergencia, pero el mazo también tiene un estimador multinúcleo, lo que acelera mucho las cosas si tienes el hardware. – drevicko

1

No estoy familiarizado con el tema de modelado conjunto de herramientas de NLTK, por lo que no voy a tratar de compararlo. Las fuentes de Mallet en Github contienen varios algoritmos (algunos de los cuales no están disponibles en la versión 'publicada'). Que yo sepa, hay

  • SimpleLDA (LDA con el muestreo de Gibbs colapsado)
  • ParallelTopicModel (LDA que funciona en varios núcleos)
  • HierarchicalLDA
  • LabeledLDA (un enfoque semi-supervisado a LDA)
  • Asignación de Pachinko con LDA.
  • WeightedTopicModel

También tiene

  • un par de clases que ayudan en el diagnóstico de los modelos de LDA. (TopicModelDiagnostics.java)
  • La capacidad de serializar y deserializar un modelo LDA entrenado.

Con todo, es un excelente kit de herramientas para experimentar con modelos de temas, con una licencia de código abierto accesible (CPL).