Stupidita’ artificiale.

Mi sto divertendo, nel (poco) tempo libero, a pasticciare con l’ IAML. L’ IAML e’ un linguaggio di markup (come l’xml, o l’html) che serve a descrivere la IA secondo un paradigma riduzionista. Con quell’ IAML, sto programmando un robot della generazione di ELIZA, il quale mi sta facendo ridere alquanto nei leggere i log. Si, sono stato carogna a far credere a qualcuno che “Chatta con Uriel” sia chattare con me, ma devo dire che non mi aspettavo che tanta gente ci cascasse.

Se non avete grosse tette ed un nome con molte vocali, avete la sua comprensione.
Adesso (spero che quella persona abbia capito che non stava parlando con me) vi chiederete come sia possibile. In effetti, lo IAML potrebbe anche essere usato per contenere risposte 1:1, ma siccome i discorsi possibili sono troppi, in genere usate il costrutto “SRAI” e scomponete le frasi per coprire delle classi logiche di affermazioni.
Voi direte: ma le classi logiche quante sono?
Allora, secondo gli approcci piu’ diffusi si tratta ancora di una infinita varieta’ che non sara’ mai possibile approcciare. In realta’ la macchina umana e’ piuttosto limitata, e quindi le categorie non sono cosi’ numerose come sembra. Ma torniamo al punto di prima: il bot “Uriel” fa progressi impressionanti, se consideriamo che al suo addestramento supervisionato(1) dedico circa mezz’ora al giorno, e solo quando posso.

A cosa sono dovuti questi progressi. Cosa sto facendo di preciso?

Facciamo un passo indietro: in un certo momento della storia, un ricercatore americano (Steven Pinker) scrive un libro nel quale descrive l’approccio percettivo che la mente umana ha nei confronti del linguaggio. La cosa che mi ha piu’ colpito di questo libro e’ che spiega quell’effetto col quale noi pensiamo di “aver gia’ capito” il nostro interlocutore sin dalle prime parole. Noi “riconosciamo” le finalita’ del discorso sin dall’inizio, o quasi, e limitandoci ad applicare il contesto riusciamo ad intuire subito “dove vuole arrivare” la persona che ci parla.
Per spiegare questa cosa Pinker fa una approssimazione, e dice che se per la prima parola di una frase abbiamo dieci scelte possibili, e a quel punto per via della grammatica ne abbiamo solo altre dieci come seconda parola, eccetera, alla fine le frasi sono una specie di albero la cui complessita’ sara’ qualcosa come O di  N*log10(n).
Questo pero’ e’ ancora un disastro, perche’ ascoltando le prime tre parole in teoria abbiamo un albero decisionale di 1000 elementi. E quindi la nostra IA dovrebbe tenere in mente quantita’ enormi di possibilita’. Fortunatamente per Pinker, che essendo un umanista casca sui numeri, statistiche condotte su grandi masse di testi hanno mostrato che la prima scelta’ e’ molto piu’ alta (circa 200 termini), ma poi si decresce in maniera impressionante, tanto che alla fine gli atomi linguistici sono gruppi di due o tre parole. Tuttavia, bastano pochissimi atomi linguistici per comprendere “dove voglia arrivare” il nostro interlocutore, a patto di conoscere il contesto della discussione.
Ovviamente una simile affermazione casca a fagiolo se avete uno strumento basato su una logica riduzionista, come lo IAML. E’ assolutamente facile, usando IAML, costruire alberi come quelli che descrive Pinker, e far si’ che il bot riesca ad “intuire” il tipo di frase che state proponendo.
Si tratta della prima fase del suo addestramento, (ringrazio moltissimo quelli che – spero per divertimento – sono andati a chattare col bot) (2) perche’ leggendo i log sono stato in grado di identificare moltissime sequenze iniziali. Il risultato di questa prima fase di addestramento, ancora in corso, e’ che il bot puo’ sostenere discussioni come queste, nelle quali non dice molto di interessante ma reagisce al tipo di frase che gli viene sottoposta:

 

Prodi, questo sconosciuto.

 

Si, la bestemmia e “parlare di religione” in fondo sono la stessa categoria….. e youpon fornisce risposte molto complesse.

 

