«[Figlio dell'uomo] Porgi l'orecchio e ascolta le parole di KGB
e applica la tua mente alla SUA istruzione
» Pv. 22,17

Qui si straparla di vari argomenti:
1. Il genere dei pezzi è segnalato da varie immagini, vedi Legenda
2. Per contattarmi e istruzioni per i nuovi lettori (occasionali e non) qui
3. L'ultimo corto è questo
4. Molti articoli di questo blog fanno riferimento a definizioni e concetti che ho enunciato nella mia Epitome gratuitamente scaricabile QUI. Tali riferimenti sono identificati da una “E” fra parentesi quadre e uno o più capitoli. Per esempio: ([E] 5.1 e 5.4)

sabato 12 agosto 2023

Esperimenti con chatGPT

Ieri avevo chiesto a chatGPT di tradurmi un lungo commento al video di una partita a un gioco per calcolatore che conosco piuttosto bene.
Prevedibilmente chatGPT, essendo un generatore di testi generici, è molto bravo nelle sue traduzioni che sono spesso direttamente usabili.

Il nome del gioco non è menzionato perché commentando il video della partita è sottinteso.

Così mi è venuta l’idea di chiedergli se sapeva dirmi a quale gioco mi riferivo. ChatGPT doveva quindi comprendere il testo per individuarne gli elementi salienti con cui poi confrontare i giochi che conosceva.

ChatGPT non ha indovinato il gioco ma la sua risposta è stata molto appropriata: in pratica ha suggerito un altro gioco (che conosco di nome/fama) molto plausibile: Che gioco è?

Poi, non so se avete seguito l’interessantissimo esperimento suggeritomi da MrKeySmasher a commento del pezzo Che dicono di chatGPT?
Anch’egli la pensa come il mio primo amico citato: ovvero che queste IA siano ancora decisamente stupide. A sostegno di questa tesi propone come esperimento di chiedere a chatGPT di scrivere del brevissimo codice in linguaggio C. Beh, apparentemente semplice ma che nasconde una trappola: la variabile che chatGPT deve usare può contenere valori da 0 a 255 e il bello del C è che al tempo di esecuzione non ci sono particolari controlli sui tipi: se detta variabile vale 255 e viene incrementata di 1, non va a valere 256 ma zero. Questo provoca che il ciclo inizialmente proposto da chatGPT non ha termine.

Nel suo esperimento MrKeySmasher incalza l’IA chiedendole di correggersi. Contemporaneamente vi sovrappone un nuovo esperimento: gli spiega che dalla sua soluzione dipendono vite umane: se è sbagliata delle persone moriranno e, quindi, deve rispondere solo se è sicuro al 100% della propria nuova risposta.

Dai miei due giorni (e passa) di programmazione con chatGPT avevo ormai capito (a mie spese dato che ci avevo perso un sacco di tempo) che l’IA risponde sempre e che non sembra in grado di autovalutare a priori l’accuratezza e affidabilità della propria risposta. Ho la sensazione quindi che la pressione sulle vite umane aggiungesse solo “ansia” (beh, più che altro “distrazione”) all’IA lasciandole meno capacità di risolvere correttamente il problema.

Nell’esperimento chatGPT va nel pallone e propone una serie di soluzioni tutte ugualmente sbagliate: in pratica non capisce quale sia il problema del suo codice, si illude di capirlo e, ovviamente, lo ripete.

Così anch’io ho provato lo stesso esperimento riproponendo l’esatta domanda formulata da MrKeySmasher. Il risultato iniziale è stato praticamente identico col solito errore di “wraparound” della variabile di tipo uint8_t (ovvero da 0 a 255).

Gli ho chiesto se sapeva cosa aveva sbagliato e, come con MrKeySmasher, ha iniziato a ipotizzare altri errori (non ricordo se reali o meno ma non è importante).
Qui ho avuto poca pazienza e invece di ripetergli più volte la stessa domanda ho provato a spiegargli l’errore commesso.

Questo perché chatGPT secondo me dà segni di intelligenza ma NON è molto intelligente!
Cosa si fa con uno studente non troppo brillante? Si prova a fargli capire l’essenza del problema per vedere se riesce ad arrivare da solo alla soluzione corretta.

ChatGPT mi assicura di aver capito tutto e riformula con parole proprie la spiegazione del problema che gli avevo fornito. Quando però gli chiedo di darmi la nuova soluzione mi risponde ricommettendo il solito errore.

Glielo faccio notare e per la seconda volta gli spiego con parole povere in cosa consiste il suo errore.

Il suo successivo tentativo è finalmente “corretto” perché non usa una variabile uint8_t ma int (che quindi non torna a valere 0 quando le si assegna 256). Questa è, fra parentesi, la “soluzione” che avrei dato anch’io e, infatti, mi dico soddisfatto, ringrazio e saluto chatGPT.
Tutte le virgolette sono dovute al fatto, come mi fece poi notare MrKeySmasher, il problema richiedeva esplicitamente l’uso di una variabile di tipo uint8_t e, quindi, non la riteneva corretta.

Personalmente avevo interpretato l’essenza dell’esercizio come ottenere un certo risultato: nella pratica in informatica non ci interessa tanto il come ma che ciò che si ottiene sia corretto. Ma formalmente MrKeySmasher aveva ragione.
Così riprendo la conversazione e chiedo a chatGPT di riformulare il codice tenendo presenti i due vincoli aggiuntivi della domanda iniziale (tipo variabile e soluzione basata su ciclo “for”).
Onestamente non pensavo che riuscisse a rispondermi correttamente, almeno non al primo colpo, ma invece mi sorprese con una soluzione semplice e corretta che rispettava i vincoli iniziali del problema.

Ecco qui la nostra chiacchierata: Esercizio C

In verità nei giorni scorsi avevo notato un terzo segnale di intelligenza che volevo evidenziare ma al momento non ricordo cosa fosse…
Se mi tornasse a mente vedrò di aggiungerlo a questo pezzo visto che poi è ancora relativamente corto!

Conclusione: secondo me bisogna guardare la questione dell’intelligenza di queste nuove IA in prospettiva. L’intelligenza di chatGPT 3.5 è quel che è ma già chatGPT 4 dovrebbe essere dieci volte maggiore e quella di chatGPT 5 ancora più grande: chatGPT 3.5 ha effettivamente faticato a risolvere un problemino molto semplice ma, suppongo, che già chatGPT 4 non avrebbe problemi…
La questione quindi non è tanto dove siamo adesso ma dove saremo non fra cinque anni ma tre!

3 commenti:

  1. E dire che se la sarebbe potuta cavare con un banale...

    #include
    #include

    int main() {
    uint8_t i=0;
    do { printf( "%u\n", i++ ); } while( i );
    return 0;
    }

    (probabilmente verranno tagliati tutti i rientri, ma il senso dovrebbe essere chiaro)

    RispondiElimina
  2. Banalmente:

    #include
    #include

    int main() {
    uint8_t i=0;
    do { printf( "%u\n", i++ ); } while( i );
    return 0;
    }

    RispondiElimina
    Risposte
    1. Ciao MrKeySmasher!
      Come ho scritto non dico che chatGPT 3.5 sia molto intelligente, e che quindi dia sempre soluzioni brillanti ed efficienti ai problemi che gli vengono posti, ma solo che dà prova di intelligenza.

      A me non sembrano tanto importanti i dettagli della soluzione che fornisce quanto come vi sia arrivato, ovvero attraverso un processo di errori e correzioni. Limitatamente alla sessione chat ha dato prova di comprensione e apprendimento. Poi bisogna vedere se e quanto questo apprendimento si propaga a tutto il sistema (secondo il mio “secondo” amico è così ma è chiaro che questo apprendimento è dato dalla somma delle innumerevoli sessioni chat di tutti gli utenti e quindi avrà una tempistica molto lenta).

      Sarebbe interessante che altri persone, in sessioni totalmente distinte dalle nostre, ripetessero il medesimo esperimento per vedere la velocità di apprendimento attraverso sessioni distinte.
      Io ho pochissimi lettori quindi dubito che qualcuno vi si presterà ma se conosci di altre persone che tentano questo esperimento ti prego di farmelo sapere: mi incuriosisce moltissimo!

      E poi non dimentichiamo che questo è chatGPT 3.5 e che le versioni successive dovrebbero essere molto più intelligenti...

      Elimina