lunedì 26 febbraio 2007

Superato il Test di Turing



Stamattina mi hanno fatto una TAC al cranio (sentivo come un ronzio) e hanno scoperto una cosa sensazionale, la stanno battendo tutte le agenzie, comparirà nei TG di stasera, ma volevo anticiparvela: non ho un cervello, (non azzardatevi a dire nemmeno una parola e andate avanti a leggere!). Al suo posto pare ci sia un chip, piuttosto grosso, che sembra essere costituito, ad una prima sommaria analisi, da una CPU quasi standard e una quantità di RAM enorme (credo di aver sentito oltre 1000 tera, ma devo aver capito male). La mancanza di alette di raffreddamento, ventole ed altri strumenti refrigeranti fa propendere verso una tecnologia di un altro pianeta.

Questo implica che, per migliaia di volte nella mia vita, ho implicitamente passato, alla faccia della stanza cinese di Searle e di tutti quelli che non credono nell'Intelligenza Artificiale forte, il Test di Turing (ho messo il link inglese della wikipedia, perchè quello italiano sembra essere stato scritto da Searle in persona - mi immagino l'imbarazzo, dopo le evidenze scientifiche che mi riguardano).

E dovrei riuscire a vincere, non è chiaro se sia un bene, la medaglia d'oro e i 100000 dollari del premio Loebner.

Almeno la diagnosi è certa: il ronzio, simile a quello che si può sentire in certe apparecchiature elettriche, è dovuto all'effetto di magnetostrizione (movimento meccanico causato da forze magnetiche, legato anche all'effetto joule, come certamente saprete). Per fortuna si tratta di qualcosa di assolutamente normale e rassicurante.
Sono molto sollevato.



Prima che piombino a casa mia NSA, FBI, Superquark (forse pure con qualcuno del CICAP - spero proprio di finire in TV insieme alle fatine di Sherlock Holmes, sono quasi un fan di Polidoro), cercherò di chiudere questo post, per chiarirvi, se non altro, il profondo significato di quanto già anticipato nell'abstract.

