2011-10-03 7 views
8

Sto cercando di eseguire la modellazione degli argomenti LDA con Mallet 2.0.7. Posso addestrare un modello LDA e ottenere buoni risultati, a giudicare dal risultato della sessione di allenamento. Inoltre, posso usare l'inferenza costruita in quel processo e ottenere risultati simili durante la rielaborazione del mio file di allenamento. Tuttavia, se prendo un singolo file dal set di training più grande e lo elaboro con l'inferison, ottengo risultati molto diversi, che non sono buoni.Perché ottenere risultati diversi con l'inferenza argomento MALLET per singoli e batch di documenti?

La mia comprensione è che l'inferenza deve utilizzare un modello fisso e solo le funzionalità locali di quel documento, quindi non capisco perché otterrei risultati diversi durante l'elaborazione di 1 file o del 1k dal mio set di allenamento. Non sto facendo tagli di frequenza che sembrerebbero essere un'operazione globale che avrebbe questo tipo di effetto. Puoi vedere altri parametri che sto usando nei comandi sottostanti, ma sono per lo più di default. Cambiare # di iterazioni su 0 o 100 non ha aiutato.

Importare i dati:

bin/mallet import-dir \ 
    --input trainingDataDir \ 
    --output train.data \ 
    --remove-stopwords TRUE \ 
    --keep-sequence TRUE \ 
    --gram-sizes 1,2 \ 
    --keep-sequence-bigrams TRUE 

Treno:

time ../bin/mallet train-topics 
    --input ../train.data \ 
    --inferencer-filename lda-inferencer-model.mallet \ 
    --num-top-words 50 \ 
    --num-topics 100 \ 
    --num-threads 3 \ 
    --num-iterations 100 \ 
    --doc-topics-threshold 0.1 \ 
    --output-topic-keys topic-keys.txt \ 
    --output-doc-topics doc-topics.txt 

argomenti assegnati durante l'allenamento per un file in particolare, # 14 è di circa il vino che è corretto:

998 file:/.../29708933509685249 14 0.31684981684981683 
> grep "^14\t" topic-keys.txt 
14 0.5 wine spray cooking car climate top wines place live honey sticking ice prevent collection market hole climate_change winery tasting california moldova vegas horses converted paper key weather farmers_market farmers displayed wd freezing winter trouble mexico morning spring earth round mici torrey_pines barbara kinda nonstick grass slide tree exciting lots 

Run inferenza su tutto il lotto del treno:

../bin/mallet infer-topics \ 
    --input ../train.data \ 
    --inferencer lda-inferencer-model.mallet \ 
    --output-doc-topics inf-train.1 \ 
    --num-iterations 100 

punteggio Inference sul treno - molto simile:

998 /.../29708933509685249 14 0.37505087505087503 

Run inferenza su un altro file di dati formazione composta da solo quel file txt 1:

../bin/mallet infer-topics \ 
    --input ../one.data \ 
    --inferencer lda-inferencer-model.mallet \ 
    --output-doc-topics inf-one.2 \ 
    --num-iterations 100 

inferenza su un documento produce argomento 80 e 36, che sono molto diversi (14 è dato vicino al punteggio 0):

0 /.../29708933509685249 80 0.3184778184778185 36 0.19067969067969068 
> grep "^80\t" topic-keys.txt 
80 0.5 tips dog care pet safety items read policy safe offer pay avoid stay important privacy services ebay selling terms person meeting warning poster message agree sellers animals public agree_terms follow pets payment fraud made privacy_policy send description puppy emailed clicking safety_tips read_safety safe_read stay_safe services_stay payment_services transaction_payment offer_transaction classifieds_offer 

risposta

10

Il p roblem era incompatibilità tra small.data e one.data file di dati di allenamento. Anche se sono stato attento a utilizzare tutte le stesse opzioni, per impostazione predefinita due file di dati utilizzano alfabeti diversi (mappatura tra parole e numeri interi). Per correggere ciò, utilizzare l'opzione --use-pipe-from [MALLET TRAINING FILE], e quindi specificare altre opzioni sembra non essere necessario. Grazie a David Mimno.

bin/mallet import-dir \ 
    --input [trainingDataDirWithOneFile] \ 
    --output one.data \ 
    --use-pipe-from small.data