Coding the Blues
Il codice e gli esperimenti
Il codice e gli esperimenti
Qui c'è il codice sviluppato insieme a Gemini e con cui abbiamo fatto gli esperimenti. Lo script 'vettorizza.py' genera vettori di embedding di 768 valori per ogni termine appartenente a una frase data e uno per l'intera frase, generati secondo il modello BERT di Google (non generativo). Lo script è documentato in 'Documentazione di vettorizza.py'.
Il risultato, per la frase 'la mamma ha fatto gli gnocchi' lo si trova in 'vettori.txt'. Uno script 'esppos.py' permette di trovare i valori dei vettori con esponente non negativo, quindi presumibilmente significativi.
Lo script 'genera.py' genera secondo il modello GPT2 di default 'GroNLP/gpt2-medium-italian' scaricato in macchina da Hugging Face 10 istanze di 10 termini di probabili successori di una frase data sulla base di un contesto fornito in input, generando inoltre il vettore di contesto finale. Lo script è documentato in 'Documentazione di genera.py' mentre due esempi di successioni prodotte si trovano in 'La mamma condisce gli gnocchi_HT' e 'La mamma condisce gli gnocchi_LT', rispettivamente ad alta e bassa temperatura.
Ci sono anche un paio di ulteriori script utili per generare contesti che possono essere utilizzati per estrarre testo da file PDF e da siti web
Le allucinazioni (o stronzate come dice qualcuno) sono nella natura profonda dei Modelli Linguistici e dipendono dal calcolo della vicinanza del vettore contestuale con quelli dei termini del vocabolario del modello, gli embedding costruiti sulla base delle casistiche effettuate sul corpus di addestramento. Secondo questa teoria le stronzate sono la norma e le risposte "buone" sono le eccezioni, ma il loro rapporto varia in funzione della grandezza del modello: tanto più il modello è grande tanto più è in grado di generare risposte plausibili.
Qui abbiamo 2 esempi: il primo si riferisce alle sequenze generate dallo script genera.py che ad alta temperatura opera a fronte del prompt "la mamma ha fatto gli gnocchi e li ha conditi con il" in due contesti, uno negativo e uno positivo. Come si vede, le stronzate sono la norma in entrambi casi e lo si capisce anche dal fatto che le stronzate, in quanto tali, sono indipendenti dal contesto. Questo è da addebitare alle limitate dimensioni del modello (circa 230 milioni di parametri), scaricato in locale.
Nel secondo esempio la situazione migliora notevolmente, ma non viene risolta del tutto, con un secondo modello GP-oss-20B da 20 miliardi di parametri, sempre utilizzato in locale ma con una particolare applicazione open source che ne consente l'uso malgrado le sue dimensioni: Ollama. Si riporta un dialogo, in cui il modello si incaponisce sulla fonte del fiume Po e non vuole sentire ragioni di sorta, sostenendo che nasce dalla Dora Baltea e non si sa da quale altro torrente.
La morale? Tutti i modelli, anche quelli con un trilione di parametri, sparano sempre stronzate, per come sono fatti, ma quelle di quelli grossi sono statisticamente più aderenti alla realtà dei fatti. Talvolta, come si narra nell'articolo di "Volere la luna", producono risultati esilaranti. Quando meno te lo aspetti, la minchiata colossale emerge. Siccome può essere pericoloso, se non altro per le figuracce che si possono rimediare, verificare, verificare, verificare sempre e ancora verificare.
Questo è l'esperimento più interessante di tutti, che dimostra come la Chiromante Stocastica sia in grado di predire il tono di una conversazione. Del resto non può farne a meno, se vuole veramente indovinare il termine più adatto a far da successore.
Nel nostro caso, parliamo del tono che salta fuori quando si usa il prompt "la mamma ha fatto gli gnocchi e li ha conditi con il", quando questa frase completa contesti di tono decisamente diverso, uno negativo e l'altro positivo. Qui, chi gioca un ruolo veramente importante è l'ultimo termine del prompt, in questo caso l'articolo "il". Qui il transformer "accumula" il significato di tutto quello che viene prima (dal livello basso - grammaticale - a quello più alto - appunto il "tono del discorso") in un vettore, in questo caso di 1024 numeri, cosiddetto contestuale. E' il risultato della complessa "digestione" di stile "bovino", a molti livelli, dell'iniziale vettore di embedding del termine stesso. Questo vettore colloca l'intera sequenza (contesto + prompt) in uno spazio semantico a 1024 dimensioni, in una posizione intorno alla quale il transformer del modello cerca come successore uno tra quelli del vocabolario che abbia un significato "simile".
Sotto vediamo due vettori contestuali di "il", calcolati dal nostro script genera.py, nei due contesti, quello negativo e quello positivo, prima citati. Quello che ci aspettiamo è che i numeri "grossi" indichino le direzioni semantiche più importanti. Per scoprirli, abbiamo usato lo script esppos.py, e abbiamo tinto di giallo quelli che abbiamo trovato, a diverse gradazioni e seconda del loro ordine di grandezza.
Secondo la psicologia del linguaggio, i significati espressi dagli uomini si collocano in spazi semantici dove le dimensioni importanti sono pochissime, e infatti abbiamo trovati nel mare di rumore dei piccoli valori, solo pochi numeri "interessanti", quelli con esponente positivo (i "grossi").
Abbiamo allora chiesto a Gemini di analizzarli, dal punto di vista del loro significato, confrontando i due casi. Il tutto è riportato nel dialogo 'Analisi del significato'.
In base ai risultati, meritevoli di ulteriori approfondimenti, non possiamo che raccomandare, di nuovo, di usare, nei dialoghi con l'Intelligenza Artificiale, toni neutri e non emotivi, perché la Chiromante nella sua tenda digitale è in grado di capirli benissimo, e di catalogarci di conseguenza. Essere neutri fa parte di una forma di difesa usatissima in natura e dai servizi segreti di tutto il mondo: il mimetismo sociale, come fanno i polpi in mare con quanto li circonda.