Capire ChatGPT

Mentre i giornali e gli pseudointellettuali cercano di discutere di ChatGPT come se fosse una AI “generica”, cioe’ quasi una persona al completo, ho deciso di seguire un approccio “illuminista” e fare quello che i ciarlatani odiano: qualcuno che spieghi alle persone come funziona una cosa, allo scopo di dissipare la nebbia , che di solito e’ la condizione in cui proliferano i ciarlatani, cioe’ gli umanisti.

Mi assumo il compito improbo di spiegare in maniera abbastanza “comprensibile”, a spese della precisione , come funziona ChatGPT, e su quale “matematica” si basa. Questo serve anche a capire la stupidita’ con la quale lo si accusa di essere un “pappagallo stocastico”, e vorrei che si capisse anche cosa intendo quando dico, insieme ad altri esperti, “e’ un modello linguistico”.

Cerchero’ quindi di spiegare come funzioni un “Transformer”, e poi faremo un esperimento usando la versione gratuita, che implementa la versione 3.5 , in modo da cercare di rispondere, con un “esperimento”, alla domanda “ma ChatGPT capisce quello che gli si dice?”.


Partiamo dai transformer, un concetto (o se vogliamo “un algoritmo”) inventato da Google diversi anni fa.

Si tratta di prendere una quantita’ enorme di testo, e di trasformarlo in una matrice, cioe’ in una tabella. 

In sintesi, un Transformer è costituito da due parti principali: l’encoder e il decoder.

L’encoder prende in input una sequenza di parole e la “codifica” in un formato vettoriale (rappresentazione numerica) utilizzando più strati di attenzione. L’attenzione è una tecnica che permette alla rete di focalizzarsi sulle parti importanti dell’input per elaborare le informazioni. L’encoder produce una rappresentazione numerica delle parole che tiene conto del contesto in cui si trovano all’interno della frase.

Il decoder, a sua volta, prende in input questa rappresentazione numerica e la utilizza per generare una nuova sequenza di parole (ad esempio, una traduzione in un’altra lingua). Anche il decoder utilizza più strati di attenzione per capire quali parti della rappresentazione numerica sono più importanti per la generazione della nuova sequenza di parole.

In pratica, un Transformer viene addestrato su grandi quantità di dati di input e output, in modo che possa imparare ad associare le rappresentazioni numeriche dell’input con quelle dell’output. Una volta addestrato, può essere utilizzato per generare nuove sequenze di output a partire da nuovi input.

Facciamo un esempio concreto: la parola “Cane”.

Assumiamo che vogliamo rappresentare il significato semantico della parola “cane” attraverso un vettore numerico denso.

Una delle tecniche più comuni per costruire un embedding semantico è l’addestramento di un modello di Word2Vec su un grande corpus di testo. In questo modello, ogni parola viene rappresentata come un vettore numerico denso di una certa dimensione, in modo che le parole simili semanticamente abbiano vettori simili.

https://it.wikipedia.org/wiki/Word2vec

Ad esempio, potremmo addestrare un modello Word2Vec su un corpus di testo costituito da recensioni di prodotti per animali domestici. Durante l’addestramento, il modello analizza il contesto in cui ogni parola appare e cerca di trovare vettori che catturino le relazioni semantiche tra le parole.

Il modello potrebbe addestrare un vettore numerico denso per la parola “cane” che ha valori elevati per dimensioni semanticamente rilevanti, come “animale”, “domestico”, “fido”, “leale”, “amico” e così via. In questo modo, il vettore rappresenta il significato semantico della parola “cane” in modo compatto e semplificato.

Ad esempio, se consideriamo le parole “cane” e “gatto”, il modello di Word2Vec potrebbe addestrare due vettori simili per queste parole, poiché entrambe sono animali domestici e condividono alcune caratteristiche, ma con alcune dimensioni che distinguono i due animali, come “miagolare” e “grattarsi” per il gatto e “abbaiare” e “scodinzolare” per il cane.

In questo modo, l’embedding numerico rappresenta il significato semantico della parola “cane” in modo compatto e può essere utilizzato come input per un modello di Transformer per compiere attività di NLP, come l’analisi del sentimento, la traduzione automatica, la generazione di testo e così via.

Immagino che non ci abbiate capito un cazzo. Cosi’ , proviamo a descrivere una casella del nostro modello, se rappresentiamo il modello con una tabella. La descrizione che riesce meglio e’ questa:

Ogni casella di questo grafo contiene una parola centrale e una lista di concetti associati. E ogni casella ha relazioni di diversi tipi (sinonimo, contrario, analogo, simile, piu’ volgare, piu’ raffinato, piu’ sofisticato,  etc) con altre caselle.

