Seguici su Telegram, ne vale la pena ❤️ ➡ @trovalost

Che cos’è ChatGPT, spiegato in Prolog

C’era una volta uno studente di ingegneria informatica (come si chiamava una volta), orientamento sistemi computazionali (che oggi neanche esiste più, ma che riguardava in breve materie specialistiche che usavano la matematica e l’informatica per risolvere problemi del mondo reale); quello studente  era in quel periodo immerso nello studio delle basi di dati. Un modo italianizzato (e a mio modo di vedere poco user friendly) per riferire che stavi occupandoti di database, cosa che stavo effettuando con un PC portatile la cui batteria mi costringeva, di fatto, a portarmi appresso il caricatore e collegare alla buona dove capitava (inclusi gli scalini del dipartimento dove spesso ci si trovava con altri colleghi e colleghe dell’epoca).

Nei primi duemila, quantomeno, non funzionava diversamente da così, e tantissime cose che usiamo oggi erano miraggi: i database geografici, ad esempio, sui quali avevo seguito un seminario interessante (e che ancora nessuno usava visto che non c’erano vere e proprie implementazioni), oppure le prime applicazioni di machine learning, all’epoca confinate all’ambito accademico, fino all’esplosione che solo oggi conosciamo. Ma era SQL la vera belva da dover affrontare, ed ogni studente viveva nell’incubo di non riuscire a comprendere la query che si sarebbe presentata nell’esame scritto, che era autenticamente libera e poteva includere anche cose che non avevamo trattato (cosa che accade spesso nell’informatica, come nella vita).

Oggi, con l’avvento di ChatGPT, sembra che quel mondo sia quasi superato, ma in realtà potremmo scoprire che è più vivo che mai. ChatGPT sembra aver risolto più problemi di quanto non ne abbia creato, rendendo quasi obsoleta l’idea che servano dei tecnici quando, alla prova dei fatti, ChatGPT può anche programmare o quantomeno supportare un lavoro supervisionato. Il problema principale delle tecnologie LLM (a cui appartiene ChatGPT) mi pare essere che hanno la tendenza a far sembrare le cose fin troppo semplici, al punto di pensare che si tratti di veri e propri esseri pensanti, se non senzienti. Prima di porci il problema etico sarebbe il caso di capire come nascono queste tecnologie LLM, e solo allora potremo porre il discorso nei giusti termini.

Che cos’è il Prolog

Un giorno dei primi duemila, durante lo studio di SQL, mi cade l’occhio sulla parola Prolog (Programming In Logic), e dalle latitanti connessioni internet d’epoca scopro essere un linguaggio dichiarativo “tipo” SQL basato sulla logica del primo ordine, nato nel 1972 ad opera degli informatici Alain Colmerauer e Robert Kowalski. Prolog costituiva un singolare linguaggio dichiarativo con il quale potevi programmare usando dei “fatti”, e non dei comandi come avveniva nei linguaggi classici. Non era molto utilizzato, a quanto leggevo, ma era stranamente affascinante per i miei gusti. Più che altro non riuscivo a capire a cosa potesse servire, tanto più che non sono mai stato uno di quelli che considerano la teoria un mero orpello rispetto alla pratica. Cosa ancora più interessante, sembrava che alcuni DBMS (DataBase Management System) supportassero il Prolog per eseguire query complesse in termini logici, sfruttando la potenza della logica del primo ordine (che avevo studiato a Linguaggi e traduttori qualche anno prima, in modo entusiastico), e mi sembra grandioso poter scrivere una query utilizzando “quasi” il linguaggio naturale, o comunque formulandolo in termini funzionali.

Di suo, Prolog è un linguaggio di programmazione dichiarativo basato sulla logica: è spesso utilizzato per la programmazione di intelligenza artificiale, l’elaborazione del linguaggio naturale e la risoluzione di problemi di vario genere, usando un approccio dichiarativo. Prolog tratta principalmente con dati strutturati sotto forma di fatti e regole, utilizzando l’inferenza logica per estrarre informazioni dai dati. Pur non essendo un linguaggio di query standard per l’interazione con basi di dati relazionali, permette all’informatico di inferire fatti, ovvero ciò che oggi i prodotti LLM come ChatGPT consentono come se fosse un dato acquisito. Quel dato acquisito nasceva quasi vent’anni prima, per cui di fatto, capire Prolog può essere un modo interessante per comprendere come funziona ChatGPT e da quali presupposti parte, se non altro più correttamente.

La realtà dei fatti

