I modelli n-gram

I modelli n-gram

Immagina di avere una scatola piena di mattoncini LEGO con tante parole diverse su ogni mattoncino. Ora, se volessi costruire una torre di LEGO usando solo alcune parole che insieme formano delle frasi sensate, ci sarebbe un modo giusto e molti modi sbagliati di metterle insieme, giusto?

La probabilità di una sequenza di parole, chiamiamola “sequenza magica“, è come provare a costruire una torre di LEGO dove solo una particolare combinazione di mattoncini (parole) darà una torre (frase) che ha senso e rimane in piedi.

Se hai la sequenza magica W che è fatta di parole come “il”, “gatto”, “ama”, “il”, “pesce” e “fresco” quando diciamo P(W) o la probabilità di W, ciò significa “quanto è probabile che in una frase casuale (come costruire una torre LEGO senza guardare i pezzi) troveremo la nostra sequenza magica esatta ‘il gatto ama il pesce fresco’?”

In un libro o quando parliamo, alcune sequenze di parole sono molto comuni, come “buongiorno” o “come stai?”. Altre sequenze, come “astronave panino arcobaleno”, sono molto meno comuni! Quindi un modello linguistico è come un grande libro delle regole che ci dice quanto spesso aspettarsi ogni sequenza di parole.

Un modello linguistico guarda tutte le torri (frasi) che le persone hanno costruito prima e usa quelle per indovinare quanto sia probabile che tu costruirai una frase simile. Allora, se più gente ha costruito la frase “il gatto ama il pesce fresco” piuttosto che “il gatto guida l’aereo”, il modello prevede che la prima è più probabile, come se avessi più “mattoncini” per la parola “ama” rispetto a “guida”.

Più è lunga la frase e meno frasi identiche riusciamo a trovare tra quelle già usate delle persone in passato perché ci sono troppe combinazioni possibili, quindi risulta più difficile determinare la probabilità di crearne una simile.

Per questa ragione al posto di considerare tutte le parole di una frase o di un testo se ne considera solo una parte.

I modelli n-gram

Un n-gramma è un piccolo pezzo di una frase.


Immagina che tu abbia una scatola piena di pezzi di puzzle che sono parole. Ogni pezzo del puzzle è una parola. Quando metti insieme questi pezzi in un certo ordine, formano frasi o parti di un discorso.

Ecco alcuni esempi per capire meglio:

Se “n” è 1, allora l’n-gramma è chiamato “unigramma” e ogni pezzo è solo una parola. Come “gatto”.
Se “n” è 2, allora è un “bigramma“, e ogni pezzo è formato da due parole. Come “gatto nero”.
Se “n” è 3, è un “trigramma“, e ogni pezzo ha tre parole. Come “il gatto nero”.

Gli n-grammi aiutano i computer a capire e predire le parole o frasi che le persone potrebbero dire o scrivere. È come se aiutassero il computer a completare i puzzle della lingua!

Un modello n-gram funziona un po’ come un computer che prova a mettere insieme un puzzle di parole. Il computer guarda i pezzi che ha già messo insieme (le parole o frasi precedenti) e cerca di indovinare quali pezzi (parole o frasi) potrebbero venire dopo. Più grande è il numero di “n” in un n-gramma, più il pezzo di puzzle (la frase) è lungo e dettagliato.

Per esempio, se stai scrivendo “Ho un gatto che…”, un modello n-gramma potrebbe cercare di completare la frase basandosi su quali parole sono spesso usate dopo “Ho un gatto che”. Magari potrebbe suggerire “è molto carino” o “ama dormire”.

Questo aiuta i computer a capire meglio come le persone parlano e scrivono, rendendo più facile per loro aiutare con cose come la traduzione di lingue o la correzione automatica quando scrivi al computer o al telefono.


Breve approfondimento matematico

Supponiamo di avere una sequenza di parole W=w1,w2,…,wN con N , Dove N è il numero di parole nella sequenza. La probabilità di questa sequenza assegnata dal modello linguistico è P(W)=P(w1,w2,…,wN)
questo viene spesso calcolato come il prodotto delle probabilità condizionate dovute alla regola della catena di probabilità:

P(W)=P(w1)×P(w2∣w1)×P(w3∣w1,w2)×…×P(wN∣w1,…,wN−1)

nei modelli n-gram si utilizza un’approssimazione per ognuna delle probabilità condizionate:

P(wN|w1,…,wN−1) ~ P(wN|wN−1,wN-2,..wN-n+1)

per un 2-gram

P(wN|w1,…,wN−1) ~ P(wN|wN−1)

per un 3-gram

P(wN|w1,…,wN−1) ~ P(wN|wN−1,wN-2)

per un 4-gram