Questo processo si chiama “embedding” dell’ input. La dimensione delle parole e’ causata da quello che si definisce “attenzione”.

 


Nel caso “semplice”, quello della traduzione, succede che il testo da tradurre viene trasformato nel suo “embedding”, e poi mandato ad un trasformer che ha imparato la lingua di destinazione, cercando SIA le caselle corrispondenti (si presume che i cani abbaino anche in Germania, eccetera) sia le “relazioni” tra caselle (sinonimo, contrario, etc etc).

Sono quindi tre fasi: input, embedding, output. In pseudocodice potremmo dire questo:


funzione encoder(input):
  embedding = generare_embedding(input)
  output = embedding
  per ogni strato nella lista degli strati:
      output, _ = lista_di_cose_importanti(output)
      output = mappa_sull_embedding_di_destinazione(output)
    ritorna output

Spendo sue parole su “cose_impoirtanti” (o self_attention): sapete bene che “cane morde uomo” e’ meno “notizia” di “uomo morde cane”. In termini di teoria dell’informazione, questo succede perche’ uno dei due simboli e’ piu’ raro dell’altro. Quando si parla di “attention” ci si riferisce all’idea di trovare le parti piu’ significative di un testo e partire da quelle.

In definitiva, quindi, se volete tradurre qualcosa dall’italiano all’inglese ChatGPT si costruira’ un embedding del vostro testo, lo confrontera’ con l’embedding della lingua che ha imparato (l’embedding di una quantita’ sovrumana di testo) e alla fine eseguira’ lo stesso embedding “mappando”  le cose importanti nel grafo della lingua di destinazione.


Adesso arriviamo alla Vexata Quaestio:

ChatGPT “capisce” quel che legge?

Per poterlo giudicare ho prezo un pezzo di testo del quale IO sono l’autore (la persona migliore per giudicare se ha capito, insomma), e gli faccio una richiesta “strana”:

Questo e’ il testo che gli ho proposto:

A quel punto gli ho chiesto di fare una cosa bizzarra: 

Come vedete, apparentemente ha dato una risposta che non c’entra una fava. Ha ignorato robot, genetica, cromosomi, la persona che parla, il contesto, e ci ha messo quello che ha capito di quel pezzo. Interessante. 

Ho chiesto insomma di rappresentare solo l’embedding (quello che ci ha capito) senza la parte linguistica.

Come autore, dovrei dire che non ci ha capito un cazzo. 

Ma non direi la verita’. Non tutta. Perche’ quello che io stavo rappresentando era una persona che fa un lavoro estremamente difficile, duro, al punto di necessitare di capacita’ sovrumane, quasi superpoteri, e di una trasformazione radicale, al solo scopo di sopravvivere.

Il pippone motivazionale , quindi, ci sta: iho chiesto IO di ignorare il contesto e la parte linquistica. Non potevo aspettarmi di ritrovare il contesto (il protagonista che cammina sotto la pioggia in una zona malfamata) o le parole. A quanto pare, si direbbe che abbia capito un blob astratto di sfide future, evoluzione, ha estratto dei legami dalla storia dei colleghi, e poi lo ha applicato ottenendo il pippone motivazionale. 

Sono IO che gli ho chiesto di ignorare il testo precedente, e quindi non potevo aspettarmi consistenza testuale. 

Ma in termini di astrazione, ha percepito una persona che vive in un mondo futuro molto evoluto, e che si e’ evoluta per sopravvivere, che ha colleghi che invece muoiono tutti i giorni, che pero’ e’ un lavoro che va fatto, etc etc etc.

Non riesco ad escludere che abbia “capito”: nel senso che normalmente i chatbot cercano di individuare alcuni parametri, tipo “sentiment” , “intent”, e “context”. E se isolo queste due cose e le astraggo molto, la risposta potrebbe essere il pippone motivazionale che ho ottenuto.

Ho ripetuto il test con altri miei scritti, e devo dire che se la “traduzione” non c’entrava un cazzo col testo iniziale (ma io ho chiesto di ignorare completamente le parole in input) , in termini di astrazione non riesco ad escludere di stare guardando una rappresentazione molto sofisticata del “sentiment” e dell ‘ “intent”.(1)

Si tratta di esperimenti di tipo “metafisico”, nel senso che dovete chiedervi:

  1. Cosa ho scritto? (una breve introduzione del personaggio)
  2. Cosa VOLEVO scrivere? (volevo descrivere lo “struggle”, la lotta, la sfida esistenziale di questo personaggio)
  3. Quanto posso togliere da questo testo, prima che smetta di essere cio’ che e’?

