Il progetto che propongo è nell’ambito del Natural Language Processing, e in particolare su come meglio controllare l’output di Large Language Models.
I Language Model moderni si basano sul Transformer, un’architettura di successo basata sulle Reti neurali profonde. Questi funzionano estremamente bene, infatti hanno ridefinito lo stato dell’arte per la maggior parte dei task di NLP. In particolar modo, hanno dimostrato di funzionare molto bene anche nella risoluzione task di generazione di testo piuttosto complessi come la semplificazione delle frasi, la summarization, il question answering etc.
Nonostante questo, i Transformers presentano ancora diversi problemi, come ad esempio il fatto che, essendo delle black box, non sono interpretabili e che talvolta generano quelle che sono state chiamate allucinazioni.
Le allucinazioni sono definite come la generazione di testi senza senso o semplicemente scorretti, ma presentati come informazioni corrette.
Inoltre, date le abilità linguistiche del modello, queste informazioni sono presentate in maniera fluente e sintatticamente corretta, non dando alcun indizio ad un utente che il testo generato è scorretto.
Questi problemi sono alcuni di quelli che limitano l’adozione di questi modelli in settori ad alto rischio, come ad esempio in campo biomedico o finanziario.
Il problema principale è che non possiamo né garantire che il contenuto semantico e la forma sintattica siano corretti, ne possiamo automaticamente identificare gli output errati una volta che sono stati generati dal modello.
Nel mio percorso di dottorato vorrei quindi focalizzarmi su questi aspetti, in particolare sul come controllare e verificare gli output di questi modelli.
Dal punto di vista della sintassi, vorrei usare tecniche di Controlled Text Generation per garantire che gli output del modello aderiscono a dei vincoli sintattici, come ad esempio garantire che un modello di Text Simplification generi davvero dei testi semplificati, mentre dal punto di vista semantico vorrei lavorare sulla prevenzione e identificazione delle allucinazioni.
In particolare, per quanto riguarda la parte sintattica l’approccio che vorrei provare è quello di utilizzare Direct Preference Optimization, per migliorare modelli di semplificazione automatica.
DPO è una tecnica di Reinforcement Learning con Human Preference che viene usato, ad esempio, per allineare gli output dei modelli a degli standard morali o etici.
Funziona utilizzando un dataset di preferenze, dove per ogni input e sono possibili output, uno dei quali è annotato come l’output preferito tra i due. Poi, invece di dover addestrare un reward model esplicitamente, il modello viene addestrato usando una loss function che lavora direttamente sulla policy, comparando la probabilità secondo la attuale policy di generare la risposta preferita rispetto all’altra.
Nel caso della Text Simplification è possibile costruire un preference dataset automaticamente:
- Si scelgono delle frasi da semplificare;
- Per ognuna si generano due possibili semplificazioni usando un modello fine-tunato usando tecniche come il temperature sampling o usando diversi pattern di prompting;
- Si classifica quale sia la più semplice utilizzando degli score di complessità linguistica come Read-IT per l’italiano o CTAP per l’inglese.
Una volta addestrato è possibile valutare se DPO migliora lo score di complessità linguistica medio su un test set, e, ovviamente, è poi possibile ottenere delle valutazione umane, per validare se il processo ha un effettivo riscontro sulla difficoltà percepita.
Questa pipeline può poi essere espansa in ottica di creare dei text simplification model pensati per un tipo di utente specifico, come, ad esempio, modelli di semplificazione diversi in base al livello di scolarizzazione.
Per quanto riguarda invece la parte semantica, identificare automaticamente le allucinazioni è un problema complesso, con poche risorse disponibili in letteratura. Un approccio popolare è quello di creare dei classificatori di allucinazioni, addestrati su dataset creati a partire dagli output di alcuni modelli che vengono manualmente taggati. il grosso problema di questo tipo di approcci è che, i modelli risultanti da questo addestramento funzionano molto bene nel riconoscere le allucinazioni dei modelli con i quali è stato costruito il dataset, e funzionano male su tutti gli altri.
Questo dimostra che le allucinazioni sono profondamente dipendenti dal modello e creare un classificatore universale al momento non sembra essere possibile.
Un approccio model-free invece è stato proposto nella creazione di un dataset contenente problemi matematici irrisolvibili. Quando al modello è presentato un problema irrisolvibile, ci si aspetta che se un problema matematico non è risolvibile, il modello lo faccia notare. Sfruttando questa ipotesi, è possibile parsare l’output del modello per verificare se il modello sta provando, erroneamente, a rispondere. Questo permette di calcolare una stima sulla probabilità che ha il modello di allucinare nello specifico dominio.
Nel mio progetto, vorrei provare a estendere questo concetto al di fuori del dominio matematico, creando un dataset di question answering con domande che, per mancanza di informazioni o contesto, non hanno risposta. Parsando poi le risposte, e usando metriche di distanza o la presenza o la assenza di entità nominate, è possibile verificare se il modello sta effettivamente provando a rispondere, e quindi allucinando.
Inoltre, in alcuni task come la summarization o la text simplification, dato che il modello deve fare una ri-elaborazione dell’input, è possibile provare una tecnica basata sui grafi. Costruendo un Knowledge Graph del prompt e dell’output, e confrontandoli, è forse possibile trovare dei pattern dove la presenza o l’assenza di certe entità o di loro relazioni riveli che la risposta generata è un’allucinazione. In questo modo avremmo un approccio model-free in grado di individuare allucinazioni automaticamente.