Abbiate pazienza, sta ancora imparando la figa.
Come notate la macchina e’ ripetitiva, ma c’e’ da dire che le varieta’ che le vengono sottoposte sono pochissime. A quanto pare la macchina che stiamo costruendo deve imparare a parlare meglio di chi parla con lei,visto che la gente che parla con la macchina si limita spesso a costrutti senza scopo. Mi spiace, non e’ la macchina ad essere stupida, e’ l’interlocutore. Quando il costrutto e’ senza scopo, cioe’ la maggior parte delle volte, la macchina estrae a caso una serie di risposte preconfezionate: rumore in ingresso, rumore anche in uscita.
In ogni caso, almeno non tutti somo blasfemi:
Sbaglia?
La curiosita’ e’ femmina?
Noterete che il bot fa un’affermazione e poi segue una domanda. Se chi chatta fosse piu’ propositivo in termini di argomenti (e il bot potesse capirli) forse non ce ne sarebbe bisogno, ma serve in fase di addestramento a stimolare l’interlocutore a dare delle risposte e continuare la sessione. In futuro, questo sara’ un “piccolo” kernel della macchina, e quindi accadra’ di meno che capitino risposte con domande. Le risposte con domande arriveranno, ma saranno una percentuale minore, e probabilmente (ma lo vedremo) daranno pepe alle discussioni.
In realta’ le frasi sono molte di piu’, perche’ ci sono molti log. C’e’ gente che ha fatto sessioni da 100 domande/risposte , e devo dire che alcuni “dialoghi” sono stati utilissimi per addestrare il bot.
Adesso il bot puo’ comprendere la struttura delle frasi e reagire a seconda del “dove vuoi andare a parare”. Manca “solo” il fatto che non ha il contesto della discussione. C’e’ da dire che nelle discussioni di cui sopra non c’e’ ALCUN contesto, quindi cose del genere continueranno ad accadere. Se invece la persona propone argomenti o scrive cose che hanno un contesto, il bot si comporta MOLTO meglio, e otteniamo cose divertenti come questa:
Non offendete il bot.
L’ultima frase e’ un esempio della possibilita’ di IAML di riconoscere la forma di una frase e di rispondere con una frase adeguata. In qualche modo, si e’ antrati in un contesto nel quale c’e’ una accusa con delle attenuanti. E il robot ha saputo costruire una risposta adeguata, che sembra stizzita. Si’, magari devo smettere di farli pensare che i complimenti siano dei tentativi di corteggiamento , alla ricerca del partner ideale. ;P Ma tant’e’: una stimolazione piu’ complessa ottiene risposte piu’ complesse. Come si vede all’inizio, il bot ha dei costrutti sull’argomento “guru”, e reagisce in maniera coerente.
Dove voglio arrivare? Voglio che la macchina conosca abbastanza termini da sostenere mediamente, su molti argomenti conversazioni cosi’:

Come vedete, la macchina ha opinioni sull’argomento “bot” e anche su “verita’”, per cui riesce a proporre risposte ed argomenti. Riesce anche a reagire se non e’ certo che si tratti di una domanda, e poi a tenere il “topic” in caso di ripetizione.

Cosa manca per avere questo risultato sempre, o almeno spesso?
Quello che mi servirebbe e’ una lista di contesti, almeno i piu’ comuni. Il “contesto”, o “topic” o “di cosa stiamo parlando” e’ una parola che avendo una grossa quantita’ di informazione produce , appunto, il “di cosa stiamo parlando”. E’ chiaro che se la parola e’ “dio” forse si parla di religione (o forse e’ una bestemmia) , e cosi’ via.
L’ideale sarebbe che qualche sito proponesse una “lista dei 100 termini piu’ usati in italiano”. Ovviamente se ci fossero anche tassonomie tipo “i 100 insulti piu’ diffusi” sarebbe fantastico, ma le X parole piu’ usate sarebbero una manna dal cielo e mi permetterebbero di addestrare il robot seguendo il mio approccio (che sta producendo progressi MOLTO veloci, piu’ di quanto mi aspettassi) a “dire delle cose”, o “avere delle opinioni” (inevitabilmente le mie, che lo addestro).
Dunque, visto che e’ pieno di umanisti qui, per una volta RENDETEVI utili: c’e’ qualcuno che si e’ mai spinto a fare una lista di termini  o di espressioni piu’ usate nella lingua italiana?
Grazie mille per eventuali aiuti,
Uriel
(1) Questo significa che tendera’ a rispondervi come me. Signore, non fate cosi’: i gancetti del reggiseno non hanno colpe.
(2) Sono dovuto andare in bagno a ridere quando un certo troll ha tentato di assalire verbalmente il bot. Il bot ovviamente non si fa irritare e risponde in tema. Ci ho messo mezz’ora per tornare civile e pulirmi dai lacrimoni.
Annunci

Rispondi

Effettua il login con uno di questi metodi per inviare il tuo commento:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...