La storia del Natural Language Processing (NLP) parte negli anni Cinquanta del secolo scorso, ma fino a una decina di anni fa traduzioni automatiche, chatbot e assistenti vocali erano perlopiù fonte di ilarità o frustrazione, mentre ora – superato il magico stupore iniziale – dialogare in linguaggio naturale con una macchina è una comune esperienza quotidiana – che sia Google Translate, Alexa, ChatGPT o il chatbot di un sito, ecc. Come dire: “Finalmente le macchine hanno imparato a parlare la nostra lingua! Ci voleva tanto?”.
Sì, tantissimo: il linguaggio è un fenomeno molto complesso – perché intrinsecamente legato all’umana esperienza del mondo, a livello personale, relazionale, socio-culturale e storico -, un fenomeno che padroneggiamo con naturalezza, ma che abbiamo dovuto anzitutto capire come rendere “comprensibile” alle macchine. Padroneggiare il linguaggio non significa solo conoscere il significato delle parole e le regole sintattico grammaticali di una lingua, significa anche e soprattutto come generare senso mediante questi utensili linguistici. La questione centrale è come rendere “comprensibili” alle macchine i sistemi di produzione di senso in assenza del fatto che le macchine possano basarsi sul contesto esperienziale e relazionale che guida l’umana comprensione delle eccezioni, delle ambiguità, della semantica e della pragmatica della lingua.
Comprensibile è fra virgolette, perché la comprensione del linguaggio da parte della macchina è simulata: usando strumenti matematici siamo riusciti a mettere la macchina nella condizione di ascoltarci e parlarci come se il linguaggio naturale fosse il nostro terreno comune. Non lo è, perché il risultato è originato da processi profondamente diversi fra loro e ha un significato profondamente diverso per l’umano e per la macchina; ma al tempo stesso lo è, perché il livello del dialogo è già oggi strabiliante.
Grazie a interessanti letture sul tema (mi sono stati particolarmente utili Machine Learning Algorithms Simplified di Lino A Tharakan e Introduction to Natural Language Processing with Transformers: Decoding Language with AI edito da Cuantum Technologies) ho cercato di capirne di più su come siamo arrivati ai risultati attuali del NLP e quali sono le prospettive future. Avendo una formazione umanistica, con rammarico mi è precluso l’accesso diretto alla matematica che sta alla base delle rivoluzioni ed evoluzioni del NLP, ma ho fatto del mio meglio per cogliere le logiche generali, che spero possano risultare utili.
Partiamo dal presupposto che gli aspetti che il NLP deve considerare sono molteplici:
- Fonetico e fonologico (rilevante nelle applicazioni speech-to-text e viceversa)
- Morfologico della parola
- Sintattico e grammaticale della frase
- Semantico del contesto parole/frasi
- Pragmatico dell’uso del linguaggio in un determinato ambito.
Agli albori del NLP furono i sistemi basati su regole, cioè il tentativo di insegnare alla macchina una lingua codificandone tutti gli aspetti.
Questo approccio richiede moltissimo lavoro umano, garantisce accuratezza, ma non mette la macchina nelle condizioni di gestire in modo autonomo la complessità del linguaggio, né tanto meno di attingere al livello semantico e pragmatico.
La rivoluzione fu di approcciare i problemi linguistici come problemi matematici.
In questo approccio – seguito dal Machine Learning, dalle Recurrent Neural Networks e dai Transformer Models di cui parleremo in seguito – il Text Preprocessing è cruciale ai fini dell’elaborabilità del testo da parte dei modelli (intesi come rappresentazione matematica di un processo del mondo reale con l’obiettivo di eseguire previsioni, comunque intese, il più possibile accurate).
Nell’ambito del NLP il Text Preprocessing è finalizzato a:
- Eseguire attività di Truncation o Padding (normalmente i modelli si aspettano frasi tutte di lunghezza uguale, predefinita. Le frasi più lunghe possono essere troncate oppure si possono allungare ad arte le frasi più brevi, usando es. il token PAD e istruendo poi il modello a non considerare questo token come una parola valida ai fini dell’elaborazione testuale)
- Pulire il testo da caratteri, simboli e parole non funzionali alla “comprensione” del testo da parte della macchina, es. le Stop Words (codificati per molte lingue) che occorrono spesso senza apportare contributi semantici o pragmatici decisivi
- Eseguire attività di Stemming e Lemmatization (riduzione della parola alla forma radice, es. ridurre running a run, e alla sua forma canonica, es. ridurre better a good)
- Convertire tutto il testo in lettere minuscole
- Tokenizzare, suddividendo il testo in segmenti più piccoli, es. singole lettere, gruppi radicali (che supportano il tentativo della macchina di dedurre il significato di parole non presenti nel suo vocabolario da altre presenti e affini) o parole intere
- Codificare il testo in formato numerico, es. sotto forma di Word Embeddings. Modelli come Word2Vec e Glove codificano le parole come vettori che ne rappresentano le caratteristiche es. morfologiche, sintattiche, semantiche e – nel caso dei Transformer Models – anche la posizione della parola nella frase (Positional Encoding). Nello spazio vettoriale in cui il modello le proietta, parole con caratteristiche simili sono vicine, aiutando la macchina a “comprendere” la relazione fra le parole, e quindi in una certa misura anche a “comprendere” anche concetti e topics.
La rappresentazione vettoriale delle parole è un aspetto importante anche per comprendere il funzionamento delle nuove versioni dei motori di site search per e-shop e knowledge base. Questi motori tendono a integrare la ricerca basata su Large Language Models (LLMs) con quella classica su database: la ricerca basata su LLMs migliora la completezza dei risultati, poiché la macchina restituisce risultati anche per parole simili a quelle cercate dall’utente, parole che afferiscono allo stesso torno concettuale e tematico; la completezza ottenibile mediante la ricerca vettoriale, però, va a discapito della precisione che necessita dell’integrazione della ricerca su database per poter essere recuperata.
Il Machine Learning (ML) è il primo metodo usato per approcciare i problemi linguistici come problemi matematici.
Si tratta di un metodo statistico, probabilistico, che mette la macchina nelle condizioni di ricavare dal testo le regole linguistiche, in particolare morfologiche e sintattico-grammaticali, applicandole poi per prevedere, in una sequenza, la parola successiva più probabile.
Richiede molto lavoro umano, è poco generalizzabile e scalabile, e non permette ancora alla macchina di “comprendere” semantica e pragmatica del linguaggio.
Il ML può essere di tipo supervisionato, non supervisionato e semi-supervisionato.
ML Supervisionato: dato un fenomeno con caratteristiche misurabili note (es. l’ubicazione, la metratura, il numero di stanze di una casa), obiettivo è mettere la macchina nelle condizioni di prevedere, cioè di inferire il valore della variabile target non nota, risolvendo così problemi di classificazione (previsione della categoria di appartenenza di un fenomeno, es. del fatto che una data e-mail sia Spam o Non spam) o di regressione (previsione di un valore numerico, es. del prezzo della casa).
Il ML è detto supervisionato, quando il training della macchina avviene su un dataset in cui la variabile target è valorizzata (labeled data).
L’algoritmo di ML supervisionato permette alla macchina di apprendere dai labeled data la funzione di previsione, che non ci è nota a priori.
Ecco una panoramica sui principali algoritmi di ML supervisionato:
- Regressione lineare (previsione del valore numerico della variabile target)
- Regressione logistica (previsione dell’appartenenza del fenomeno a una delle 2 classi date)
- Albero decisionale (costruito in fase di training sulla base delle caratteristiche dei labeled data, è utilizzato per previsioni es. negli ambiti medicale, di fraud detection, manutenzione predittiva, raccomandazione di prodotti)
- Random Forest (combina alberi decisionali e randomizzazione. Più alberi decisionali sono allenati su subset randomici di dati e caratteristiche. In fase applicativa, ogni albero analizza tutti i dati, ma solo le caratteristiche su cui si è allenato. La previsione finale avviene a maggioranza, considerando le previsioni di tutti gli alberi della foresta)
- Naive Bayes (si basa sul teorema di Bayes. Il training si basa sulla probabilità di una data classe in un dato dataset, es. 30% classe Spam, 70% classe Non spam, nonché sulla probabilità condizionale di osservare in una data classe un dato valore in una data caratteristica, es. il valore “acquista” nella classe “Spam”)
- Support Vector Machine (SVM) (dato un insieme di fenomeni rappresentato ognuno da un vettore di caratteristiche/valori, mira a individuare la linea di confine fra due o più classi che massimizza la distanza fra il bordo e il vettore più vicino con l’obiettivo di rendere la previsione più accurata)
- K-Nearest Neighbors (KNN) (in fase di training memorizza i dati e li rappresenta in un feature space in cui fenomeni con caratteristiche/valori simili sono vicini. In fase applicativa i nuovi fenomeni sono proiettati nel feature space e si collocano vicino ai vicini più prossimi per caratteristiche/valori).
ML Non supervisionato: il ML è detto non supervisionato, quando il dataset di training non contiene labeled data.
Obiettivo del training è mettere la macchina nelle condizioni di scoprire:
- Cluster e associazioni (ecco alcuni algoritmi di ML non supervisionato finalizzati alla scoperta di regolarità e relazioni: K-Means Clustering: scelti K datapoint iniziali – in modo randomico o in base alla loro lontananza per caratteristiche – il modello classifica iterativamente i dati raggruppandoli per similarità intorno ai centri, la cui posizione è aggiornata in base alla media della posizione dei datapoint via via assegnati ai K centri; Clustering gerarchico: il più usato è quello agglomerativo in cui il modello parte da 1 cluster per ogni datapoint e iterativamente esegue il merge delle coppie più simili per caratteristiche al fine di formare insiemi più ampi e omogenei; DBSCAN: usato per eseguire il clustering di dati con riferimenti spaziali, es. la propagazione di una malattia in un territorio; Gaussian Mixture Model; Sprectral Clustering)
- Possibilità di eseguire Dimensionality Reduction (ridurre il numero delle caratteristiche del dataset, salvaguardando quanto più le informazioni originali, ma diminuendo la complessità di computazione, il rischio di overfitting – cioè di eccessiva aderenza del modello allenato ai dati di training – e di diffcoltà di visualizzazione e interpretazione. Metodo usato es. nel NLP, nell’image processing, nella genomica)
- Anomalie.
ML Semi-supervisionato. Il ML semi-supervisionato può seguire vari gli approcci:
- Self-training (il primo training avviene sul set limitato di labeled data disponibili. Quanto appreso è usato per prevedere i valori non noti della variabile target dei dati non labeled. Le previsioni più probabili sono incluse nel set di labeled data su cui avviene il secondo training e così via, iterando i cicli con l’obiettivo di aumentare il volume dei labeled data e di rendere più attendibile la previsione)
- Co-training (N modelli sono allenati su subset distinti di labeled data, le loro previsioni sui valori della variabile target dei dati non labeled sono messe a confronto, iterando i cicli fino a far convergere gli N modelli)
- Multiple-view (il training avviene su caratteristiche distinte del fenomeno, es. forma, colore, texture del pixel di un’immagine. In fase applicativa le informazioni provenienti da ogni “punto di vista” sono combinate per rendere più attendibile la previsione)
- Graph-based learning (in training serve per costruire il grafo che rappresenta le caratteristiche dei labeled data. In fase applicativa il grafo è usato per prevedere i valori della variabile target dei dati non labeled).
L’evoluzione del ML verso il Deep Learning porta a una rivoluzione nel NLP, poiché mette la macchina nelle condizioni di “comprendere” in modo sempre più ricco semantica e pragmatica del linguaggio, facendoci esclamare: “Finalmente le macchine hanno imparato a parlare la nostra lingua!”.
Deep Learning (quello non supervisionato nel caso del NLP) è basato sull’uso di reti neurali.
Le Neural Networks (NN) sono rilevanti nel NLP per la qualità della capacità di scoprire cluster e associazioni.
Nelle NNs il neurone è una funzione matematica che prende in carico un input, lo elabora e produce un output.
Ogni rete neurale è formata da:
- 1 Input Layer (contiene 1 neurone per ogni caratteristica del fenomeno. es. 1 per ogni pixel di immagini di dimensioni fisse. Questi neuroni normalizzano i dati in ingresso e soprattutto decidono quali informazioni veicolare al primo degli hidden layer)
- N Hidden Layer (numero di hidden layer, numero di neuroni e valori di pesi e bias influenzano il livello di complessità gestibile da una data rete neurale. Ogni neurone di un dato hidden layer elabora tutti i dati dell’input layer in base a pesi e bias elaborati in fase di training con l’obiettivo di massimizzare l’attendibilità della previsione. Al termine dell’elaborazione, il neurone passa il suo output al neurone dello hidden layer successivo, come valore di input, ecc.)
- 1 Output Layer (contiene 1 neurone per ogni valore della variabile target da prevedere, es. 10 neuroni se è vogliamo classificare immagini che contengono cifre da 0 a 9).
Nell’ambito del NLP le reti neurali sono presenti in vari stadi evolutivi.
Primo stadio evolutivo. In questo stadio rientrano es. i seguenti tipo di reti neurali:
- Recurrent Neural Network (RNN) (processano il testo in modo sequenziale, parola per parola, memorizzando il contesto di quanto già processato, che guida la “comprensione” semantica della parola successiva e la “comprensione” delle relazioni fra le parole. Il meccanismo di memorizzazione delle RNN presenta limiti nel caso di testi lunghi)
- Long Short-Term Memory Networks (LSTMs) (tipo di RNN che, grazie a un meccanismo di gating che guida la decisione di quali informazioni memorizzare e di quali scartare, “comprende” meglio le relazioni fra parole tra loro distanti)
- Gated Recurrent Network (GRUs) (tipo di RNN simile alle LSTMs nell’applicazione del meccanismo di gating, ma più semplice e meno avido di risorse computazionali)
- Convolutional Neural Network (CNN) (apprendono dai dati le gerarchie spaziali delle caratteristiche. Usate soprattutto nell’image processing, nel NLP hanno il limite di non “comprendere” il cambio di significato di una frase in base all’ordine delle parole).
Il secondo stadio evolutivo è dominato dai Transformer Models (TMs).
Sono diversi dalle RNN, poiché non processano il testo in modo sequenziale. Grazie all’applicazione del caratteristico meccanismo dell’auto-attenzione, i TMs processano simultaneamente elementi multipli dell’input (es. parole di una frase); in base ai cosiddetti Attention Scores pesano la rilevanza degli elementi; accendono l’attenzione sugli elementi rilevanti; “comprendono” le relazioni fra elementi anche tra loro distanti, migliorando quindi la “comprensione” semantica e pragmatica del testo.
Il meccanismo dell’auto-attenzione può essere semplice oppure Multi-Head. Il meccanismo multi-head guida il modello a prestare tipi diversi di auto-attenzione a elementi diversi, es. un’attenzione può essere specializzata in named entities, un’altra in sintassi, un’altra in semantica. La combinazione degli output delle diverse teste aiuta il modello a “comprendere” il fenomeno linguiastico in modo più ampio e profondo. Il meccanismo dell’auto-attenzione ha contribuito in maniera determinante ai progressi nell’ambito della Machine Translation, della Speech Recognition, della Text Summarization e del Question Answering, ecc.).
Dal punto di vista strutturale ogni modello di Transformer è costituito da un Encoder e da un Decoder. L’encoder è uno stack di layer fra loro uguali, costituiti ognuno da 2 sotto-layer: un meccanismo di attenzione multi-teste e una rete neurale a flusso in avanti. Il decoder è uno stack di layer fra loro uguali, costituiti ognuno da 3 sotto-layer: i primi due sono uguali a quelli dell’encoder, mentre il terzo è ancora un meccanismo di attenzione multi-teste che il modello applica all’output (es. alla traduzione) per migliorarne la qualità
Fra i modelli di Transformer spiccano:
- BERT (funzionamento bidirezionale e pre-allenamento sono caratteristiche importanti di questo modello il cui punto di forza è la “comprensione” della relazione anche tra frasi, specializzandolo in compiti di Encoding)
- GPT (specializzato in compiti di Generazione del linguaggio naturale)
- Transformer-XL (capace di gestire sequenze di testo più lunghe, a vantaggio della coerenza interna dell’output, es. della traduzione)
- T5 (modello particolarmente versatile, poiché approccia ogni problema NLP come un problema di text-to-text transformation).
Le linee evolutive future vanno in particolare in direzione dell’apprendimento multimodale da sorgenti multiple, non solo testi, ma anche immagini, audio.
Vision Transformer (ViT) è un modello che applica i Transformer Model all’image processing, anziché le CNN, aiutando la macchina a raggiungere una “comprensione” più ampia e profonda del fenomeno.
CLIP è un Transformer Model multimodale capace es. di cercare immagini da testo senza supervisione.