Eliza, in italiano
Uno dei primi ricordi che ho dell’informatica in generale è di aver letto, da bambino, una descrizione di Eliza.
Si tratta di un programma creato nel 1966, che cerca di imitare una chat con uno psicologo, ed è probabilmente il primo chatbot nella storia.
Col tempo questo programmino mi ha intrigato sempre più, nel mio immaginario un giorno vicino i computer avrebbero risposto in maniera intelligente, proprio come nei film di fantascienza (invece, il sistema attualmente più costoso e, a detta del marketing IBM, sofisticato, crede che Toronto sia negli USA), e l’idea di parlare con un’intelligenza non umana, con una visione del mondo e un modo di pensare “alieni” è decisamente affascinante.
Un’altra cosa notevole di Eliza è che dopo tanto tempo non è ancora stata soppiantata da software molto migliori. Usare abbondanti log di conversazioni reali e database semantici non ha cambiato molto la situazione. Uno si aspetterebbe che con computer migliaia di volte più potenti sotto ogni aspetto e un certo interesse commerciale certi programmi possano vedere la luce, e invece, a distanza di quasi 50 anni, un programma scritto da un singolo individuo su un apparecchio con una potenza di calcolo inferiore a un Nokia 3310 dà ancora le patate a chatbot come Cleverbot.
Un chatbot è stato proprio il primo programma che ho provato a sviluppare quando ho imparato a programmare, e nel corso del tempo ho fatto vari tentativi. In effetti, creare una mia versione di Eliza è stata proprio la prima cosa che ho provato a fare quando ho messo le mani su un ambiente GWBASIC, creando un simulatore del rappresentante d’istituto delle superiori (un minuscolo programma che reagiva ad alcune parole chiave e alla punteggiatura rispondendo con frasi generiche o tipiche dell’individuo in questione).
Recentemente ho fatto un nuovo tentativo di creare un chatbot, stavolta un bot per IRC che usa il parser Fleximatcher (ancora molto incompleto, ma con cui almeno posso fare un po’ di NLP in italiano) per riconoscere delle strutture nel testo e rispondere con frasi apposite, o estraendo informazioni da usare in seguito. Mi sono fermato dopo avere aggiunto la possibilità di riconoscere i saluti (identificando chi saluta chi), il termine “foto a infrarosso” e le sue varianti definite da una piccola grammatica generativa (questo dopo una serie di discussioni sulla fotografia a infrarossi di cui magari parlerò più avanti) e poco altro, perché la varietà del linguaggio naturale è mostruosa e più regole si aggiungono nel tentativo di renderlo più reattivo e più è facile che qualcuna di queste dia dei falsi positivi, problema che fa sì che Conceptnet creda che i metalli aurei siano un tipo di “di solito“. Eliza, insomma, funziona bene perché è tremendamente difficile ribattere in maniera intelligente e ragionata a una frase ma è molto facile dare risposte generiche, soprattutto se si usa il trucco di interpretare uno psicologo e quindi poter eludere le domande mirate (“cosa ne pensa del Go?”->”crede che la mia risposta sia importante?”). Ho cercato una versione di Eliza in italiano, e ho trovato solo questo. A parte il fatto che il codice non è disponibile, il dialogo non è stato proprio eccelso:
Io: Ciao
Bot: In Italiano si usa dire “ciao”, ma io preferisco… Hasta la vista, baby!
Io: Do you speak English?
Bot: Non ho niente da dire su YOU SPEAK ENGLISH, prova a dire qualcosa tu…
Io: okay, cosa ne pensi dei salumieri?
Bot: Forse volevi dire CHE NE PENSI DEI GAY…
Considerando che il personaggio di Eliza da cui prende il nome cercava di entrare nell’alta società con modi forbiti, potrebbe almeno dare del lei. Per la cronaca, il dialogo con Cleverbot è stato solo leggermente migliore:
Io:Hello.
Bot:How are you?
Io:Fine! Do you speak Italian?
Bot:No I do not.
Io:Okay, What do you think about butchers?
Bot:That you’re not using your whole potential
Ho trovato poi questo porting di Eliza in Javascript, il quale mantiene abbastanza la semplicità del programma originale, incapsulando le risposte e i pattern a cui sono abbinate in un benedetto file JSON. Ho tradotto questo file di configurazione in italiano e lo potete trovare qui. Ho cercato di tradurlo direttamente senza modifiche alla logica, ma le differenze tra italiano e inglese rendono necessario qualche ritocco: poiché in inglese sostantivi e aggettivi non hanno quasi mai un genere, bisogna differenziare “mio” e “mia” e prevedere risposte differenziate; in italiano “perché” traduce sia “why” che “because”, quindi non si possono distinguere le domande dalle affermazioni sulle cause senza cercare punti di comanda. Comunqe, il dialogo con la traduzione di Eliza è stato così:
ELIZA: Come va? Mi dica il suo problema
YOU: do you speak english ?
ELIZA: Parlo solo italiano.
YOU: okay, cosa ne pensi dei salumieri?
ELIZA: Ha mai chiesto a altri ?
YOU: Sì, a un’altra sua traduzione in italiano
ELIZA: Per favore continui.
YOU: ha detto “Forse volevi dire CHE NE PENSI DEI GAY…”
ELIZA: Non è certa ?
YOU: chi?
ELIZA: Perché lo chiede ?
sembra che alcune domande e risposte vengano ignorate totalmente, probabilmente ho sbagliato qualcosa nello scrivere le regole, ma una funzione molto carina di Eliza è la possibilità di ricordare battute passate:
ELIZA: Per favore, mi dica cosa la turba
YOU: ciao
ELIZA: Salve
YOU: ciao
ELIZA: Salve di nuovo, che cosa la affligge?
YOU: salve
ELIZA: Come va? Per favore, mi dica il suo problema.
YOU: ciao
ELIZA: Ho già detto salve, non abbia reticenze
YOU: do you speak English ?
ELIZA: Parlo solo italiano.
YOU: deutsche ?
ELIZA: Non credo di capire bene.
YOU: sprechen Sie Deutsch?
ELIZA: Le ricordo che non parlo tedesco.
La capacità di discutere di Eliza non va oltre, sembra che per Terminator dovremo aspettare, ma è comunque più gentile e intelligente della stragrande maggioranza dei commenti ai quotidiani online.