P(wN|w1,…,wN−1) ~ P(wN|wN−1,wN-2,wN-3)

In sintesi un modello n-gram è un tipo di modello statistico per la linguistica e la modellazione del linguaggio naturale che si basa sulla premessa che la probabilità di una parola in un testo dipende solo dalle n−1 parole precedenti.

Un n-gram è una sequenza di n elementi (in questo caso, parole). Ad esempio, in un modello bigramma (2-gram), ogni parola è predetta in base alla parola che la precede direttamente. In un trigrammma (3-gram), la predizione si basa sulle due parole precedenti, e così via.

Ecco come funziona questa approssimazione nel caso in cui n=3 (3-gram).

P(W)=p(w1)p(w2|w1)p(w3|w1,w2)p(w4|w2,w3)p(w5|w3,w4)….

Questa approssimazione semplifica notevolmente il calcolo rispetto a considerare l’intera storia di una parola, che sarebbe computazionalmente impraticabile per testi lunghi.


I modelli n-gram sono limitati dalla lunghezza dell’n-gram scelto. Non catturano dipendenze a lungo termine bene quanto i modelli di linguaggio più avanzati, come le reti neurali. Inoltre man mano che n aumenta, diventa meno probabile trovare esempi esatti di n-gram specifici nei dati di addestramento, rendendo le stime delle probabilità meno affidabili.

In sintesi, nei modelli n-gram, si fa un’approssimazione pratica delle probabilità condizionali limitando la storia considerata a soli n−1 elementi, per ragioni di gestibilità computazionale. Questo approccio fornisce un buon equilibrio tra accuratezza e complessità computazionale, ma ha le sue limitazioni, specialmente in termini di cattura delle dipendenze a lungo termine nel linguaggio.

Nella pratica, i bigrammi e i trigrammi sono i più comuni, poiché modelli con N più elevato richiedono enormi quantità di dati e potere computazionale, dove molte possibili combinazioni di parole non sono mai state osservate nel corpus di addestramento.

Tecniche come lo smoothing e il backoff vengono utilizzate per risolvere il problema derivante dalle combinazioni scarse o mai osservate. Lo smoothing assegna una piccola probabilità agli n-grammi non osservati, mentre il backoff utilizza modelli n-gram di ordine inferiore se non sono disponibili dati sufficienti per un n-gramma specifico.

Questi modelli sono utilizzati in molte applicazioni, come il riconoscimento vocale, la correzione automatica, la traduzione automatica e la predizione del testo.

Costruzione del modello

Si inizia con un ampio corpus di testo, che può essere qualsiasi collezione di testi (libri, articoli, trascrizioni, ecc.). Questo testo viene solitamente preprocessato per rimuovere caratteri non necessari, normalizzare le parole (come portare tutto in minuscolo), e talvolta rimuovere le parole molto comuni (stop words).

Il testo viene suddiviso in token, che sono tipicamente parole, ma possono anche essere caratteri o altre unità linguistiche.

Dopo la tokenizzazione, si procede alla generazione degli N-gram. Per un N specifico, si crea ogni possibile sequenza di N token nel testo. Ad esempio, in un bigramma (2-gram), ogni coppia di parole consecutive nel testo diventa un bigramma.

Si calcola la frequenza di ogni N-gram nel corpus. Questo significa contare quante volte ogni specifica sequenza di N parole appare nel testo.

Esempio di matrice di co-occorrenza di due parole (bigramma)


Questa tabella indica quante volte ogni coppia di parole adiacenti appare nel testo. Ad esempio, la parola “il” appare 4 volte prima di “cane” e 2 volte prima di “gatto”.

Le frequenze vengono utilizzate per calcolare le probabilità. La probabilità di un N-gram può essere calcolata come la frequenza di quel n-gram divisa per la frequenza del (n-1)-gram che lo precede. Ad esempio, la probabilità del bigramma “buona sera” sarebbe il numero di volte che “buona sera” appare diviso per il numero di volte che appare “buona”.

Usando i dati della tabella d’esempio si ottiene la seguente tabella

rappresenta la matrice delle probabilità condizionate P(w2|w1), con valori arrotondati. Ogni cella mostra la probabilità che la parola w2 segua la parola w1 nel testo.

Esempio:

P(gatto|il) = numero di volte cha appare il bigramma “il gatto” / numero di volte che appare “il” = 2/9 = 0,22

Se si utilizzano tecniche di smoothing, queste vengono applicate per assegnare una piccola probabilità anche agli N-gram che non appaiono nel corpus. Come abbiamo già detto, ciò aiuta a gestire il problema degli N-gram sconosciuti o rari.

Una volta costruito il modello, può essere utilizzato per vari compiti, come la predizione del testo, dove si utilizzano le probabilità degli N-gram per predire la parola successiva in una sequenza.