Ankur Tomar

Follow

Nov 25, 2018 – 9 min read

Credits: Christine Doig

Ciao a tutti. È passato molto tempo da quando ho scritto il mio ultimo blog sui diversi tipi di sistemi di raccomandazione. Questa volta, scriverò sul Topic Modelling.

Ci sono numerose fonti là fuori dove potete imparare cos’è il Topic Modelling, ma penso che la maggior parte di esse siano un po’ tecniche e richiedano una buona conoscenza della matematica e di altre tecniche come le Catene di Markov. In questo articolo, cercherò di spiegare l’idea dietro il Topic Modelling in un modo molto intuitivo con un minimo di matematica e tecnicismi. Scriverò questo articolo in due parti. Nella prima parte, cercherò di spiegare cos’è il topic modeling e nella seconda parte, fornirò un tutorial python su come fare topic modeling su un set di dati del mondo reale.

Prima di iniziare, voglio riconoscere che questo articolo è fortemente ispirato dalla lezione di analisi esplorativa dei dati del mio prof. Edward McFowland, dal corso di Coursera sull’elaborazione del linguaggio naturale della Higher School of Economics e dalla spiegazione di Jordan Boyd-Graber del campionamento di Gibbs.

Che cos’è la modellazione per argomenti?

La modellazione per argomenti è una branca dell’elaborazione non supervisionata del linguaggio naturale che viene usata per rappresentare un documento di testo con l’aiuto di diversi argomenti, che possono spiegare meglio le informazioni sottostanti in un particolare documento. Questo può essere pensato in termini di clustering, ma con una differenza. Ora, invece di caratteristiche numeriche, abbiamo una collezione di parole che vogliamo raggruppare in modo tale che ogni gruppo rappresenti un argomento in un documento.

Perché abbiamo bisogno della modellazione per argomenti?

Ok, quindi ora la domanda sorge spontanea: perché abbiamo bisogno della modellazione per argomenti? Se ci guardiamo intorno, possiamo vedere un’enorme quantità di dati testuali che giacciono intorno a noi in un formato non strutturato sotto forma di articoli di notizie, articoli di ricerca, post di social media ecc. e abbiamo bisogno di un modo per capire, organizzare ed etichettare questi dati per prendere decisioni informate. La modellazione dell’argomento è usata in varie applicazioni come trovare domande su stack overflow che sono simili tra loro, aggregazione e analisi del flusso di notizie, sistemi di raccomandazione ecc. Tutte queste applicazioni si concentrano sulla ricerca della struttura tematica nascosta nel testo, poiché si ritiene che ogni testo che scriviamo, sia esso un tweet, un post o un documento di ricerca, sia composto da temi come sport, fisica, aerospaziale ecc.

Come fare topic modeling?

Oggi, ci sono molti modi per fare topic modeling, ma in questo post, discuteremo un approccio di modellazione probabilistica chiamato Latent Dirichlet Allocation (LDA) sviluppato dal Prof. David M. Blei nel 2003. Questa è un’estensione della Probabilistic Latent Semantic Analysis (PLSA) sviluppata nel 1999 da Thomas Hoffman con una differenza molto piccola in termini di come trattano la distribuzione per documento. Quindi saltiamo direttamente a come funziona LDA.

Latent Dirichlet Allocation

Iniziamo a capire il significato di ogni parola nel titolo, poiché penso che contenga tutto ciò che dobbiamo sapere per capire come funziona LDA.

Latent: Si riferisce a tutto ciò che non conosciamo a priori e che è nascosto nei dati. Qui, i temi o gli argomenti in cui consiste il documento sono sconosciuti, ma si crede che siano presenti poiché il testo è generato sulla base di questi argomenti.

