Previsione dell'argomento mediante allocazione latente di Dirichlet


17

Ho usato LDA su un corpus di documenti e ho trovato alcuni argomenti. L'output del mio codice è di due matrici contenenti probabilità; le probabilità di un argomento di un documento e le altre probabilità di un argomento di parola. Ma in realtà non so come usare questi risultati per prevedere l'argomento di un nuovo documento. Sto usando il campionamento di Gibbs. Qualcuno sa come? Grazie


1
Cosa intendi per "prevedere l'argomento di un nuovo documento"? Vuoi trovare da quale singolo argomento è stato generato questo documento? Vuoi trovare una combinazione di argomenti per il documento? Vuoi etichettare ogni parola nel nuovo documento dall'argomento da cui proviene la parola?
SheldonCooper l'

Vuoi trovare da quale singolo argomento è stato generato questo documento? Vuoi trovare una combinazione di argomenti per il documento? - Voglio rispondere a entrambe queste domande in realtà ... ma il mio corpus è davvero grande, quindi non posso permettermi di riqualificare tutto il mio modello ogni volta che un nuovo documento viene esaminato
Hossein il

Risposte:


21

Proverei a "ripiegare". Questo si riferisce al prendere un nuovo documento, aggiungerlo al corpus e quindi eseguire Gibbs campionando solo le parole in quel nuovo documento , mantenendo gli stessi argomenti assegnati ai vecchi documenti. Questo di solito converge velocemente (forse 5-10-20 iterazioni) e non è necessario campionare il tuo vecchio corpus, quindi corre anche veloce. Alla fine avrai l'assegnazione dell'argomento per ogni parola nel nuovo documento. Questo ti darà la distribuzione degli argomenti in quel documento.

Nel tuo campionatore Gibbs, probabilmente hai qualcosa di simile al seguente codice:

// This will initialize the matrices of counts, N_tw (topic-word matrix) and N_dt (document-topic matrix)
for doc = 1 to N_Documents
    for token = 1 to N_Tokens_In_Document
       Assign current token to a random topic, updating the count matrices
    end
end

// This will do the Gibbs sampling
for doc = 1 to N_Documents
    for token = 1 to N_Tokens_In_Document
       Compute probability of current token being assigned to each topic
       Sample a topic from this distribution
       Assign the token to the new topic, updating the count matrices
    end
end

Il fold-in è lo stesso, tranne per il fatto che si inizia con le matrici esistenti, si aggiungono i token del nuovo documento e si esegue il campionamento solo per i nuovi token. Vale a dire:

Start with the N_tw and N_dt matrices from the previous step

// This will update the count matrices for folding-in
for token = 1 to N_Tokens_In_New_Document
   Assign current token to a random topic, updating the count matrices
end

// This will do the folding-in by Gibbs sampling
for token = 1 to N_Tokens_In_New_Document
   Compute probability of current token being assigned to each topic
   Sample a topic from this distribution
   Assign the token to the new topic, updating the count matrices
end

pwiowiojwj

Πjpwjio

grazie per la risposta. Ho letto alcune cose su ma ancora un po 'confuso sul "ripiegamento". Stai dicendo che dovrei mantenere invariate le assegnazioni di argomenti dei vecchi documenti, questo significa che le assegnazioni di argomenti di parole dovrebbero essere ricalcolate? È possibile che tu mi dia una procedura più dettagliata di ciò che dovrebbe essere fatto? o forse riferirmi a un documento o un link che può effettivamente aiutarmi a chiarire questo processo di "piegatura". La mia prima opzione è quella di "ripiegare". Se non avrò successo andrò per il secondo metodo che hai proposto (non sono sicuro di come funzioni paragonando a ripiegare). Grazie.
Hossein,

@SheldonCooper: Se ti capisco correttamente, allora dubito che questo sia il modo in cui farlo: quello che fai è come misurare le prestazioni di un SVM su un nuovo campione di test dando all'algoritmo di ottimizzazione qualche passo in più da la soluzione corrente includendo il campione di prova e quindi valutandolo su questo campione ... ma: nell'apprendimento automatico non si può mai testare sul set di allenamento ... e includendo il campione di prova nel modello si fa esattamente questo: test su un campione di allenamento ...
Fabian Werner

@FabianWerner Credo che la soluzione non abbia aggiornato la matrice di argomenti di parole della formazione originale. Riesegue semplicemente un campionatore Gibbs a partire dalla matrice di argomenti di parole addestrata e crea una nuova matrice di argomenti di documenti. Ad ogni modo, conosci un altro modo di fare ciò che l'OP ha chiesto (certamente diversi anni fa)? Sto osservando lo stesso problema.
thecity2,

@ thecity2 Anche se per un po 'ho sentito parlare di questo problema, devo purtroppo dire che non ho ancora una soluzione. Se ne trovi uno, fammi sapere !!!
Fabian Werner,

@FabianWerner Non hai un treno e un set di test in questo problema - il tuo commento è irrilevante qui. Questo è un apprendimento senza supervisione, proprio come il clustering.
emem
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.