Generare testi con l’intelligenza artificiale: un tutorial su GPT-2

Nel febbraio 2019 OpenAI, l’organizzazione fondata da Elon Musk dedicata allo studio dell’intelligenza artificiale, rilasciava il modello GPT-2 (Generative Pretrained Transformer-2). Tramite un complesso sistema di reti neurali, dopo essere stato “allenato” con milioni e milioni di testi scritti, l’algoritmo era capace di generare testi leggibili sia in maniera condizionale (cioè dandogli una traccia, un suggerimento sull’argomento di cui deve scrivere), sia non-condizionale (ovvero generando un testo a caso).

Del modello furono pubblicate 4 versioni: una small, conosciuta come 117M, una medium (345M), un modello large (774M) e infine il modello XL, detto anche 1.5B o 1558M. Questi acronimi corrispondono al numero di testi con cui l’algoritmo è stato allenato: si va dai 117 milioni del modello small fino ai 1.5 miliardi dell’ XL.

In particolare, quest’ultimo modello, si diceva, non sarebbe stato rilasciato perchè considerato troppo potente e possibilmente usato in modi non leciti (vedi fake news,..). Appena un mese fa invece, il 9 novembre scorso, OpenAI lo ha reso pubblico, ed in pochi giorni erano disponibili dei demo per testare la potenza del 1.5B.

Per provarlo voi stessi, potete visitare il sito web Talk to transformer, creato dall’ingegnere canadese Adam King. Vi viene chiesto di inserire una frase o uno spunto per la generazione del testo e l’algoritmo farà da sè. Se siete indecisi su cosa chiedere, potete scegliere tra 9 suggerimenti (ricette di cucina, viaggio spaziale, html e perfino Il Signore degli Anelli).

In via generale, funziona solo in lingua inglese. Se provate a chiedergli qualcosa in italiano, molto probabilmente non capirà, per la semplice ragione che è stato allenato solo su testi anglosassoni. Inoltre, risponde alle domande ed è capace di parlare più o meno di qualsiasi cosa: da un argomento di fisica fino a tematiche riguardanti la società.

Gli ho chiesto per esempio chi fosse Napoleone Bonaparte. Ecco come ha risposto:

In pratica, apparte il suggerimento che ho dato (parlare di Napoleone), tutto il resto è stato scritto dall’intelligenza artificiale e risulta sintatticamente leggibile. L’unico problema è che alcuni dei fatti raccontati non sono veritieri o non hanno senso: ad esempio, viene menzionato il fatto che Napoleone sia nato a Boulogne, ma in realtà è nato ad Ajaccio.

Il testo generato si ferma a 150 parole: tale è il limite permesso dal sito web. E’ una limitazione comprensibile dal momento che per far funzionare un modello GPT-2 serve una scheda video con almeno 11 GB di RAM.

Tuttavia, Google offre Tesla K80 e T4 nel suo ambiente di sviluppo Colab, una piattaforma dove chiunque può testare il proprio codice e usufruire gratuitamente di accelerazione GPU.

Proprio per questo, è stato creato un notebook jupiter pre-compilato dove testare il modello GPT-2:

https://colab.research.google.com/github/ilopezfr/gpt-2/blob/master/gpt-2-playground_.ipynb#scrollTo=tI-HVDbQS9dF

Usarlo non è difficile. Il primo passo è quello di cliccare sul pulsante play, nella prima cella di codice: (rimuovendo le cellette prima dei modelli 117M e 345M).

Google chiede l’autorizzazione prima di procedere. Una volta che l’installazione inizia, ci vorrà qualche minuto prima che si concluda.

Una volta fatto, siamo pronti a generare i primi testi. Basterà andare un po’ più’ giù fino al prossimo paragrafo: Unconditional sample generation.

Anche qui si tratta esclusivamente si cliccare il pulsante play. Eventualmente se lo desiderate potete cambiare le impostazioni per la generazione del testo, aggiungendo rimuovendo o modificando le flag indicate nella descrizione.

Con –model_name è indicato il tipo di modello da utilizzare (è preimpostato l’XL da 1558M). –nsamples indica invece il numero di testi da generare, mentre top_k e temperature indicano dei valori relativi alla diversità e casualità del testo.

Clicco anche io play. Aspetto qualche minuto, ed ecco che dopo un elenco interminabile di comandi e variabili, appaiono i miei primi 2 testi generati.

Il primo inizia con quello che sembra un articolo di giornale riguardo la presentazione di un libro, salvo che poi il testo generato collassa su se stesso e ripete per dieci volte la stessa frase.

Il secondo testo invece risulta più coerente. Sembrerebbe parlare di argomenti governativi statunitensi: non si tratta di un articolo di giornale ma piuttosto di un report, una specie di pamplet ministeriale. Anche questo testo, comunque, presenta dei “sintomi” di collassamento, in quanto dopo le prime due righe alterna frasi che iniziano tutte allo stesso modo, anche se si concludono diversamente.

In generale, dopo aver provato questo modello (non-condizionale) per diversi giorni, posso ben dire che esso produce il 70% delle volte manuali di istruzioni o articoli di giornale riguardanti notizie fantasiose o semi-inventate, mentre un 10% produce dialoghi, e un ulteriore 10% testi di saggistica su vari argomenti.

Sicuramente più coerente è però la generazione di testi condizionati. Nel pre-compilato di Colab, si può trovare subito dopo quella non-condizionata. In particolare ci riferiamo al paragrafo “text-completion”.

Anche questa volta, bisogna cliccare play per avviare la cella di codice, dopo di chè il modello chiede la traccia da suggerire:

Inserisco la domanda, premo il tasto invio della tastiera, e aspetto che i testi compaiano.

 

Il testo numero 1 sembra un saggio storico. E’ come se l’autore (l’intelligenza artificiale) si chiedesse chi fosse veramente Napoleone. Se fosse un genio, se avesse le capacità di diventare imperatore. E segue tutta un’argomentazione degna di nota.

Il testo numero 2 invece, pur risultando sintatticamente valido, tende a perdere di senso e racconta una storia romanzata della vita del generale francese.

Il modello condizionale di GPT-2 può essere utilizzato con qualunque input: potete chiedergli della Seconda Guerra Mondiale, come pure della Fusione nucleare, e così via. Se non centra l’argomento al primo tentativo, lo fa solitamente al secondo, e questo fa di GPT-2 un valido strumento di scrittura automatica di articoli e testi di vario tipo, ovviamente da controllare, perchè i dati prodotti tendono a non essere veritieri.