Dirichlet: È una “distribuzione di distribuzioni”. Sì, avete letto bene. Ma cosa significa questo? Pensiamoci con l’aiuto di un esempio. Supponiamo che ci sia una macchina che produce dadi e possiamo controllare se la macchina produrrà sempre un dado con lo stesso peso per tutte le facce, o se ci sarà qualche distorsione per alcune facce. Quindi, la macchina che produce dadi è una distribuzione in quanto produce dadi di diversi tipi. Inoltre, sappiamo che il dado stesso è una distribuzione perché otteniamo più valori quando lanciamo un dado. Questo è ciò che significa essere una distribuzione di distribuzioni e questo è ciò che è Dirichlet. Qui, nel contesto della modellazione dei temi, Dirichlet è la distribuzione degli argomenti nei documenti e la distribuzione delle parole nell’argomento. Potrebbe non essere molto chiaro in questo momento, ma va bene, perché lo vedremo più in dettaglio tra un po’.

Allocazione: Questo significa che una volta che abbiamo Dirichlet, assegneremo gli argomenti ai documenti e le parole del documento agli argomenti.

Ecco. Questo è ciò che è LDA in poche parole. Ora cerchiamo di capire come funziona nella modellazione per argomenti.

Per ricapitolare, ciò che LDA dice è che ogni parola in ogni documento proviene da un argomento e l’argomento è selezionato da una distribuzione per documento sugli argomenti. Così abbiamo due matrici:

1. ϴtd = P(t|d) che è la distribuzione di probabilità degli argomenti nei documenti

2. Фwt = P(w|t) che è la distribuzione di probabilità delle parole negli argomenti

E, possiamo dire che la probabilità di una parola data documento i.e. P(w|d) è uguale a:

dove T è il numero totale di argomenti. Inoltre, supponiamo che ci sia un numero W di parole nel nostro vocabolario per tutti i documenti.

Se assumiamo l’indipendenza condizionata, possiamo dire che

P(w|t,d) = P(w|t)

E quindi P(w|d) è uguale a:

che è il prodotto di punti di ϴtd e Фwt per ogni argomento t.

Questo può essere rappresentato nella forma di una matrice come questa:

Credit: Higher School of Economics

Quindi, guardando a questo possiamo pensare a LDA simile a quella della fattorizzazione della matrice o SVD, dove decomponiamo la matrice di distribuzione di probabilità delle parole in un documento in due matrici che consistono nella distribuzione dell’argomento in un documento e nella distribuzione delle parole in un argomento.

Quindi, quello che otterremo è, per esempio, questo:

Credit: David M. Blei

E per tornare al nostro esempio dei dadi, possiamo dire che ogni parola nella distribuzione delle parole in un argomento è simile a un lato del dado, e abbiamo il parametro di Dirichlet per controllare se tutte le parole hanno la stessa probabilità in un argomento o se quell’argomento ha una distorsione estrema verso alcune parole. La stessa intuizione è per la distribuzione degli argomenti in un documento.

Bene. Ora arriva la parte importante. Come impariamo i pesi di queste due matrici?

Per cominciare, assegniamo casualmente i pesi a entrambe le matrici e supponiamo che i nostri dati siano generati secondo i seguenti passi:

1. Scegliere casualmente un argomento dalla distribuzione degli argomenti in un documento in base ai pesi assegnati. Nell’esempio precedente, diciamo che abbiamo scelto l’argomento rosa

2. Poi, basandoci sulla distribuzione delle parole per l’argomento scelto, selezioniamo una parola a caso e la mettiamo nel documento

3. Ripetiamo questo passo per l’intero documento

In questo processo, se la nostra ipotesi dei pesi è sbagliata, allora i dati reali che osserviamo saranno molto improbabili sotto i nostri pesi presunti e il processo di generazione dei dati. Per esempio, diciamo che abbiamo un documento D1 che consiste nel seguente testo:

“Qualcomm® Adreno™ 630 Visual Processing Subsystem featuring room-scale 6DoF with SLAM, Adreno Foveation”

e diciamo che assegniamo pesi elevati all’argomento T1 che ha pesi elevati per parole come Spoon, Plates, Onions ecc. Quindi, quello che stiamo facendo è cercare di massimizzare la probabilità dei nostri dati date queste due matrici.

Per identificare i pesi corretti, useremo un algoritmo chiamato campionamento di Gibbs. Capiamo ora cos’è il campionamento di Gibbs e come funziona in LDA.

Campionamento di Gibbs