Anche la definizione di “fatto” in Prolog mi sembrava affascinante, quanto a suo modo manipolabile e fin troppo soggettivo. Nulla di complicato: semplicemente se dovevi definire una cosa, basta usare una funzione per chiamare la “cosa” e un parametro per istanziarla. Due fatti ad esempio sono quando scrivi:

gatto("Tom")
informatico("Salvatore")

ovvero stiamo assumendo che Tom sia un gatto, oppure che Salvatore sia un informatico. La realtà dei fatti, per intenderci, resta tutta da stabilire: nulla vieta che uno possa definire fatti che non sono reali, ad esempio.

gatto("Salvatore")
informatico("Tom")

i quali varrebbero esattamente quanto i fatti precedenti, per quanto siano palesemente falsi. Le cose diventano interessanti nel prossimo passaggio: io posso letteralmente interrogare un sistema istruito con dei fatti in Prologo, ed ottenere risposte sì / no. Ad esempio, assumendo di aver insegnato ad un computer la prima alternativa:

gatto("Tom")
informatico("Salvatore")

potrò formulare delle query come:

? gatto("Tom")
? informatico("Salvatore")

oppure, in alternativa, in forma discorsiva:

Chi è Tom?
Chi è Salvatore?

ed otterrò le risposte che mi aspetterei, del tipo: Sì (Tom è un gatto), Sì (Salvatore è un informatico), e poi “Tom è un gatto”, “Salvatore è un informatico”. Il linguaggio Prolog permette, a questo punto, di combinare tra loro i fatti, a formare un vero e proprio “discorso”, per esempio mediante la regola di generalizzazione “Tutti i gatti sono animali” (il simbolo :- è una specie di “uguale”, in questo contesto). Il fatto che Tutti i gatti sono animali si scriverà pertanto:

animale(X) :- gatto(X).

E se un domani qualcuno manderà una query del tipo “che cos’è un gatto?“, il sistema potrà dare per buono quest’ultimo fatto e rispondere (correttamente, in questo caso) “Il gatto è un animale“. Al netto dell’esempio, è importante tenere conto che tutto quello che sappiamo da un sistema di inferenza automatico come Prolog non riguarda null’altro se non il collegamento tra fatti precedenti, in cui siamo costretti ad assumere (in buona fede) che 1) tutti i fatti siano credibili o reali, 2) che si possano collegare tra di loro in ogni possibile combinazione. Un altro passo aiuterà a capire ancora meglio di cosa parliamo, e arrivare alle conclusioni.

L’esecuzione di un programma Prolog consiste generalmente nella risoluzione di goal, ovvero di sequenze di fatti che vengono sviluppate come fossero espressioni matematiche (semplifico un po’, per non perdere il filo del discorso e non perdere di vista la spiegazione di ChatGPT).

Ecco il nostro primo programma in Prolog, finalmente! Se ad esempio una macchina venisse addestrata con questi fatti:

madre_figlio(rita, paola).
padre_figlio(ernesto, paola).
padre_figlio(ernesto, enrico).
padre_figlio(michele, ernesto)
gemello(X, Y)  :- genitore(Z, X), genitore(Z, Y).
genitore(X, Y) :- padre_figlio(X, Y).
genitore(X, Y) :- madre_figlio(X, Y).

si tratterebbe di una relazione familiare, alla fine, utile a capire chi è figlio di chi, chi è sposato con chi e tutto quello che posso inferire da un contesto familiare. Possiamo fare la query, ad esempio:

gemello(paola, enrico)

ed ottenere la risposta:

Sì, sono gemelli.

Quella risposta è frutto di un processo di inferenza che esplora i vari fatti collegandoli tra loro, e simulando il processo di costruzione della conoscenza (e la stessa espressione del nostro linguaggio) che ci caratterizza da anni. La risoluzione delle clausole segue precise regole combinatorie che operano essenzialmente per sostituzioni successive, e che non si possono mai distaccare dall’universo chiuso dei fatti che abbiamo premesso nel programma. L’intuito suggerisce che posso formulare anche query anche più fantasiose, eventualmente usando funzioni ricorsive, purchè faccia uso di fatti che siano riconducibili al programma originario.

Gli LLM sono reti neurali addestrate su “fatti”. E i fatti sono sostanzialmente arbitrari!