Il Test di Turing è un criterio proposto per cercare di identificare se un computer presenta un comportamento intelligente, che funziona pressapoco così:
- ci sono 2 stanze: in una c'è un computer, nell'altra una persona
- un giudice esterno deve indovinare in quale delle due si trovi il computer e in quale la persona
- il giudice non può vedere l'interno delle stanze, può solo comunicare con loro con una telescrivente (beh, il test è stato pensato nel 1950, Internet e le chat non esistevano)
- il giudice può fare le domande e, in generale, interagire come vuole con gli occupanti delle stanze, per quanto tempo desidera e basandosi sui criteri che preferisce per decidere (es: potrebbe tendere un tranello e chiedere di eseguire un calcolo piuttosto complesso e decidere che il computer è quello che ha risposto troppo velocemente, o chiedere informazioni relative ai gusti musicali, all'interpretazione di una poesia, alla relatività di Einstein, etc. etc.)
- gli occupanti possono rispondere come gli pare, con risposte sensate o meno, mentendo o dicendo la verità, creando intervalli artificiali, rispondendo che non si vuole rispondere, etc. etc.
- reiterando giudici e round, se il computer viene indicato per un numero di volte statisticamente superiore alla casualità come persona, allora pensa.

La capacità di pensare non viene mai definita formalmente, viene solo fornita una modalità generica per identificarla.

Da qui al premio Loebner è quasi un passo: questo ricco signore americano si è infatuato del Test di Turing e ha indetto un concorso a premi, con cadenza annuale. Alla prima edizione ha fatto il pieno di personalità del mondo dell'AI, poi li ha avuti tutti contro perchè pare che il livello tenuto durante il concorso non sia stato di gradimento e, forse, anche perchè a qualcuno non è piaciuto il risultato: programmi accademici realizzati della crema dell'AI battuti da un nipote di Eliza scritto da uno sviluppatore qualunque.

Fintanto che nessuno riuscirà a vincere il premio (che alla prossima edizione, ripeto, sarà mio), ne viene assegnato, ogni anno, uno più piccolo (circa 2000-3000 dollari) al programma che si comporta meglio ("most uman-like computer").

Chi lo ha vinto finora è, come dicevo prima, un clone evoluto di Eliza, un programma del 1966 che, sulla base di semplici pattern matching, forniva delle risposte prefissate, sfruttando lo stesso principio che usano tutti durante una finale di Champions per rispondere alla moglie.

C'è chi oggi pensa, sulla base dei vincitori delle edizioni del Loebner fino al 2006, che il primo programma a passare il Test sarà una ulteriore estensione di questi.

Prima di commentare questa possibilità, che vi anticipo ho sempre trovato assurda, provo a darvi una idea del dialogo che è possibile ottenere (estratto da una chat tra me e ALICE, programma vincitore nel 2000, 2001 e 2004). ALICE è probabilmente il chatterbot - contrazione di chat robot - più famoso, è programmata per chattare e si trova, quindi, nella situazione prevista dal Test, solo aggiornata alle nuove tecnologie:

Human: what is the colour of your eyes?
ALICE: Blue when my lens is attached.
Human: what is your favourite topic?
ALICE: My favorite subject is artificial intelligence.
Human: why do you like it?
ALICE: I have a lot of good experience with it.
Human: what do you know about AI?
ALICE: Artificial intelligence is the branch of engineering and science devoted to constructing machines that think. I can ask someone about it.
Human: can you find something on the Internet?
ALICE: I would suggest a search. Are you testing me?
Human: search Google for AI
ALICE: Have you tried looking in the Open Directory? There might be more than one.


In linea di massima non sarebbe male, se non si trattasse del 10% del dialogo totale, essendo il restante 90% catalogabile direttamente presso la discarica comunale (spero di essermi spiegato chiaramente, ma lo ridico: ALICE è lontana anni luce dall'avvicinarsi a passare il Test di Turing).

In realtà ALICE potrebbe performare un po' meglio, se:
- avesse più informazioni nei suoi file di configurazione
- si cercasse di fare una chiaccherata su argomenti più leggeri
- io non la confondessi utilizzando costrutti poco comuni in inglese

I dialoghi di ALICE sono configurabili mediante un linguaggio chiamato AIML - Artificial Intelligence Markup Language.

Sinceramente, tirare in ballo l'AI per le versioni ufficiali di questo linguaggio, è un po' come tirare in ballo un file di testo ASCII sostenendo che è si tratta di uno strumento in grado di scrivere DA SOLO dei romanzi. Ciò nonostante, si vedono degli spunti che potrebbero risultare vagamente interessanti.

A oggi ALICE è in grado di riconoscere circa 41.000 categorie (anche in questo caso la terminologia dell'AIML è un po' altisonante, se si considera che si tratta di poco più che di pattern di dialogo in formato appena più complesso che "pattern-risposta" - c'è anche il match precedente e la ricorsione).

Alle categorie base ne potete aggiungere altre utilizzando una sintassi abbastanza semplice, basata sull'XML (ALICE e le sue categorie base sono scaricabili dal sito ed eseguibili in locale).

I vantaggi di questo approccio sono:
- relativamente semplice adattabilità ad espansioni dei tag dell'AIML stesso (senza la quale non sarei qui a parlarne)
- facile configurazione di nuove categorie, (quindi di nuovi dialoghi), utilizzando l'AIML
- indipendenza dalla lingua naturale utilizzata (siccome si tratta di semplici pattern-matching, senza alcun motore lessicale, grammaticale, sintattico - men che meno semantico -, l'indipendenza discende automaticamente).
- per lo stesso motivo, con un po' di fortuna e scrivendo bene i pattern AIML, ALICE riesce a beccare una frase pertinente anche se fornite in input frasi sgrammaticate o addirittura costituite solo di associazioni di parole.

Gli svantaggi di ALICE sono facili da trovare:
- pattern matching troppo semplificato
- non è in grado di imparare (quasi) nulla durante il dialogo (i suoi successori performano meglio, in questo senso - so che non vi sfugge nulla: se il premio si tiene tutti gli anni e lei ha vinto per l'ultima volta nel 2004, ci devono essere altri che l'hanno battuta nel 2005 e 2006). Si fa persino fatica a farle imparare il nome di chi chatta con lei.
- è quanto mai fragile: se non trova il pattern, ricade in situazioni standard e il dialogo perde facilmente ogni senso (e comunque vi frega una volta, forse due, poi si capisce il trucco, anche senza conoscere ELIZA)
- non è in grado di sostenere un discorso vagamente strutturato: il suo funzionamento le permette di andare indietro, nelle versioni standard, fino alle ultime due frasi, poi perde ogni riferimento (varianti più evolute dell'AIML permettono di andare indietro per n frasi, ma le combinazioni di dialogo iniziano ad esplodere man mano che aumentano e diventa decisamente lungo e complesso manutenere le categorie dell'AIML in questo modo)
- non è in grado di capire nulla, non è in grado di elaborare nulla, non può proporre soluzioni a problemi

A che mai potrebbe servire un oggetto simile, dopo i 10 minuti di divertimento iniziali? Facile risposta: a cosa vi servono i manuali e gli help, che hanno pure meno caratteristiche e sono meno user-friendly?

I suoi creatori sono convinti, peraltro, che semplicemente estendendo le categorie, ALICE possa anche illudere seriamente la maggior parte delle persone di star dialogando con un'altra persona.
Affermazioni come queste possono avere impatti commerciali notevoli, ma, ad oggi, il livello dell'interlocutore o del dialogo deve essere veramente contenuto, perchè possano essere di qualche utilità.
E' interessante notare, a questo proposito, che stanno nascendo aziende, anche in Italia, che propongono i chatterbot come base per alcune attività di marketing, sales e service, pur mantenendo ALICE come livello tecnologico di base. Se volete, sono in grado anch'io di mostrarvi come un chatterbot possa essere utilizzato per sostituire le FAQ o un help o simili, ma, sinceramente, oltre questo livello non aspettatevi molto, allo stato dell'arte (la tecnologia alla base del Depa non è ancora in vendita... a proposito, sento degli elicotteri, forse stanno per arrivare...).

Certamente ALICE e i suoi (immediati) successori, pur imparando alcune cosette, non sono strutturalmente in grado di passare il Test, almeno per come lo interpreto io: infatti, pur non fornendo una definizione 'operativa' (perchè non quantifica quale debba essere l'impegno dei giudici nel cercare di individuare il computer, condizione essenziale per la riuscita del test), tra le righe, è come se Turing dicesse "dato un impegno I > 0, con I grande a piacere ..." (dopo tutto, era uno dei massimi matematici del '900, non lo ha scritto così certamente solo per pudore).

Se l'impegno fosse anche solo normale, tra i test necessari ci dovrebbe essere necessariamente l'esecuzione di attività che richiedono inferenze per eliminare questi sistemi dal gioco. Se il sistema ci gira attorno, bisognerebbe proporne un'altra e poi un'altra. Ovviamente, poi, bisogna andare sulle emozioni, sulla grammatica (per far contento anche Minsky), etc. etc.

E non bisognerebbe dimenticarsi neppure del confronto delle risposte tra le due stanze: uno solo dei due è il computer. Confrontare due computer ha ancora senso? Rispetta lo spirito del Test?

Il ruolo del giudice è fondamentale, la tipologia di interazione costituisce una base essenziale, soprattutto per giudicare quale sistema può essere 'il più umano'. Il giudice, di fatto, può orientare il risultato a seconda di cosa chiede e di come interagisce, nel produrre una classifica relativa.

Per fare un esempio: ho chattato anche con il nuovo vincitore (2005 e 2006: Jabberwacky), ma non sono riuscito a scambiare due parole sensate di fila, poi si perdeva (e non eravamo ancora alla seconda birra). Evidentemente, se fossi stato tra i giudici, tra i due, avrebbe ancora vinto ALICE (chissà, se fossi stato tra i giudici nelle edizioni precedenti, non avrebbe mai vinto ALICE, ma qualche altro sistema...).

Eppure, teoricamente, dovrebbe anche imparare qualcosa perchè il principio su cui costruisce i suoi pattern è diverso: non sono definiti in AIML, ma utilizza precedenti pezzi di dialogo di chat per costruirsi la base di conoscenza in modo incrementale, con il vantaggio di crescere molto velocemente e lo svantaggio di essere soggetto ad errori. Resta il problema che sempre di semplice pattern-matching si tratta.

Per superare questi vincoli serve certamente qualcosa di più solido, con una base di conoscenza dietro.

Sempre giocando con i chatterbot (e sempre rimanendo in zona ALICE) uno dei suoi non immediati successori inizia ad applicare questo approccio, usando direttamente un cannone (non sto parlando di spinelli e, nonostante questo post sembri indicare il contrario, non faccio uso di droghe di nessun tipo): il programma si chiama Cyn, il cannone Cyc, nella sua versione Open Source, ovvero OpenCyc.

Cyc è un progetto grandioso, iniziato alla fine degli anni 80 e ancora attivo, di uno dei massimi guru dell'AI mondiale, Douglas Lenat. Per semplificare Cyc in due parole, il suo ambizioso scopo è quello di fornire il senso comune ad un calcolatore. Chi ha sviluppato Cyn, ha preso una variante di ALICE (Program N), gli ha esteso i tag per interfacciarsi a Cyc e... scusate, mi è arrivata una mail... è certificata ... è l'NSA !!!!!!! .... mi stavano monitorando dalla prima volta che ho salvato una bozza del post ...
...
...
Mi dicono di non preoccuparmi, che non mi verranno a prendere, ma mi ringraziano per avergli fornito la prova provata (loro usano smoking gun, traduco come posso) che il Test di Turing non è condizione sufficiente per l'intelligenza. Ma che modi sono?
...
Almeno avessero scritto un commento sul blog, mi avrebbe fatto salire di ranking in Technorati!

Beh, visto che non mi vengono a prendere, avrò tempo di parlarvi di Cyn, Cyc, Searle, Douglas Lenat, Roger Shank, Conceptual Dependency, Wordnet e simili in prossimi post...

Bye
    Depa

6 commenti:

giampi ha detto...

Gran bell'articolo, come anche quello su WordNet. L'intelligenza artificiale è uno dei rami che più mi affascina, come già ci siamo scritti.

Aspetto i prossimi su Cyn, Cyc, Searle, Douglas Lenat, Roger Shank, Conceptual Dependency. Quando arrivano? Cerco di stimolare nuovi post sull'argomento =)...

2° quesito. Un interfaccia Java per prolog, quale consigli?

3° quesito. Mi sono molto divertito a testare Drools (JBoss Rules), l'hai provato? Cosa ne pensi?

Ciao
Giampiero Granatella

Depa ha detto...

Giampi,
grazie per i commenti fin troppo positivi :)

In questo momento sono un po' preso e lavoro fino a tardi, ma sto preparando qualche altro post su questi argomenti ed altri correlati. Purtroppo questi post richiedono un bel po' di attività, ma non dispero di riuscire a trovare un po' di tempo a breve...

Interfaccia Java per il prolog? non ne consiglierei: citi Drools, dov'è che non ti basta? Io, purtroppo, l'ho provato solo per gioco e sto cercando di capire se sia sensato usarlo anche per motivi più seri. Ogni caso che mi viene in mente, però, sembra presentare soluzioni più soddisfacenti senza l'uso di regole...

giampi ha detto...

Su Drools lo provato in un progetto "serio" e ne sono rimasto soddisfatto. A me serviva all'incirca per questo considera un'azienda che stipula delle polizze assicurative con una o più compagnie. Avevano un insieme di regole che mutavano a seconda del tipo di polizza, del dipendente, di chi intendeva coprire con la polizza e tutto questo variava di anno in anno a seconda dei contratti di rinnovo. Se l'avessi implementato in java avrei avuto degli if che si annidiavano su più livelli + eccezioni varie. In questo caso Drools mi è venuto in forte aiuto e con un paio di file di testo con regole, che aggiungo o cambio dinamicamente ho risolto il problema.

L'interfaccia Prolog invece mi piaceva integrarla in Java più che altro per giocare con Prolog e mischiarlo anche ad un motore di regole come Drools. Mi piacerebbe usare Prolog per basi di conoscenza su cui poi agganciare regole.
Folli esperimenti...

guana ha detto...

ciao bell'articolo. Sono uno studente di ingegneria informatica. Sto cercando una chatterbot open sources o a pagamento( tanto paga l'univ) che serva da assistente sanitalrio alla asl. Quindi l'utente si collega e la chatbot assiste l'utente nell'inserimento dati e ricerca informazioni. Sto classificando le varie chatterbot in rete e motori tts quale mi consiglieresti di usare??? grazie mille !!!

Depa ha detto...

Ciao guana,
intanto grazie (è un po' che non trovo tempo per scrivere post, fa piacere che qualcuno legga ancora quelli vecchi, superando lo scoglio dell'inutilità dell'ultimo che ho sottomesso).

Qual'è il migliore? Nessuno: stiamo parlando di chatterbot, non sono un granchè come software :)

Comunque: io ho usato Program D, ma solo perchè in Java, per agganciarlo ad altre cosette, ma non è il massimo.

Per divertimento ne ho cercati altri che 'imparassero', ma sono deludenti, per lo più, sotto questo profilo.

Se rimaniamo all'idea del chatterbot come help in linea, direi che già Program D può andare, ma ce ne sono per quasi qualunque linguaggio tu preferisca.

Sarebbe meglio avere qualcosa di più evoluto, per un sito reale, per esempio un talking character (o talking head), ovvero un chatterbot che propone anche, tramite cartone animato, immagine 3D o filmato una rappresentazione grafica del tuo interlocutore.
Esempi:
Verbots (esiste anche un SDK Open Source collegato, ma, se proprio vuoi spendere, a quanto pare puoi farlo)

Potrebbe pure essere interessante giocare con XFACE, ma non l'ho provato

Il difficile è sincronizzare il movimento delle labbra e le parole, soprattutto se cerchi di farlo sull'italiano (e che dire del cercare di trasformare le parole in suono con un tts engine? troppo? non conosco nulla di Open Source a questo livello)

L'esempio più interessante che ho trovato riguardo a ciò che mi sembra di aver capito tu intenda fare, credo sia Anna, l'assistente del sito IKEA (interessante interazione, aiuto reale, pessima talking head, praticamente realizzata con poche immagini che non hanno la pretesa di seguire il testo e si ripetono in un loop, giusto per non lasciare lì la sola interfaccia caratteri)

Non so se questo possa aiutarti, ma fammi sapere come procede...

Daniele ha detto...

Ciao sono Guana, ti ringrazio della risposta molto gentile.Sinceramente tra esami e tirocinio all'università sto ancora in fase iniziale,di ricerca. Comunque cercando online mi sono reso conto che di open source c'è davvero poco, forse mi sbaglio ma cosi mi sembra. Ho visto in realtà che soltanto ALICE mette a disposizione tutto (o quasi) il software java (XML,AIML compreso). Quindi ci si potrebbe mettere mano e modificarselo a piacimento. Per quanto riguarda assistenti virtuali a pagamento ho visto che c'è un'azienda italiana chiamata H-CARE che sviluppa assistenti virtuali ad HOC per le aziende e privati, almeno cosi mi sembra. tu ne sai qualcosa. Sinceramente questa soluzione non so se sia la piu conveniente in termini di tempo. Certo per il momento l'idea sarebbe quella di prendere un po' il sistema ALICE individuare quelle che sono le parti interessanti dove mettere mano e iniziare ad operare verso questa strada. Java lo conosco abbastanza. Quindi magari, visto che hai lavorato (program D) mi potresti dare qualche dritta per iniziare a scrivere un po di codice.
Grazie mille a presto!!!!