Sembra che se anche io tolgo l’attinenza col testo, la risposta alla seconda domanda in qualche modo “rimane”. 

Quindi, la domanda “ma quanto capisce ChatGPT del testo” dal mio punto di vista ha DUE possibili risposte:

  1. Non ci capisce un cazzo di niente.
  2. Capisce molto piu’ di quanto normalmente gli altri lettori capiscono.

Potete ovviamente provare anche voi a fargli leggere cose che voi avete scritto, in modo che, sapendo cosa volevate scrivere, sarete la persona migliore per giudicare.

All’inizio vi chiederete “e che ci azzecca?”, ma poi ci penserete bene, e vi verra’ il dubbio.


Su tutto questo aleggia un problema di definizione dell’intelligenza artificiale.

Essa potrebbe essere descritta come la scienza di costruire macchine capaci di imitare il comportamento umano in campi che noi definiamo “intelligenza naturale”.

 

Questa visione e’ , a mio avviso, estremamente meccanicista. Diciamo “ehi, qui c’e’ il linguaggio, nella sua bella scatolina, e qui c’e’ la visione. Sono due scatole diverse”.

Secondo questa teoria, prima vediamo il divano inteso come oggetto, o come fenomeno, o come esperienza di vedere il divano. Poi arriva l’altra scatolina , il linguaggio, e gli da’ un nome. 

Questa lettura e’ comoda se costruite macchine, ove ogni funzione e’ relegata ad un componente. E l’esistenza dei componenti non ha effetti collaterali. 

Il guaio viene quando, come stiamo vedendo, dei grandi modelli di linguaggio hanno “effetti collaterali” che ci aspettiamo da altri modelli. 

La mia personalissima ipotesi e’ la seguente:

Forse sinora e’ stata sottostimata l’importanza del linguaggio nella costruzione dell’intelligenza, e nel funzionamento generale dell’intelligenza umana. E quindi tutto quello che non ci aspettavamo ChatGPT facesse usando la lingua e’ stupefacente soltanto perche’ prima avevamo sottovalutato l’importanza del linguaggio.

Prendiamo per esempio il fenomeno delle “allucinazioni” che succede a ChatGPT. Si potrebbe pensare che sia una cosa inaspettata. Dovrebbe limitarsi a fare il linguaggio. Cioe’ si pensa che il mero linguaggio abbia dei limiti naturali, che precluderebbero le “allucinazioni”. 

Ma il problema e’ che il linguaggio consente di:

  1. Fare ipotesi, cioe’ descrivere cose che non percepiamo.
  2. Descrivere il futuro, che non percepiamo ancora.
  3. Descrivere il passato, che non percepiamo piu’.
  4. Descrivere cose che non esistono, esempio: un risotto all’unicorno.

e nel fare questo NON incontriamo alcun limite naturale insito nel linguaggio stesso. 

Non ha senso quindi stupirsi che ChatGPT possa avere “allucinazioni”: non sta violando alcun limite, perche’ il linguaggio come funzione consente di averle, e vorrei sottolineare che “fare ipotesi” sia anche una funzione estremamente importante nel pensiero umano. 

Perche’ mai qualcuno ha pensato che essendo un modello di linguaggio ChatGPT dovesse ereditare dal linguaggio dei limiti che il linguaggio NON HA?

 

Secondo me, cioe’, stiamo sopravvalutando ChatGPT semplicemente perche’ avevamo sottovalutato il potere della funzione linguistica del cervello umano. E se per caso la funzione linguistica fosse centrale nella nostra capacita’ di pensare, potremmo arrivare alla conclusione , o alla terrificante scoperta, che non stiamo solo imitando una scatolina chiusa con sopra scritto “linguaggio”, ma una scatola molto aperta, che si mescola con altre, e magari produce molto piu’ del nostro “pensare” rispetto a quel che credevamo.

Per esempio, se “linguaggio” e “visione” si sovrappongono, potrebbe succedere che noi non vediamo un oggetto che chiamiamo “divano”, ma che effettivamente noi vediamo un divano, nel senso linguistico del termine.

Dire che l’intelligenza artificiale e’ la scienza di costruire macchine che imitano singole funzioni “intelligenti” e delimitate del cervello umano ha un limite, ovvero il fatto che magari non esistono funzioni del cervello che siano davvero delimitate rispetto alle altre.

 

(1) Potrebbe interessarvi questo: https://ieeexplore.ieee.org/abstract/document/9441740

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *