• Non ci sono risultati.

Il modello LDA funziona abbastanza bene, ma come gi´a accennato non riesce a gestire le correlazioni tra topic: pu´o capitare che due argomenti co- occorrano frequentemente. Per sopperire a questa mancanza `e stato proposto un modello pi`u generale, il PAM, Pachinko allocation model (Wei and An- drew, 2007b): il nome `e preso da un gioco d’azzardo giapponese, il pachinko per l’appunto, in cui sfere di metallo cadono attraverso una complessa rete di ostacoli fino ad atterrare su pulsanti posti alla base. Questo modello fa uso di una struttura a grafo aciclico diretto (DAG) per rappresentare e in- corporare la possibilit`a di topic annidati e di correlazione tra essi; un grafo aciclico diretto `e un particolare tipo di grafo diretto che non ha cicli diretti, ovvero comunque scegliamo un vertice del grafo non possiamo tornare ad esso percorrendo gli archi del grafo. Un grafo diretto pu`o dirsi aciclico (cio`e `

e un DAG) se non presenta archi all’indietro. Nella struttura DAG, ogni nodo-foglia `e associato ad una parola nel vocabolario, ed ogni nodo superiore corrisponde ad un topic, avente una distribuzione sui nodi figli. Un nodo in- terno che abbia tutti nodi foglia come figli corrisponde alla LDA tradizionale. Nel PAM, il concetto di topic `e esteso ad essere non solo una distribuzione sulle parole, ma anche sugli altri topic; lascia per`o la possibilit`a ai nodi supe- riori di avere come nodi figli altri topic, rappresentanti una mistura di questi, catturando cos`ı tutte le possibili correlazioni (figura 4.2).

Nel modello PAM la distribuzione di ogni nodo interno pu`o essere parame- trizzata arbitrariamente; prendiamo in considerazione la parametrizzazione tramite un vettore della stessa dimensione del numero di figli, estratto da una Dirichlet. Per generare un documento si procede come segue:

1. Si estrae θ(d)t1 , θ(d)t2 , ..., θ(d)ts da g1(α1), g2(α2), ..., gs(αs), dove θ (d)

ti `e una

multinomiale del topic ti sui figli

2. Per ogni parola w nel documento

(a) Si sceglie una partizione zwdi lunghezza Lw :< zw1, zw2, ..., zwLw >.

zw1 `e sempre il nodo radice, da zw2 a zwLw sono i nodi dei topic

T . zwi `e nodo figlio di zw(i−1) ed `e estratto dalla distribuzione

multinomiale θzw(i−1)

Figura 4.2: Il modello grafico relativo al PAM

Il modello generale che ne risulta `e:

Pr(D|α) =Y

d

Pr(d|α)

Confrontiamo ora graficamente i due modelli appena proposti, visualizzati in figura 4.3. Le figure rappresentano rispettivamente:

(a) Multinomiale-Dirichlet: per ogni documento, una distribuzione multino- miale sulle parola `e estratta da una singola Dirichlet.

(b) LDA: si estrae una moltinomiale sui topic per ogni documento, e quindi si generano le parole dai topic.

(c) PAM a 4 livelli: la gerarchia consiste di una radice, un insieme di super- topic, un insieme di sub-topic e un vocabolario. Le radici e i super- topic sono associati a distribuzioni di Dirichlet, e da esse si estraggono le multinomiali sui nodi figli per ogni documento.

Figura 4.3: Modelli grafici per la generazione di Multinomiale-Dirichlet, LDA, PAM e PAM a 4 livelli. (a) Multinomiale-Dirichlet: per ogni documento, una distribuzione multinomiale sulle parola `e estratta da una singola Dirichlet. (b) LDA: si estrae una moltinomiale sui topic per ogni documento, e quindi si generano le parole dai topic. (c) PAM a 4 livelli: la gerarchia consiste di una radice, un insieme di super-topic, un insieme di sub-topic e un vocabolario. Le radici e i super-topic sono associati a distribuzioni di Dirichlet, e da esse si estraggono le multinomiali sui nodi figli per ogni documento. (d) PAM: ha una struttura DAG arbitraria per gestire le correlazioni. Ogni nodo interno `e considerato topic e associato ad una distribuzione di Dirichlet.

(d) PAM: ha una struttura DAG arbitraria per gestire le correlazioni. Ogni nodo interno `e considerato topic e associato ad una distribuzione di Dirichlet.

E’ inoltre possibile una generalizzazione di tipo gerachico per i modelli appena esposti, che verranno presentati pi`u avanti: hLDA e hPAM. Ora uti- lizziamo il modello PAM appena proposto per identificare i topic nel dataset di documenti. Non `e ancora stata sviluppata una libreria in R che implementi questo modello; un metodo alternativo che si propone ´e di utilizzare R come wrapper di una libreria Java denominata mallet, scritta dagli stessi autori di questi topic model. I comandi che seguono mostrano la procedura passo passo.

4.3.1

Implementazione del modello PAM

Iniziamo con il definire la directory in cui `e situato il pacchetto mallet scaricabile dal sito (McCallum, 2002):

dir = "~/mallet-2.0.7" setwd(dir)

I file di testo usati finora erano un vettore di tipo chr in R, mallet necessit`a di tanti file in formato txt quanti sono i documenti; con R la procedura per creare questi file `e molto semplice:

for(i in 1:length(documents)){ write.table(documents[i],

file=paste("articolo",i,".txt",sep="")) }

Una volta creati i documenti necessari, definiamo il percorso della cartella in cui sono situati, in modo che R (e quindi il terminale) possa importarli: importdir = "/Users/Federico/Desktop/Tesi/TestiMallet"

Vanno definite alcune variabili che serviranno nei successivi processi, in par- ticolare il nome del file che funger`a da training, i parametri del modello (numero di topic e intervallo di ottimizzazione) e i nomi dei file di outoput. output = "tutorial.mallet"

ntopics = 20

optint = 20

outputstate = "topic-state.gz"

Le variabili sono state create, vanno ora combinate appositamente in una stringa che verr`a inviata al terminale

cd = "cd ~/mallet-2.0.7" # location of the bin directory import = paste("bin/mallet import-dir --input", importdir,

"--output", output, "--keep-sequence --remove-stopwords", sep = " ")

train = paste("bin/mallet train-topics --input", output, "--num-topics", ntopic,"--use-pam", "true",

"--optimize-interval", optint, "--output-state", outputstate, sep = " ")

MALLET_HOME = "~/mallet-2.0.7"

I passaggi preliminari sono stati eseguiti, non resta che inviare i comandi al terminale in modo che proceda al calcolo del modello:

#Per sistemi Windows

Sys.setenv(PATH = "c:/Program Files (x86)/Java/jre7/bin") shell(shQuote(paste(cd, import, train, sep = " && ")),

invisible = FALSE) #Per sistemi Unix

system(paste(cd, import, train, sep = " ; "))

In tabella 4.2 sono presentati i risultati del modello PAM (da notare la mancanza delle lettere accentate, questo ´e un problema di mallet nel gestire la lingua italiana). Vediamone qualche esempio: i topic 1, 3 e 14 raccolgono tutti i termini in lingua inglese, ed il topic 1 in particolare la maggior parte delle stopword; i topic 4 e 20 si riferiscono alla parte normativo-legislativa della questione sperimentazione animale; il topic 2 sembra essere molto legato ad articoli di cronaca, simili a quello esposto nell’introduzione. Possiamo rite- nerci soddisfatti, i topic sembrano essere specifici ed esplicativi. Proseguiamo ora con altri due modelli, limitandoci alla sola presentazione teorica.

Documenti correlati