2011-09-19 16 views
28

Ho appena letto un articolo affascinante su come MALLET potrebbe essere utilizzato per la modellazione degli argomenti, ma non ho trovato nulla online confrontando MALLET con NLTK, di cui ho già avuto esperienza.Topic Modeling in MALLET vs NLTK

Quali sono le principali differenze tra di loro? MALLET è una risorsa più "completa" (ad esempio ha più strumenti e algoritmi sotto il cofano)? O dove sono alcuni buoni articoli che rispondono a queste prime due domande?

+1

Impossibile rispondere, ma il NLTK include un'interfaccia di maglio in modo da poterle provare in tandem. – alexis

+2

Se hai già dimestichezza con Python, usa semplicemente "gensim, modellazione degli argomenti per gli umani". – Radim

+0

@Radim; P yes 'gensim' è uno dei moduli di modellazione argomenti più user-friendly che ho usato/visto personalmente per python. Dovrebbe essere stato "gensim, modellazione di argomenti per semplici mortali" =) – alvas

risposta

23

Non è che uno sia più completo dell'altro, è più una questione di uno che ha qualcosa che l'altro non ha e vice versa. È anche una questione di pubblico e scopo.

Mallet è un toolkit di apprendimento automatico basato su Java che mira a fornire implementazioni rapide e veloci per varie attività di elaborazione del linguaggio naturale.

NLTK è costruito utilizzando Python e viene fornito con un sacco di cose extra come corpora come WordNet. NLTK è rivolto più alle persone che imparano la PNL, e in quanto tale viene usato più come piattaforma di apprendimento e forse meno come soluzione ingegneristica.

A mio parere la differenza principale tra i due è che NLTK è meglio posizionata come fonte di apprendimento per le persone interessate nel machine learning e PNL come si tratta con tutta una tonnellata di documentazione, esempi, corpora ecc ecc

Mallet è più rivolto a ricercatori e professionisti che lavorano sul campo e sanno già cosa vogliono fare. Viene fornito con meno documentazione (sebbene abbia buoni esempi e l'API sia ben documentata) rispetto alla vasta raccolta NLTK di roba generale della PNL.

UPDATE: buoni articoli che descrivono questi sarebbero la documentazione e gli esempi Mallet a http://mallet.cs.umass.edu/ - la barra laterale ha legami di sequenziare tagging, argomento modellazione ecc

e per NLTK il libro NLTK Natural Language Processing with Python è una buona introduzione sia per NLTK e in PNL.

UPDATE

Recentemente ho trovato lo sklearn libreria Python. Questo è finalizzato all'apprendimento automatico più generale, non direttamente per la PNL ma può essere usato anche per quello. Viene fornito con una vasta selezione di strumenti di modellazione e la maggior parte sembra affidarsi a NumPy, quindi dovrebbe essere abbastanza veloce. L'ho usato un po 'e posso dire che è molto ben scritto e documentato e ha una comunità di sviluppatori attiva che lo spinge avanti (almeno a partire da maggio 2013).

UPDATE 2

ora ho anche usato martello per qualche tempo (in particolare l'API martello) e posso dire che se avete intenzione di integrazione martello in un altro progetto si dovrebbe essere molto familiare con Java e pronto a dedicare molto tempo al debug di una base di codice quasi completamente priva di documenti.

Se tutto ciò che si vuole fare è usare gli strumenti della riga di comando del martello, va bene, l'uso dell'API richiede molto tempo per scavare attraverso il codice del mallet stesso e di solito correggere anche alcuni bug. Attenzione, il maglio viene fornito con una documentazione minima per quanto riguarda l'API.

+0

"Viene fornito con ..." errore di battitura? – Trindaz

+0

Oh, no scusa, rielaborando il testo :) –

+1

@Trindaz si prega di consultare gli aggiornamenti sopra. –

2

La domanda è se si sta lavorando in Python o Java (o nessuno dei precedenti). Mallet è adatto a Java (quindi Clojure e Scala) poiché è possibile accedere facilmente all'API in Java. Mallet ha anche una bella interfaccia a riga di comando per poterla usare al di fuori di un'applicazione.

Per lo stesso motivo con Python, NLTK è ottimo per Python, e non dovrai fare alcuna follia Jython per far sì che questi giochino bene insieme. Se stai usando Python, Gensim ha appena aggiunto un wrapper Mallet che vale la pena controllare. In questo momento, è fondamentalmente una caratteristica alfa delle ossa nude, ma potrebbe fare ciò di cui hai bisogno.

+1

Se stai usando gensim potresti anche andare con la versione lda online in 'gensim.models.ldamodel.LdaModel' invece di quella con il maglio, a meno che tu non voglia veramente usare la varietà di campionamento Gibbs che il maglio implementa. –

+1

@MattiLyra beh ... le implementazioni LDA del mallet eseguono l'ottimizzazione dei parametri. Nella maggior parte dei casi ciò migliora profondamente la qualità del modello appreso. Se non hai bisogno di un algoritmo online (es: non devi continuare ad aggiungere documenti e perfezionare il modello), andrei a cercare il martello. Non ho confrontato le velocità di convergenza, ma il mallet ha anche uno stimatore multicore, che accelera molto se hai l'hardware. – drevicko

1

Non ho familiarità con il toolkit di modellazione argomento di NLTK, quindi non cercherò di confrontarlo. Le sorgenti di Mallet in Github contengono diversi algoritmi (alcuni dei quali non sono disponibili nella versione "rilasciata"). A mia conoscenza, ci sono

  • SimpleLDA (LDA con campionamento Gibbs compresso)
  • ParallelTopicModel (LDA che funziona su multi-core)
  • HierarchicalLDA
  • LabeledLDA (un approccio semi-sorvegliati LDA)
  • Allocazione Pachinko con LDA.
  • WeightedTopicModel

Ha anche

  • un paio di classi che aiutano nella diagnosi di modelli LDA. (TopicModelDiagnostics.java)
  • La possibilità di serializzare e de-serializzare un modello LDA addestrato.

Tutto sommato, è un ottimo toolkit per sperimentare con modelli di argomento, con una licenza open source (CPL) accessibile.