La comparsa del linguaggio verbale come forma articolata di comunicazione risale a circa 100.000 anni fa, mentre la scrittura vanta “solo” 5.000 anni di vita nei quali la capacità di trasferimento della conoscenza ha permesso uno sviluppo esponenziale della nostra civiltà. Si comprende quindi quanto sia cruciale lo studio del linguaggio, costituendo una connotazione distintiva dell’intelligenza dell’uomo rispetto a quella degli altri esseri viventi.
L’elaborazione del linguaggio naturale (comunemente indicata come NLP), si riferisce al processamento automatico del linguaggio naturale per mezzo di computer, per tutte le finalità che necessitino una comprensione del dato letterale.
Si possono individuare 3 ragioni fondamentali alla base dell’NLP1:
In rapporto ai linguaggi formali, consueto oggetto di elaborazione, il linguaggio naturale presenta un ordine di complessità estremamente elevato, con ambiguità, ridondanze, significati impliciti e dipendenze dal contesto che ne rendono la piena comprensione un problema AI-Completo2, tanto che già Alan Turing3 individuò come test ultimo per definire l’intelligenza di una macchina proprio la capacità di comunicare attraverso il linguaggio naturale in modo indistinguibile da un umano.
Il tema più ricorrente che troviamo già agli albori del NLP negli anni ’40 è quello della Traduzione Automatica, o Machine Translation. Dopo la seconda guerra mondiale, nella quale si era notevolmente sviluppata la crittografia, lo scienziato statunitense Warren Weaver propose in un memorandum4 del 1949 una gamma di approcci più strutturati al problema della traduzione, rispetto all’usuale parola-per-parola, che avrebbero stimolato la ricerca degli anni a venire.
Le difficoltà incontrate evidenziarono il bisogno di sinergie interdisciplinari per trasporre la conoscenza tra lingue con regole non immediatamente riconducibili a una radice comune. L’opera del 1957 Syntactic Structures5 del linguista americano Noam Chomsky offrì un contributo fondamentale al problema con la grammatica generativa, insieme di regole che specificano in modo formale e ricorsivo le strutture sintattiche di un linguaggio.
Tuttavia i risultati degli anni ’60 e ’70 disattesero le aspettative riposte nel NLP e, a seguito di un report6 dell’Automatic Language Processing Advisory Committee (ALPAC) del 1966 vi fu un congelamento dei fondi USA destinati alla ricerca. Di fatto, i sistemi NLP fino agli anni ’80 erano costituiti per lo più da strutture notevolmente complesse di regole procedurali ed euristiche, con scarsa capacità di generalizzare rispetto ai problemi per i quali erano stati concepiti.
Grazie anche alla crescita esponenziale della potenza computazionale, i primi approcci di Machine Learning di tipo statistico e probabilistico7 a cavallo tra gli anni ’80 e ’90 riavviarono con forza la stagione del NLP, con un passaggio dai sistemi rule-based procedurali ed esplicitamente codificati ai sistemi corpus-based nei quali l’elaborazione è il risultato dall’addestramento del sistema su uno o più corpus di riferimento.
In particolare, per quanto riguarda la traduzione parliamo di Statistical Machine Translation (SMT), i cui parametri del modello sono inferiti statisticamente dall’analisi di due corpus, l’uno traduzione dell’altro.
Figura 1 - Schema di SMT per la traduzione Myanmar-Inglese8
Sebbene l’approccio Statistico abbia rappresentato un enorme passo in avanti, i sistemi di MT rimanevano complessi8, basati su parole o loro sequenze (n-grammi) nella specifica lingua senza reale astrazione del significato, con sottocomponenti per gestire l’allineamento tra parole e parti di frasi nelle due lingue, e una limitata tolleranza per ambiguità, anomalie, modi di dire e parole non in vocabolario - specie tra lingue lontane strutturalmente.
I modelli di NLP basati sull’approccio statistico-probabilistico hanno dominato la scena per oltre 20 anni, con sistemi che si sono costantemente evoluti incrementando le loro performance – due esempi su tutti Google Translate9 e Microsoft Translator che fino al 2016 erano ancora sistemi di SMT di grande complessità, con necessità di utilizzare una o più lingue “ponte” per tradurre tra lingue diverse dall’inglese.
L’anno di svolta del NLP è stato il 2013 con lo studio10 di Tomáš Mikolov nel quale viene presentato il modello Word2Vec, in grado di ricavare una rappresentazione delle parole come grandezza vettoriale.
Questi vettori, o word embedding, vengono ricavati in modo iterativo a partire dall’analisi del contesto di utilizzo delle parole nell’ambito di un corpus di addestramento, e sono in grado di cogliere nelle varie dimensioni la semantica della parola (c.d. semantica distribuzionale).
Sebbene la ricerca di una rappresentazione del testo in termini vettoriali fosse già da anni oggetto di ricerca11, anche con modelli di Latent Semantic Analysis basati su matrici di co-occorrenza e SVD12, il modello Word2Vec si è rilevato più efficace nel cogliere le relazioni tra le varie parole e computazionalmente efficiente.
La rappresentazione l’informazione testuale in forma vettoriale ha aperto la strada all’utilizzo di modelli basati su Reti Neurali (prima densamente connesse, poi convoluzionali e ricorrenti) per i vari ambiti del NLP – dalla classificazione di testo, al riconoscimento di entità, all’analisi grammaticale, e ovviamente al compito principe della Machine Translation: nel 2014 Google sviluppa il modello Sequence-to-Sequence13 (Seq2Seq) basato su Word Embedding e Reti Neurali Ricorrenti, primo vero modello di Neural Machine Translation (NMT).
Figura 2: Seq2Seq model13
Rispetto ai sistemi SMT sviluppatisi in complessità con sottosistemi da strutturare e mantenere singolarmente, i modelli di NMT14, e più in generale i modelli di NLP basati su Reti Neurali, sono implementati come un sistema unico end-to-end, senza sottocomponenti da gestire e ottimizzare individualmente. Il tutto con performance, flessibilità e scalabilità superiori, a fronte di uno sforzo di ingegnerizzazione nettamente inferiore.
I modelli basati esclusivamente su Reti Neurali Ricorrenti (RNN) come Seq2Seq, sebbene in grado di trattare testi di lunghezza arbitraria codificandone il significato secondo l’ordine delle parole, mostravano che la loro capacità di apprendere diminuiva in modo sensibile all’aumentare della lunghezza del testo in input, con limitata capacità di cogliere relazioni tra parole molto distanti e contesti molto articolati.
Viene così introdotto in questi modelli un meccanismo di allineamento chiamato attention15 che, una volta addestrato con il modello, riesce a focalizzare le relazioni tra le singole parti dell’input e quelle dell’output, con un sensibile miglioramento qualitativo del risultato anche su testi lunghi e articolati.
Figura 3 - Esempio di allineamento e performance RNN+attention su input di 50 parole (RNNsearch-50)15
Pur con performance eccellenti con l’introduzione di attention e altre varianti, i modelli basati su RNN risultano ancora computazionalmente onerosi e scarsamente parallelizzabili per la natura sequenziale delle RNN, nelle quali l’input di ogni cella della rete dipende dall’output della cella adiacente. Uno dei modelli di NLP più noti di questa tipologia è ELMo16, in grado di ricavare word embedding di tipo contestuale a partire da un modello linguistico sviluppato con Reti Ricorrenti Bidirezionali, utilizzabili con successo nei problemi topici del NLP.
Figura 4 - Architettura del Transformer e Performance BLEU/Training Cost su Machine Translation17
Nel 2017 viene presentato il Transformer17, modello rivoluzionario che ad costituisce lo stato dell’arte alla base degli attuali sistemi di NLP: l’idea per superare i limiti delle RNN è quella di un modello basato sul solo meccanismo di attention, sia per la parte di encoder per ottenere la codifica dell’input, sia per la parte di decoder per lo sviluppo dell’output.
La struttura del Transformer senza reti sequenziali, permette uno sviluppo focalizzato sulla “verticalizzazione” in profondità dei moduli di encoding e decoding, in modo da beneficiare delle migliori performance ottenibili dall’approccio del Deep Learning con un numero sempre crescente di livelli e di parametri (già il modello nell’articolo originario prevedeva 6 layers di base per encoder e decoder). Il tutto con un costo computazionale inferiore di 1-2 ordini di grandezza rispetto ai modelli preesistenti.
Lo stato dell’arte dei sistemi NLP basati sui trasformer sono grandi modelli sviluppati in profondità e per numero di parametri, preventivamente addestrati su grandi corpus in modo non supervisionato, da calibrare con un addestramento di fine-tuning sullo specifico compito di interesse, adottando un approccio flessibile tipico del Transfer learning. Tra i modelli attualmente più utilizzati segnaliamo:
- BERT18, sviluppato e utilizzato da Google per il processamento delle query di ricerca a partire da fine 2019, con 110M-340M parametri a seconda della profondità scelta del modello.
- Il modello GPT19 (Generative Pre-Trained Transformer) sviluppato da OpenAI con 117M parametri, il successivo GPT-220 con 1,5B parametri e il più recente GPT-3 con ben 175B21 parametri.
- Il modello T522 sviluppato da Google, con 11B parameteri e un approccio unificato text-to-text che consente allo stesso modello di svolgere direttamente diversi compiti specificandoli nel testo di input.
________________________________________________
1 S. J. Russell & P. Norvig, 2021, Artificial intelligence: A modern approach (4th ed.), Hoboken: Pearson, p. 823.
2 S. C. Shapiro, 1992, Encyclopedia of Artificial Intelligence (2nd ed.), New York: John Wiley, pp. 54–57.
3 A. M. Turing, 1950, Computing Machinery and Intelligence. Mind 49: pp.433-460.
4 W. Weaver, 1949, Translation, in W. N. Locke, D. A. Booth, 1955, Machine Translation of Languages, Cambridge, Massachusetts: MIT Press. pp. 15–23.
5 N. Chomsky, 1957, Syntactic structures, 's-Gravenhage: Mouton.
6 J. R. Pierce, J. B. Carroll, et al., 1966, Language and Machines: Computers in Translation and Linguistics. ALPAC report, National Academy of Sciences, National Research Council: Washington DC
7 P. Brown, J. Cocke, S. Della Pietra, V. Della Pietra, F. Jelinek, R. Mercer, and P. Roossin, 1988, A statistical approach to language translation, in Proceedings of the 12th conference on Computational linguistics - Volume 1 (COLING '88). Association for Computational Linguistics, USA, pp.71–76
8 N. Lin, K. Soe, & N.L. Thein, 2011, Chunk-based Grammar Checker for Detection Translated English Sentences, International Journal of Computer Applications, 28, pp. 7-12.
9 F. Och,, 28.04.2006, Statistical machine translation live, Retrieved March 30, 2021, from https://ai.googleblog.com/2006/04/statistical-machine-translation-live.html
10 T. Mikolov, I. Sutskever, K. Chen, G. Corrado & J. Dean, 2013, Distributed representations of words and phrases and their compositionality, arXiv preprint arXiv:1310.4546.
11 K. Lund, C. Burgess, 1996, Producing high-dimensional semantic spaces from lexical co-occurrence, in Behavior Research Methods, Instruments, & Computers 28, pp.203–208.
12 D.L. Rohde, L.M. Gonnerman, & D.C. Plaut, 2006, An improved model of semantic similarity based on lexical co-occurrence, Communications of the ACM, 8(627-633), 116.
13 I. Sutskever, O. Vinyals, & Q.V. Le, 2014, Sequence to sequence learning with neural networks, arXiv preprint arXiv:1409.3215.
14 C. Manning, 02/02/2021, Machine Translation, Sequence-to-Sequence and Attention, in CS224n: NLP with Deep Learning, Stanford University, ultimo accesso: 02/04/2021, http://web.stanford.edu/class/cs224n/slides/cs224n-2021-lecture07-nmt.pdf , p.47
15 D.Bahdanau, K. Cho & Y. Bengio, 2014, Neural machine translation by jointly learning to align and translate, arXiv preprint arXiv:1409.0473.
16 M.E. Peters, M. Neumann, M. Iyyer, M. Gardner, C. Clark, K. Lee & L. Zettlemoyer, 2018, Deep contextualized word representations, arXiv preprint arXiv:1802.05365.
17 A.Vaswani, N.Shazeer, N.Parmar, J.Uszkoreit, L.Jones, A.Gomez, L.Kaiser & I. Polosukhin, 2017, Attention is all you need. arXiv preprint arXiv:1706.03762.
18 J. Devlin, M.W. Chang, K. Lee & K. Toutanova, 2018, Bert: Pre-training of deep bidirectional transformers for language understanding, Google AI Language, arXiv preprint arXiv:1810.04805.
19 A. Radford, K. Narasimhan, T. Salimans & I. Sutskever, 11.06.2018, Improving language understanding by generative pre-training, OpenAI, Ultimo accesso: 08.04.2021, https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf
20 A. Radford, J. Wu, R. Child, D. Luan, D. Amodei & I. Sutskever, 14.02.2019, Language models are unsupervised multitask learners, OpenAI, Ultimo accesso: 08.04.2021, https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf
21 T.B. Brown, B. Mann, N. Ryder, M. Subbiah, J. Kaplan, P. Dhariwal, D. Amodei et al., 2020, Language models are few-shot learners, OpenAI, arXiv preprint arXiv:2005.14165.
22 C. Raffel, N. Shazeer, A. Roberts, K. Lee, S. Narang, M. Matena, P.J. Liu et al., 2020, Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer, Journal of Machine Learning Research, 21, pp. 1-67.
Un Modello linguistico o Language Model, costruito a partire da un corpus di training in una determinata lingua, permette di associare una probabilità ad una determinata sequenza di parole.
Le applicazioni sono molteplici e spaziano dal confronto sulla verosimiglianza di frasi, al calcolo della probabilità della parola successiva in una frase, all'autocompletamento, alla correzione di parole fuori contesto in una frase, all'individuazione dell'output più probabile nella speech recognition, al supporto predittivo alla comunicazione aumentata e accessibile.
Attraverso un approccio "tradizionale" statistico-probabilistico basato sugli N-Grammi, sequenze di N parole nel corpus, esaminiamo come è possibile costruire un modello di linguaggio in modo relativamente semplice.
La probabilità degli Unigrammi all'interno del corpus, ovvero delle singole parole, è banalmente \(\displaystyle P(w)=\frac{C(w)}{m}\) ovvero il rapporto tra il numero di occorrenze della parola nel corpus e la dimensione del corpus.
Dato invece un generico N-Gramma \(w_1^n=w_1w_2\cdots w_n\) definiamo la probabilità dell'N-Gramma come probabilità condizionata \(\displaystyle P(w_n|w_1\cdots w_{n-1}) =P(w_n|w_1^{n-1}) =\frac{C(w_1^n)}{\sum C(w_1^{n-1} w)}\) , rapporto tra le occorrenze dell'N-Gramma e quelle di tutti gli N-Grammi nel Corpus le cui n-1 prime parole sono \(w_1^{n-1}\).
Con determinati accorgimenti sulla conclusione della frase che vedremo a seguire, è possibile semplificare l'espressione come \(\displaystyle P(w_n|w_1\cdots w_{n-1}) =P(w_n|w_1^{n-1}) =\frac{C(w_1^n)}{C(w_1^{n-1})}\) , rapporto tra le occorrenze dell'N-Gramma e quelle dell' (N-1)-Gramma composto dalle prime N-1 parole
Data una frase \(w_1w_2\dots w_n\) possiamo calcolare la probabilità \(P(w_1w_2\dots w_n)\) della sequenza utilizzando la semplice relazione relativa alla probabilità condizionata per cui \(P(A \cap B)=P(A)P(B|A) \) . Avremo pertanto che la probabilità di una frase è riconducibile al prodotto delle probabilità di N-Grammi secondo la relazione:
\(\displaystyle P(w_1^n)=P(w_1^{n-1})P(w_n|w_1^{n-1}) \\ =P(w_1^{n-2})P(w_{n-1}|w_1^{n-2})P(w_n|w_1^{n-1}) \\ = P(w_1)P(w_2|w_1)P(w_3|w_1^2)\cdots P(w_n|w_1^{n-1}) \\ =P(w_1)\prod_{i=2}^n P(w_i|w_1^{i-1}) \)
Ciò è intuitivamente verificabile con un esempio, ipotizzando ad esempio di voler calcolare la probabilità della frase "oggi vado al mare" avremo \(P(\text{oggi vado al mare}) = P(\text{oggi})P(\text{vado}|\text{oggi})P(\text{al}|\text{oggi vado})P(\text{mare}|\text{oggi vado al})\)
La probabilità di una frase come calcolata sopra si scontra con un primo limite obiettivo, ovvero che è calcolabile e non nulla solo se nel corpus sono presenti tutti gli N-Grammi coinvolti nel calcolo. Ciò implicherebbe un corpus enorme dove compaiono tutte le possibili frasi da valutare, ipotesi assolutamente irrealistica e che non consentirebbe al nostro modello di generalizzare.
Si formula quindi l'assunzione che la probabilità di un generico N-Gramma di un qualunque ordine m>n sia ragionevolmente approssimabile come quella del N-Gramma di ordine n \(P(w_k|w_{k-m+1}^{k-1}) \approx P(w_k|w_{k-n+1}^{k-1})\) , ovvero che la probabilità di una parola sia condizionata solo dalle n parole precedenti.
Assumiamo ad esempio n=2 e che quindi il nostro modello sia basato su digrammi, avremo quindi che la probabilità della frase sopra vista diventa: \(P(\text{oggi vado al mare}) = P(\text{oggi})P(\text{vado}|\text{oggi})P(\text{al}|\text{vado})P(\text{mare}|\text{al})\)
Come vediamo il modello è già in grado di effettuare una prima generalizzazione, risultando sufficiente la sola presenza nel Corpus dei digrammi coinvolti.
Più in generale l'approssimazione di Markov per N-Grammi di grado N ci consente di modifcare la probabilità della frase vista sopra come prodotto di N-Grammi al più di grado N:
\(\displaystyle P(w_1^n)=P(w_1)\prod_{i=2}^n P(w_i|w_{\max\{1;i-N+1\}}^{i-1}) \)
L'esempio sopra ci mostra che, a prescindere dalla scelta di n, vengono utilizzati nel calcolo anche n-1 N-Grammi di grado inferiore ad n all'inizio della frase.
Questo non è desiderabile per almeno due motivi: oltre al fatto che vengono utilizzati N-Grammi eterogenei con un diverso grado di sensibilità al contesto, andiamo a perdere un'informazione di contesto molto rilevante che è quella relativa all'inizio della frase.
La probabilità dell'unigramma \(P(oggi)\) difatti è relativa alla mera frequenza relativa dell'unigramma nel corpus, senza nessuna informazione riguardo alla posizione nella frase.
A questo fine si prependono n-1 token speciali di delimitazione <d> per rappresentare correttamente il contesto di inizio.
Nel caso esaminato, dove si utilizzano Digrammi, andremo ad inserire un solo <d> in avvio e avremo quindi:
\(P(\text{<d>oggi vado al mare}) = P(\text{oggi|<d>})P(\text{vado}|\text{oggi})P(\text{al}|\text{vado})P(\text{mare}|\text{al})\)
Utilizzando invece Trigrammi, si inseriranno due <d> in avvio di frase e avremo:
\(P(\text{<d><d>oggi vado al mare}) = P(\text{oggi|<d> <d>})P(\text{vado}|\text{<d> oggi})P(\text{al}|\text{oggi vado})P(\text{mare}|\text{vado al})\)
Anche alla fine della frase abbiamo una esigenza analoga di corretta rappresentazione del contesto di chiusura, inserendo un solo delimitatore <d> e un corrispondente N-Gramma a valorizzare la probabilità che le ultime N-1 parole rilevino realmente la fine della frase.
Come accennato sopra, questo accorgimento ci permetterà di utilizzare in modo coerente la relazione \(P(w_n|w_1^{n-1}) =\frac{C(w_1^n)}{C(w_1^{n-1})}\) che altrimenti potrebbe risultare inesatta per gli N-Grammi in chiusura di frase.
Riprendendo l'esempio con l'utilizzo di Digrammi avremo:
\(P(\text{<d>oggi vado al mare<d>}) = P(\text{oggi|<d>})P(\text{vado}|\text{oggi})P(\text{al}|\text{vado})P(\text{mare}|\text{al})P(\text{<d>}|\text{mare})\)
Mentre utilizzando Trigrammi:
\(P(\text{<d><d>oggi vado al mare<d>}) = P(\text{oggi|<d> <d>})P(\text{vado}|\text{<d> oggi})P(\text{al}|\text{oggi vado})P(\text{mare}|\text{vado al})P(\text{<d>}|\text{mare})\)
Con l'inserimento dei delimitatori tra le n parole possiamo quindi definire in modo più compatto la probabilità della frase:
\(\displaystyle P(w_1^n)= \prod_{i=N}^n P(w_i|w_{i-N+1}^{i-1}) \)
Definiti i criteri per il modello linguistico, si procede quidi al calcolo della probabilità degli N-Grammi organizzando i dati del Corpus di training in Matrici.
Il primo passo è la realizzazione di una matrice delle occorrenze degli N-Grammi, dove le righe riportano gli (N-1)-Grammi ai quali sono condizionate la parole w indicate nelle colonne.
Consideriamo ad esempio il seguente corpus di 3 frasi sul quale costruire un modello con Digrammi:
Oggi vado al mare
Al mare oggi piove
Se piove vado al parco
\(\begin{array}{r|r|r|r|} C(w_i|w_{i-1})& <d> & oggi & vado & al & mare & piove & se & parco \\ \hline <d> & 0 & 1 & 0 & 1 & 0 & 0 & 1 & 0 \\ \hline oggi & 0 &0 & 1 &0 &0 & 1 & 0 & 0\\ \hline vado & 0 & 0 &0 & 2 & 0 &0 &0 &0\\ \hline al & 0 & 0 & 0 & 0 & 2 & 0 & 0 & 1\\ \hline mare & 1 & 1 & 0 & 0 & 0 & 0 & 0 & 0\\ \hline piove & 1 &0 & 1 &0 & 0 &0 & 0 & 0\\ \hline se & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0\\ \hline parco & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ \hline \end{array}\)
\(\begin{array}{r|r|r|r|} P(w_i|w_{i-1})& <d> & oggi & vado & al & mare & piove & se & parco \\ \hline <d> & 0 & 0,33 & 0 & 0,33 & 0 & 0 & 0,33 & 0 \\ \hline oggi & 0 &0 & 0,50 &0 &0 & 0,50 & 0 & 0\\ \hline vado & 0 & 0 &0 & 1 & 0 &0 &0 &0\\ \hline al & 0 & 0 & 0 & 0 & 0,67 & 0 & 0 & 0,33\\ \hline mare & 0,50 & 0,50 & 0 & 0 & 0 & 0 & 0 & 0\\ \hline piove & 0,50 &0 & 0,50 &0 & 0 &0 & 0 & 0\\ \hline se & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0\\ \hline parco & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ \hline \end{array}\)
Per calcolare la probabilità di una qualunque frase \(w_1^n \) , inseriti gli opportuni delimitatori, effettueremo quindi una produttoria delle probabilità dei Digrammi \(\displaystyle P(w_1^n)=\prod_{i=1}^{n-1} P(w_{i+1}|w_i)\) . Nella pratica, con corpus estesi e probabilità che tendono rapidamente a zero, è opportuno per evitare problemi di underflow utilizzare la relazione in forma logaritmica \(\displaystyle \log P(w_1^n)=\sum_{i=1}^{n-1} \log P(w_{i+1}|w_i)\)
Proviamo ad esempio a calcolare la probabilità di <d>Oggi piove<d> : \(P(\text{<d>oggi piove<d>})=P(\text{oggi}|\text{<d>})P(\text{piove}|\text{oggi})P(\text{<d>}|\text{piove})=0,33\cdot 0,50\cdot 0,50=0,0825\)
Un primo limite che si rileva immediatamente è quello relativo all'utilizzo di parole sconosciute. Il modello come impostato non appare applicabile a frasi con parole non presenti nel corpus.
Per gestire il caso di parole sconosciute viene costruito un dizionario a partire dal corpus, composto generalemente dalle parole con frequenza uguale o maggiore di un parametro \(k\) o in accordo ad altro criterio, sostituendo poi nel corpus tutte le parole non presenti nel dizionario con il token <unk> a rappresentare una parola sconosciuta.
Riprendendo l'esempio sopra, con un dizionario costruito con k=2 , vediamo che le parole se e parco vengono sostituite da <unk> e la nostra matrice delle probabilità viene ricalcolata come:
\(\begin{array}{r|r|r|r|} P(w_i|w_{i-1})& <d> & oggi & vado & al & mare & piove & <unk> \\ \hline <d> & 0 & 0,33 & 0 & 0,33 & 0 & 0 & 0,33 \\ \hline oggi & 0 &0 & 0,50 &0 &0 & 0,50 & 0 \\ \hline vado & 0 & 0 &0 & 1 & 0 &0 &0 \\ \hline al & 0 & 0 & 0 & 0 & 0,67 & 0 & 0,33\\ \hline mare & 0,50 & 0,50 & 0 & 0 & 0 & 0 & 0 \\ \hline piove & 0,50 &0 & 0,50 &0 & 0 &0 & 0 \\ \hline <unk> & 0,50 & 0 & 0 & 0 & 0 & 0,50 & 0 \\ \hline \end{array}\)
Proviamo ora a calcolare la probabilità di una frase con parole non presenti nel dizionario:
\(P(\text{<d>Quando piove vado al museo<d>})=P(\text{<d><unk> piove vado al <unk><d>})= \\ = P(\text{<unk>}|\text{<d>})P(\text{piove}|\text{<unk>})P(\text{vado}|\text{piove})P(\text{al}|\text{vado})P(\text{<unk>}|\text{al})P(\text{<d>}|\text{<unk>})= \\ = 0,33\cdot 0,50\cdot 0,50\cdot 1 \cdot 0,33 \cdot 0,50 =0,0136125\)
E' quindi possibile calcolare la probabilità della frase secondo pur in presenza di parole estranee al corpus.
Un altro limite che rileviamo dall'osservazione matrice di probabilità è relativo all'alto numero di valori pari a zero nella matrice - circostanza tanto più vera quanto meno esteso è il corpus e quanto più alto è il grado N degli N-Grammi utilizzato.
La presenza di un N-Gramma con probabilità zero nel modello, rende automaticamente a probabilità nulla ogni frase che lo contenga a prescindere dall'apporto di probabilità degli altri N-Grammi.
Nell'esempio sopra la frase Oggi piove al mare avrebbe probabilità zero in quanto \(P(\text{al}|\text{piove})=0\) , nonostante non appaia come frase del tutto implausibile per il modello.
Questo non è un comportamento generalmente desiderabile e limita la generalizzazione del modello in presenza di N-Grammi non presenti nel Corpus, anche dopo l'adozione di un dizionario.
Indichiamo tre approcci utilizzati per ovviare a questo problema:
Questo approccio consiste in un ricalcolo della matrice di probabilità applicando uno smoothing di valore k , dipendente sia dalla numerosità/sparsità della tabella e dal grado di smoothing desiderato, secondo la formula
\(\displaystyle P(w_n|w_1^{n-1}) =\frac{C(w_1^n)+k}{C(w_1^{n-1})+k|V|}\) , dove |V| è la dimensione del dizionario, pari al numero di colonne della matrice.
In questo caso, ipotizzando uno smoothing con k=0,1 la nostra matrice sarà ricalcolata a partire dalle occorrenze come:
Vediamo ora che non esistono più probabilità nulle nella matrice (sebbene alcuni casi specifici dovrebbero essere trattati separatamente, come l'ipotesi di un Digramma (<d>|<d>) da porre a zero, in quanto corrispondente ad una frase vuota), ed il modello è in grado di generalizzare su qualunque frase con qualunque parola.
L'approccio di backoff prevede, nel caso la probabilità in tabella del N-Gramma \(P(w^n_{n-N+1})\) sia nulla, di utilizzare la probabilità del corrispondente (N-1)-Gramma moltiplicato per un coefficiente di riduzione d , ovvero \(d \cdot P(w^n_{n-(N-1)+1})\) . Generalmente si utilizza un coefficiente \(d \approx 0,40\).
Il criterio viene applicato ricorsivamente sino a quando non abbiamo una probabilità non nulla.
Ipotizziamo di avere un modello su Trigrammi e di voler calcolare la probabilità di una frase nella quale occorre \(P(\text{libro}|\text{leggo un})\) con valore in matrice pari a zero: al suo posto calcoleremo \(d \cdot P(\text{libro}|\text{un})\) , e se anche tale valore fosse nullo, si utilizzerà \(d^2 \cdot P(\text{libro})\).
Ovviamente questo approccio prevede di calcolare non solo la matrice delle probabilità degli N-Grammi di ordine N, ma anche quelle di ordine inferiore.
Simile all'approccio precedente, prevede di prendere comunque in considerazione tutte le probabilità degli N-Grammi di ordine inferiore, da ponderare con opportuni coefficienti decrescenti. Avremo quindi \(\displaystyle \hat P(w^n_{n-N+1})=\sum_{i=1}^N \lambda_i P(w^n_{n-N+i}) \) , dove \(\displaystyle \sum_{i=1}^N \lambda_i =1\).
Nel caso del punto precedente avremo che \(\hat P(\text{libro}|\text{leggo un})=\lambda_1 P(\text{libro}|\text{leggo un})+\lambda_2 P(\text{libro}|\text{un})+\lambda_3 P(\text{libro})\)
Una volta costruito il modello sul corpus di training e definiti criteri e correttivi per il calcolo della probabilità di una frase, possiamo ottenere una misura della "bontà" del modello, sia in termini della capacità di generalizzare correttamente, sia in termini di aderenza al contesto linguistico/tematico al quale dovrà essere applicato, valutando le sue performance in termini di capacità di predizione rispetto ad un corpus di test, composto da frasi che il modello non ha utilizzato in fase di training.
La misura generalmente utilizzatà è la Perplessità definita come \(\displaystyle PP(W)=\sqrt[m]{\prod_{i=1}^m \frac{1}{P(W_i)}}\) dove W è il corpus di test suddiviso in m N-Grammi indicati con \(W_i \)
La perplessità varia a partire da un minimo teorico di 1, ad indicare un modello in grado di predirre esattamente il corpus di test, crescendo man mano che si incontrano N-Grammi con probabilità inferiore ad 1.
Valori tipici della perplessità per modelli di linguaggio addestrati su corpus dimensionalmente rilevanti oscillano nell'ordine tra 100 e 1000, con valori inferiori per modelli ad N-Grammi di ordine superiore, in grado di cogliere in modo più articolato relazioni tra parole più distanti.