Gran parte di ChatGPT e degli LLM si basa su assunzioni che derivano da queste prime analisi del linguaggio Prolog, ovvero dalla possibilità di inferire nuova conoscenza sulla base di “fatti” noti. Si noti come questo processo non sia diverso dall’apprendimento di ogni essere umano, in media, perché naturalmente la qualità dei fatti condiziona pesantemente le inferenze che farai. Un esempio banale in merito è una persona che si documenta su internet su alcuni argomenti, il quale non potrà mai offrire le stesse inferenze che sono offerte a chi ha studiato per anni, ha fatto tirocini, ha approfondito sui libri e nella realtà delle cose. Naturalmente LLM è un simulatore di linguaggio naturale, e sappiamo bene che nel mondo reale non tutto può essere ricondotto alla logica del primo ordine: motivo per cui bisogna necessariamente estendere la tecnologia, cosa che è stata effettivamente fatta.

In effetti è questo il motivo per cui sono sempre stato dell’idea che si debba prima conoscere il fondamento di una tecnologia e poi azzardarne una qualsiasi regolamentazione o comitato etico/morale; si dovrebbe passare per la conoscenza dei fatti, e solo in seguito (aggiungerei: con un briciolo di umiltà in più) un legislatore o chi per lui dovrebbe proporre una soluzione. Vale anche per le lamentele ricorrenti sulla violazione dei diritti d’autore, alla fine. Se partiamo dal presupposto che gli LLM come ChatGPT siano “semplicemente” reti di apprendimento addestrate su fatti arbitrari, diventa forse più chiaro che il problema è rendere pubblico, o al limite obbligare a rendere pubblici, le basi di conoscenza su cui si fondano. La cosa che rende inquietante ChatGPT, a ben vedere, non sta tanto nel suo saper argomentare in linguaggio naturale, ma risiede più che altro nel fatto che non sappiamo “dove ha imparato” le cose che sa, dato che OpenAI è sempre stata, almeno da quello che ne so, un po’ elusiva a questa domanda.

È effettivamente possibile utilizzare LLM per generare o completare regole e regolamenti basati sulla logica in un contesto specifico (ad esempio quando chiediamo a ChatGPT di giocare a qualche giochino). Prolog è un linguaggio di programmazione dichiarativo basato sulla logica. Viene utilizzato per esprimere regole logiche e relazioni tra fatti. Gli LLM sono invece modelli di linguaggio generativo che apprendono da enormi quantità di testi e sono utilizzati principalmente per generare testo naturale in modo coerente e contestualmente appropriato, sfruttando delle reti neurali e non semplici asserzioni di logica.

Di fatto le inferenze logiche di cui sopra sono una parte sostanziale degli LLM, anche se non costituiscono certamente un tutto ne possono essere almeno una parte. Prolog rimane pensato per risolvere problemi basati sulla logica e sull’inferenza, spesso in campi come l’intelligenza artificiale e la rappresentazione della conoscenza, mentre gli LLM sono utilizzati per generare testo, completare frasi, rispondere a domande, tradurre lingue e svolgere una vasta gamma di attività basate sul linguaggio naturale. Prolog, infine, è orientato ai dati strutturati e utilizza fatti, regole e variabili, mentre gli LLM trattano principalmente dati di testo naturale e non sono necessariamente orientati ai dati strutturati. I due problemi sembrano diversi ma sono, mediante varie assunzioni e scoperte fatte negli ultimi anni, riconducibili gli uni agli altri, sfruttando strumenti molto evoluti del machine learning e rendendo l’IA ciò che conosciamo oggi.

Conclusioni

Quando usiamo ChatGPT, in definitiva, credo che sia importante tenere conto del fatto che è stata addestrata su un corpus di fatti, e che i fatti su cui è stata addestrata non sono noti a priori, e nessuno li ha mai verificati. Sarebbe un lavoro titanico verificarli, anche se si volesse, per cui dobbiamo accontentarci e farci bastare il fatto che siano generatori di linguaggi: chi genera può anche essere accattivante come forma, ma non è affatto detto che abbia ragione. Quindi è come fidarsi di un discorso che viene pronunciato letteralmente dall’uomo della strada, il quale potrà anche avere delle “illuminazioni”, che potranno essere guidati da una logica interna anche coerente, ma sui quali non possiamo dire nulla dal punto di vista semantico, perché è sempre necessaria la supervisione di un essere umano.

Quello studente di allora (coi capelli un po’ più lunghi, peraltro), se solo potesse viaggiare nel tempo, proverebbe ad avvisare tutti nel 2023  :-)

👇 Da non perdere 👇



Questo sito esiste da 4470 giorni (12 anni), e contiene ad oggi 7599 articoli (circa 6.079.200 parole in tutto) e 15 servizi online gratuiti. – Leggi un altro articolo a caso
Non ha ancora votato nessuno.

Ti sembra utile o interessante? Vota e fammelo sapere.

Questo sito contribuisce alla audience di sè stesso.
Il nostro network informativo: Lipercubo.it - Pagare.online - Trovalost.it.