Il campionamento di Gibbs è un algoritmo per il campionamento successivo di distribuzioni condizionali di variabili, la cui distribuzione sugli stati converge alla distribuzione vera nel lungo periodo. Questo è un concetto un po’ astratto e richiede una buona comprensione delle catene di Markov di Monte Carlo e del teorema di Bayes. Questi concetti e la matematica dietro di essi è abbastanza complessa ed è fuori dallo scopo di questo blog. Qui, cercherò di dare un’intuizione su come funziona il campionamento di Gibbs per identificare gli argomenti nei documenti.

Come ho detto prima, per iniziare, assumiamo di conoscere le matrici ϴ e Ф. Ora quello che faremo è cambiare lentamente queste matrici e arrivare a una risposta che massimizza la probabilità dei dati che abbiamo. Lo faremo parola per parola cambiando l’assegnazione dell’argomento di una parola. Assumiamo che non conosciamo l’assegnazione dell’argomento della parola data, ma conosciamo l’assegnazione di tutte le altre parole nel testo e cercheremo di dedurre quale argomento sarà assegnato a questa parola.

Se guardiamo questo in modo matematico, quello che stiamo facendo è cercare di trovare la distribuzione di probabilità condizionata dell’assegnazione dell’argomento di una singola parola condizionata dal resto delle assegnazioni dell’argomento. Ignorando tutti i calcoli matematici, quello che otterremo è un’equazione di probabilità condizionata che assomiglia a questa per una singola parola w nel documento d che appartiene all’argomento k:

Credit: Jordan Boyd-Graber

dove:

n(d,k): Numero di volte che il documento d usa l’argomento k

v(k,w): Numero di volte che l’argomento k usa la parola data

αk: Parametro di Dirichlet per la distribuzione da documento a argomento

λw: Parametro di Dirichlet per la distribuzione da argomento a parola

Ci sono due parti di questa equazione. La prima parte ci dice quanto ogni argomento è presente in un documento e la seconda parte ci dice quanto ad ogni argomento piace una parola. Si noti che per ogni parola, otterremo un vettore di probabilità che spiegherà quanto è probabile che questa parola appartenga a ciascuno degli argomenti. Nell’equazione di cui sopra, si può vedere che i parametri di Dirichlet agiscono anche come parametri di lisciatura quando n(d,k) o v(k,w) è zero, il che significa che ci sarà ancora qualche possibilità che la parola scelga un argomento andando avanti.

Facciamo ora un esempio:

Per cominciare, supponiamo di avere un documento con un’assegnazione casuale dell’argomento parola, per esempio, come mostrato qui sotto:

Abbiamo anche la nostra matrice di conteggio v(k,w) come mostrato sotto:

Ora cambiamo l’assegnazione della parola mondo nel documento.

  • Prima di tutto, ridurremo il numero di mondo nell’argomento 1 da 28 a 27 poiché non sappiamo a quale argomento appartiene mondo.
  • Secondo rappresentiamo la matrice n(d,k) nel modo seguente per mostrare quanto un documento usa ogni argomento

– Terzo, rappresentiamo v(k,w) nel modo seguente per mostrare quante volte ogni argomento è assegnato a questa parola

  • – Quarto, moltiplicheremo queste due matrici per ottenere le nostre probabilità condizionali

  • Infine, sceglieremo a caso uno qualsiasi degli argomenti e lo assegneremo al mondo e ripeteremo questi passi anche per tutte le altre parole. Intuitivamente, l’argomento con la più alta probabilità condizionale dovrebbe essere selezionato, ma come possiamo vedere anche altri argomenti hanno qualche possibilità di essere selezionati

Ecco. Questo è ciò che l’algoritmo di campionamento di Gibbs sta facendo sotto il cofano. Anche se abbiamo saltato alcuni dettagli come la sintonizzazione degli iperparametri, ma da una prospettiva intuitiva, questo è come funziona il campionamento di Gibbs per la modellazione degli argomenti.

Quindi, questo è tutto per la teoria della Latent Dirichlet Allocation. Spero che questo sia stato utile per capire cos’è il topic modelling e come usiamo LDA con Gibbs per il topic modelling. Nel prossimo articolo, posterò l’implementazione di LDA usando Python.

Grazie!

admin

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

lg