Macchine intelligenti Dispensa 2: Dalla comprensione

Transcript

Macchine intelligenti Dispensa 2: Dalla comprensione
Macchine intelligenti
Dispensa 2: Dalla comprensione del linguaggio alla
rappresentazione della conoscenza
Introduzione
Nella dispensa precedente abbiamo supposto che per costruire una macchina intelligente sia ‘sufficiente’
trovare le regole con cui il nostro cervello elabora i simboli mentali, e trasformarle in un programma per
computer. Tuttavia, se ‘guardiamo’ dentro un cervello non riusciamo a trovare qualcosa di immediatamente
simile a un programma. Non abbiamo alcuna idea di come il cervello rappresenti internamente i suoi programmi,
e dunque non abbiamo modo di confrontare i programmi che potremmo scrivere noi con quelli eseguiti
(presumibilmente) dal cervello. Ma allora, ammesso che sia realmente possibile realizzarlo, come possiamo essere
sicuri che un computer sia effettivamente intelligente?
Il test di Turing
Una possibile soluzione al problema di decidere se un computer sia intelligente o meno potrebbe consistere
nel trovare una definizione precisa di ‘intelligenza’, una specie di elenco che dica: l’intelligenza è questo e
quest’altro. Una volta in possesso di questa definizione potremmo prendere il computer che ‘asserisce’ di essere
intelligente, e vedere se veramente presenta tutte le caratteristiche presenti nell’elenco. Sfortunatamente, tra gli
studiosi dell’intelligenza (psicologi, filosofi, neuroscienziati, antropologi etc.) non vi è molto consenso su tale
definizione. Ogni volta che se ne è proposta una, qualcuno è saltato sulla sedia dicendo: eh no, non avete tenuto
conto di questo aspetto! Oppure: avete dato troppa importanza a quest’altro aspetto! E così via.
Una via di uscita molto elegante da questa situazione di stallo è stata proposta, ancora una volta, da Alan
Turing che, tra i tanti meriti, può sicuramente esser fregiato del titolo di ‘padre dell’intelligenza artificiale’. In un
articolo del 1950 intitolato Macchine Calcolatrici e Intelligenza 1, il grande scienziato inglese inizia proprio con questa
frase: “Mi propongo di considerare la domanda: «Possono le macchine pensare?»”. Dopo avere espresso la sua
scarsa fiducia nei tentativi di definizione astratti, egli propone un metodo per rispondere al quesito che si basa su
una specie di gioco, il gioco dell’imitazione.
Si tratta di un gioco a cui partecipano tre persone tra loro estranee. Due di loro, di sesso opposto, sono i
candidati; il terzo (di cui è indifferente il sesso) è l’interrogante. L’interrogante viene chiuso in una stanza in
modo che non abbia alcun contatto, di nessun tipo, con gli altri. Lo scopo del gioco per l’interrogante è capire
quale dei due candidati sia l’uomo e quale la donna. A tale fine egli può solo fare delle domande ai candidati
mediante una telescrivente (oggi useremmo magari un computer collegato in rete). Scopo dei candidati invece è
ingannare l’interrogante. Simmetricamente le loro risposte saranno ‘telescritte’. Questo vincolo è ovviamente
dettato dalla necessità di evitare che l’aspetto, la voce, o persino la calligrafia dei candidati possano influenzare il
giudizio. Ora, dice Turing, immaginiamo di mettere al posto di uno dei due candidati una macchina ‘presunta
intelligente’. Se l’interrogante non è in grado di capire quale tra i suoi interlocutori sia un uomo e quale una
macchina, allora possiamo asserire tranquillamente che la macchina è intelligente.
È importante che le domande dell’interrogante durante il gioco riguardino vari argomenti e abbiano un
carattere generale. Infatti se chiedessimo “quanto fa 10 elevato alla 23 diviso 5” pensando che la macchina
risponderebbe pressoché subito mentre l’uomo (o la donna) impiegherebbe molto più tempo, potremmo essere
tratti in inganno da un trucco banale: basterebbe programmare il computer per aspettare alcuni minuti prima di
rispondere a domande sui numeri. Mentre se una macchina fosse veramente in grado di superare il test
rispondendo a domande sulla poesia, o sui suoi gusti gastronomici, o sull’amore, allora il successo ci dovrebbe far
ammetter che essa sia intelligente.
Il gioco dell’imitazione nella versione con il giocatore artificiale è divenuto noto come test di Turing, e
secondo il suoi ideatore sarebbe in grado di sostituire in tutto e per tutto la domanda astratta “Possono pensare
1
A. Turing, “Macchine Calcolatrici e Intelligenza”, in V. Somenzi e R. Cordeschi, La filosofia degli automi, Bollati Boringhieri 1996.
le macchine?”. Esso è cioè un test per l’intelligenza. A dire il vero questa convinzione è stata sottoposta a diverse
critiche. Ad esempio, quando nella metà degli anni ’60 una grande quantità di persone furono tratte in inganno da
un semplice programma – noto come Eliza – in grado di sostenere brevi e banali conversazioni in inglese, molti
ritennero che si fosse confutata l’adeguatezza del test. Tuttavia ancora oggi la maggior parte degli studiosi di
intelligenza artificiale è incline a credere cha il superamento del test di Turing, opportunamente condotto,
costituisca, se non una prova definitiva, almeno un forte indizio dell’intelligenza di un computer.
Il caso di Eliza il dottore e Parry il paranoico
Tra i molti programmi sviluppati nell’ambito dell’intelligenza artificiale, quello che ha goduto della massima
notorietà è senza dubbio Eliza, realizzato nel 1964 da Joseph Weizenbaum, a quei tempi giovane ricercatore del
MIT. Si trattava di un programma, piuttosto semplice, che simulava una limitata competenza linguistica in
inglese, ma che non aveva alcuna pretesa di comprendere realmente il linguaggio. Per semplificare il suo compito
Weizenbaum aveva pensato di circoscrivere notevolmente l’ambito di argomenti su cui di volta in volta il suo
programma era in grado di conversare:
Siccome ogni conversazione deve avere un argomento, il programma era organizzato su due piani: il primo
conteneva l’analizzatore del linguaggio, il secondo un copione. In questo modo, Eliza poteva essere messo in
grado di sostenere una conversazione su come si cucinano le uova, o sulla gestione di un conto corrente bancario
e così via. Ogni particolare copione permetteva a Eliza di assumere un ruolo diverso nella conversazione. 2 Il
primo copione che Weizenbaum diede ad Eliza fu quello per recitare la parte di uno psicoterapeuta di scuola
rogersiana. Gli psicoterapeuti di questa scuola durante una seduta cercano di intervenire il meno possibile e,
quando lo fanno, spesso si limitano a ripetere le affermazioni del paziente in forma di domanda. Si trattava
dunque di un comportamento linguistico abbastanza semplice da simulare.
Una volta terminato il programma, Weizenbaum lo installò su un computer del suo istituto, e iniziò a farlo
provare da varie persone, tra cui la sua stessa segretaria. Questa è la traduzione italiana di una conversazione tra
Eliza, o meglio Doctor, come fu soprannominato il programma nella sua veste da psicoterapeuta, e una ragazza:
Ragazza: Gli uomini sono tutti uguali
Eliza: In che senso
Ragazza: Trovano sempre il modo di tormentarci
Eliza: Può farmi un esempio
Ragazza: Beh è il mio ragazzo che mi ha fatto venire qui
Eliza. È il suo ragazzo che l’ha fatta venire
Ragazza: Dice che sono depressa
Eliza: Mi dispiace sentire che è depressa
Ragazza: È vero. Sono infelice
Eliza: Pensa che il fatto di venire qui l’aiuterà a non essere infelice3
Con grande stupore di Weizenbaum, Eliza ebbe un enorme successo. La gente che conversava con lui
credeva veramente di avere a che fare con uno psicoterapeuta e provava persino sollievo dopo le sedute! Uno
psichiatra, Kenneth Colby, scrisse persino che di lì a pochi anni programmi come Eliza sarebbero stati pronti per
l’uso clinico. Lo stesso Colby poco dopo realizzò un programma non dissimile da Eliza, che battezzò Parry. Parry
2
J. Weizenbaum, Il potere del computer e la ragione umana, Edizioni Gruppo Abele 1987, p. 22.
3
Ivi, p. 23.
simulava il comportamento linguistico di un paranoico. E anche lui ebbe un buon successo, tanto da riuscire ad
ingannare molti psichiatri che, dopo averlo intervistato via telescrivente, si dissero convinti di avere avuto a che
fare con un vero paranoico. Ad un certo punto fu organizzata persino una seduta di Parry da Eliza!
Sembrava dunque che questi due programmi avessero superato il test di Turing. In realtà né Eliza né
tantomeno Parry erano dotati della sia pur minima intelligenza. Si trattava in entrambi i casi di un insieme di
trucchi di programmazione (ad esempio Eliza nella maggior parte dei casi prende le affermazioni del paziente e le
rovescia in forma di domanda cambiando semplicemente i pronomi, cosa che in inglese, peraltro, è piuttosto
semplice) che facevano affidamento sulla credulità dei loro interlocutori. E a ben vedere nessuno dei due
programmi avrebbe mai superato il test nella forma in cui Turing lo aveva immaginato. Le persone che
credettero veramente nelle capacità di Eliza infatti, non prestavano attenzione a ciò che il programma diceva
loro, ma erano piuttosto intenti a sfogarsi. E inoltre l’ambito della conversazione era tanto ristretto da non essere
valido per il test. In ogni caso, se volete provare a fare due chiacchere con Eliza o Parry potete scaricarne una
versione al seguente indirizzo (utilissimo anche per il reperimento di molti altri programmi di intelligenza
artificiale): http://www.cs.cmu.edu/Groups/AI/areas/classics.
L’elaborazione del linguaggio naturale
Nell’affrontare il tema dei fondamenti teorici dell’intelligenza artificiale abbiamo detto che la capacità di
elaborare simboli è alla base del comportamento intelligente. L’esempio di elaborazione simbolica che in misura
maggiore caratterizza gli esseri umani è senza dubbio il linguaggio verbale.
In realtà la capacità di comunicare mediante simboli non è una prerogativa della nostra specie. Tuttavia
nessuna specie vivente conosciuta è dotata di un sistema di comunicazione simbolica così sviluppato e complesso
come il linguaggio verbale. Secondo molti studiosi, dobbiamo proprio alla comparsa del linguaggio, avvenuta tra
100 e 200 mila anni fa, quell’enorme salto evolutivo che ha differenziato l’homo sapiens, la nostra specie, da tutte le
altre specie di ominidi. Linguaggio e intelligenza, infatti, sono fenomeni strettamente interconnessi. Lo stesso test
di Turing assume che un eventuale computer intelligente deve sapere comunicare mediante il linguaggio naturale,
come facciamo noi esseri umani.
È dunque ovvio che sin dalle origini uno degli obiettivi principali dell’intelligenza artificiale sia stato lo
sviluppo di programmi in grado di produrre e comprendere discorsi in linguaggio naturale. A dire il vero, i primi
passi mossi in questa direzione furono motivati più da interessi pratici che da stimoli teorici. Infatti, alcuni fra i
primi finanziamenti che arrivarono ai progetti di ricerca nell’allora nascente campo dell’intelligenza artificiale
furono attratti dalla prospettiva di sviluppare dei sistemi di traduzione automatica tra varie lingue, la cui
applicazione commerciale era (ed è ) evidente. Tuttavia dopo un iniziale e ottimistico entusiasmo, il compito di
insegnare le lingue ai computer si dimostrò tanto complesso da far abbandonare il miraggio di un traduttore
automatico. Ma le ricerche sulla elaborazione del linguaggio naturale (natural language processing) proseguirono
egualmente, e ancora oggi costituiscono uno dei settori di punta dell’intelligenza artificiale, oltre ad essere
divenuti oggetto di una ulteriore disciplina che si chiama linguistica computazionale.
Le grammatiche di Chomsky e l’analisi automatica del linguaggio naturale
L’elaborazione automatica del linguaggio naturale prende le mosse dalla teoria linguistica di Noam Chomsky,
una delle personalità scientifiche più rilevanti del nostro secolo. In questa sede naturalmente non potremo
dilungarci su tutti i complicati aspetti della teoria chomskiana, che peraltro ha subito nel corso degli anni
numerose revisioni da parte del suo stesso artefice e dei suoi tanti seguaci.
In estrema sintesi possiamo dire che secondo Chomsky la capacità che ogni essere umano ha di capire e
produrre frasi e discorsi nella sua lingua è dovuta ad un insieme di conoscenze presenti nella sua mente:
definiamo questo insieme di conoscenze implicite competenza linguistica. È evidente che tale competenza è almeno
in parte inconsapevole: infatti la maggior parte delle persone sono in grado di produrre e capire le frasi corrette,
così come di individuare immediatamente gli usi scorretti della loro lingua, pur senza sapere il modo in cui questo
avviene. Inoltre, sostiene Chomsky, la maggior parte di questa competenza deve essere innata: non si
spiegherebbe altrimenti la velocità con cui un bambino in pochi anni riesca a parlare una lingua in modo
sostanzialmente corretto semplicemente imitando chi lo circonda.
La competenza linguistica, a sua volta, si suddivide in tre co mponenti: competenza fonologica, competenza
sintattica e competenza semantica. La prima riguarda la capacità di un parlante di produrre e capire i suoni della
lingua parlata; la seconda riguarda la capacità produrre o riconoscere frasi grammaticalmente corrette; la terza
riguarda la capacità di assegnare o di estrarre significato dalle frasi. Tutte queste capacità derivano dalla presenza
nelle mente di un insieme di regole ben precise, che sono simili alle regole di un sistema formale.
Per vari motivi, nella loro teoria della lingua Chomsky e i suoi seguaci hanno assegnato un ruolo prioritario
alla competenza sintattica. È grazie ad essa che ogni parlante è in grado di percepire immediatamente che
(a) «il gatto mangia il topo»
è una frase grammaticalmente corretta, mentre
(b) «il gatto topo il mangia»
non lo è. Come detto, questo riconoscimento è determinato dal fatto che nella formazione di una frase (o nel
processo simmetrico di comprensione di una frase) vengono seguite delle regole formali che complessivamente
costituiscono la grammatica di una lingua. Tali regole, che si articolano in diversi gruppi (o componenti),
vengono applicate (non necessariamente in modo sequenziale) per arrivare alla costruzione di frasi corrette, o alla
verifica di frasi pronunciate da altri parlanti. Il gruppo principale di regole (o componenti di base) della teoria
chomskiana determina la struttura generale di una frase e dà conto del fatto che ognuno è in grado di
raggruppare in modo intuitivo le parole che la compongono in gruppi funzionali detti sintagmi. Ad esempio,
chiunque tende a raggruppare le parole dell’esempio (a) in questo modo: «Il gatto» - « mangia il topo». Ma
vediamo, attraverso un esempio concreto, la forma che possono assumere queste regole.
F à SN – SV
SN à DET – N
SV à V – SN
DET à il
N à gatto, topo
V à mangia
Così espresse, le regole possono sembrare un po’ oscure. Ma acquistano subito il loro significato se le
interpretiamo in questo modo:
•
una frase (F – nel nostro eempio, ‘il gatto mangia il topo’) consiste di un sintagma nominale (SN – nel nostro
esempio ‘il gatto’) seguito da un sintagma verbale (SV, nel nostro esempio ‘mangia il topo’)
•
un sintagma nominale (SN, nel nostro esempio ‘il gatto’ oppure ‘il topo’) è costituito da un determinante
(DET, nel nostro esempio ‘il’) e da un nome (N, nel nostro esempio ‘gatto’ o ‘topo’)
•
un sintagma verbale (SV, nel nostro esempio ‘mangia il topo’) è costituito da un verbo (V – nel nostro
esempio ‘mangia’) seguito da un sintagma nominale (SN, nel nostro esempio ‘il topo’)
•
un determinante (DET) è un elemento del seguente insieme: (il)
•
un nome (N) è un elemento del seguente insieme: (gatto, topo)
•
un verbo (V) è un elemento del seguente insieme: (mangia)
Le regole vengono applicate per passi successivi a partire dalla prima (anche se alcune regole possono essere
applicate più volte se necessario) fino ad arrivare a una regola che a destra contenga un simbolo terminale, un
simbolo cioè che non può essere ulteriormente scomposto (nel nostro caso hanno questa forma le ultime tre
regole): in questo modo esse generano una frase completa. Possiamo verificare senza troppi sforzi che queste
regole ci consentono di generare la frase (a) e non la frase (b). Per rendercene conto usiamo la classica
rappresentazione ad albero con cui di norma i linguisti rappresentano la struttura sintagmatica di una frase.
Figura 1 - La rappresentazione ad albero della struttura sintagmatica di una frase
Per quanti tentativi facciate non sarete in grado di generare la frase «il gatto topo il mangia». D’altra parte
non potreste nemmeno generare una frase come «il gatto il topo mangia», che suona un po’ strana, ma è
comunque ammissibile in italiano. Per questo alle regole generative del componente di base nelle teoria di
Chomsky si affiancano altre regole che applicate alla frase standard la trasformano in diversi modi corretti (ad
esempio rendono la frase passiva: «Il topo è mangiato dal gatto»).
Appare evidente che un programma non avrebbe difficoltà ad usare regole come queste per generare frasi. E
simmetricamente un programma potrebbe, data una frase, analizzarla al fine di ricostruire la sua struttura e
verificare se essa è tra quelle ammesse dalla grammatica: questi programmi si chiamano parser, o analizzatori
sintattici, e sono alla base di tutti i sistemi di elaborazione del linguaggio naturale. Se dunque fosse possibile
costruire grammatiche generative-trasformazionali (così vengono chiamate) per una data lingua, avremmo un
metodo efficiente ed elegante per realizzare un programma in grado di elaborare almeno la sintassi di quella
lingua. Tuttavia il compito di costruire queste grammatiche per le lingua storico naturale si è rivelato assai più
improbo di quanto Chomsky non ritenesse. Attualmente esistono porzioni di grammatica abbastanza complete
per varie lingue (soprattutto l’inglese), ma si è ben lontani dall’obiettivo di una formalizzazione completa.
Il problema del significato
Abbiamo visto che, almeno in teoria, è possibile realizzare un programma in grado di generare o di analizzare
le frasi grammaticalmente corrette di una lingua. Ma come forse avrete capito, tale programma di fronte a una
frase come «Il topo mangia il gatto» non farebbe una piega. Infatti questa è un frase grammaticalmente corretta.
Tuttavia, a meno che non compaia in una favola o in un racconto fantastico, chiunque la giudicherebbe priva di
senso.
Per fare in modo che un computer capisca veramente il linguaggio naturale, dunque, dobbiamo essere in
grado di specificare anche il significato delle parole: la competenza semantica. A questo punto però, i problemi
teorici si fanno assai più ardui. In primo luogo: che cosa è il significato? Su questo problema i filosofi hanno
lungamente discusso, almeno dai tempi di Aristotele. E ancora oggi nessuno ha proposto una teoria
soddisfacente di cosa sia il significato. Vogliamo far notare, per inciso, che il problema del significato è un po’ il
convitato di pietra che si nasconde nell’intero edificio concettuale dell’intelligenza artificiale. Infatti, quando
abbiamo detto che per la teoria rappresentazionale della mente il pensiero corrisponde alla manipolazione di
simboli secondo regole, non ci siamo preoccupati di dire che cosa e in che modo questi simboli significhino.
Anzi, più volte si è ripetuto che per quanto attiene alle computazioni, ciò che conta è solo la forma dei simboli e
delle configurazioni di simboli, ovvero la sintassi. Ma allora come mai quando parliamo sentiamo di esprimere
qualche cosa che va al di là della semplice sequenza di suoni che esce dalla nostra bocca? E come è possibile che
nella maggior parte dei casi le nostre frasi si riferiscano a oggetti e a situazioni del mondo, e che gli altri possano
ad esempio verificare se ciò che diciamo corrisponde alla realtà?
Al problema filosofico di specificare che cosa sia, in ultima analisi, il significato o i concetti che abbiamo
nella mente sono state date diverse soluzioni, su cui non possiamo soffermarci. Tuttavia, possiamo provare a
delineare, almeno nei suoi aspetti generali, la strategia che è stata seguita nel campo dell’intelligenza artificiale per
dare una semantica ai computer.
Cominciamo con il significato delle parole, o significato lessicale: esso può essere descritto mediante la
scomposizione in una serie di componenti più semplici, in questo modo:
gatto à oggetto+fisico+animato…
I puntini stanno ad indicare che la descrizione dovrebbe proseguire per molti (quanti?) componenti prima di
esaurire il significato della parola. Naturalmente tale descrizione dovrebbe tenere conto dei casi di ambiguità, di
sinonimia etc. Ma è possibile immaginare dei sistemi per farlo.
Per descrivere il significato delle frasi e le relazioni logiche tra più parole, poi, si è fatto ricorso alla logica. La
logica studia il modo in cui viene condotto il ragionamento valido, ovvero il modo in cui a partire da premesse
valide possono essere tratte conclusioni valide. Per fare questo, a partire dalla fine del secolo scorso i logici
hanno pensato di costruire dei linguaggi artificiali formalizzati (ancora!) per evitare di incorrere nei rischi di
ambiguità del linguaggio naturale. L’idea in sostanza è quella di individuare la forma logica sottostante alle frasi
del linguaggio naturale (in cui essa viene in un certo senso mascherata) in un linguaggio rigoroso e soprattutto
governato da regole precise. Per formalizzare le asserzioni (o enunciati) del linguaggio naturale, si è pensato di
operare in questo modo: prendiamo la frase «il gatto è nero». Essa esprime una proprietà relativa ad un oggetto
(animato!): l’oggetto è «gatto» e la proprietà è «essere nero». Per mettere in evidenza questa struttura potremmo
riscrivere l’enunciato in questo modo:
(a) essere nero ( gatto )
L’enunciato (a) dice o predica che la proprietà «essere nero» si applica ad un oggetto e che questo oggetto è un
«gatto». La parte di (a) che specifica la proprietà viene chiamata predicato; la parte che indica a chi si applica la
proprietà si chiama argomento. Una volta fatta questa traduzione della frase italiana sotto forma di predicato e
argomento, ci accorgiamo che il predicato «essere nero» si può applicare non solo ai gatti, ma anche a tante altre
cose, come i vestiti, l’inchiostro, i capelli. Possiamo dunque generalizzare la forma (a) scrivendo in questo modo:
(b) essere nero (x)
D’altra parte la forma di questo predicato non vale solo per la proprietà «essere nero»: anche la proprietà
«essere affamato» ha la medesima forma. Possiamo dunque generalizzare la forma del predicato riscrivendo (b)
come:
(c) p (x)
La formula (c) esprima la forma generale di tutti i predicati che si applicano ad un solo argomento. La
traduzione delle espressioni del linguaggio naturale in formule di un linguaggio formale potrebbe proseguire
prendendo in considerazione asserzioni come «il gatto mangia il topo». In questo caso l’enunciato esprime una
relazione tra due oggetti: la relazione «mangiare» che un soggetto (il gatto) ha con un oggetto (il topo). Siamo
dunque in presenza di un predicato a due argomenti:
(d) mangiare ( gatto , topo )
Anche per questi predicati valgono le considerazioni sulla generalizzazione fatte sopra. Naturalmente la
formalizzazione dei singoli enunciati non è sufficiente per dare una forma logica al linguaggio. Occorre anche
formalizzare quelle parole che servono a collegare tra loro enunciati semplici per formarne di complessi come «il
gatto è nero e mangia il topo». Nel linguaggio comune queste tipo di parole sono conosciute come congiunzioni:
‘e’, ‘oppure’, “se … allora”. Se ci pensiamo le congiunzioni possono essere considerate una sorta di operatori che
permettono di connetter enunciati. In logica dunque le particelle del linguaggio comune sono state trasformate in
operatori o connettivi: ovviamente per fare questo è stato necessario fissare il loro significato. Gli operatori logici
fondamentali sono ‘AND’, che corrisponde alla congiunzione ‘e’; ‘OR’, che corrisponde alla congiunzione ‘o’
quando viene usata in senso non esclusivo (quando cioè si intende sostenere o una cosa o l’altra o tutte e due);
‘NOT’, che cattura il senso dell’avverbio di negazione ‘non’. Alla luce di questo ulteriore passaggio siamo in
grado di dare una traduzione logica della frase «il gatto è nero e mangia il topo», che diverrebbe:
(e) essere nero (gatto) AND mangiare ( gatto , topo )
Oltre a escogitare un modo per formalizzare la struttura logica degli enunciati, i logici hanno anche
dimostrato che – una volta accettate certe assunzioni abbastanza naturali sul funzionamento dei connettivi utilizzati
per costruire enunciati complessi a partire da enunciati più semplici - la verità o falsità di enunciati complessi può
essere valutata in modo meccanico a partire dalla verità o falsità degli enunciati che li compongono.
La formalizzazione logica, unita a un dizionario di termini che dia significato ai predicati e agli argomenti
degli enunciati semplici, dunque, può essere usata per analizzare il significato e la verità o falsità di frasi del
linguaggio naturale. Per farlo, è però necessario ‘riscrivere’ queste frasi attraverso la corrispondente forma logica.
I modi in cui questa operazione viene fatta sono molti, e non possiamo soffermarci su di essi. In generale
possiamo dire che il procedimento si articola in varie fasi: la prima consiste nel fare l’analisi grammaticale di una
frase e nel riportarla alla sua forma standard. Questa forma standard poi viene tradotta in forma di predicati e
argomenti. Infine i vari predicati e argomenti vengono ridotti in componenti di base, facendo ricorso a una
specie di dizionario, in modo tale da rispettare la forma logica. La riduzione in componenti verifica anche che
l’associazione di un argomento non infranga dei vincoli, espressi anche essi in forma logica. Essi ad esempio
specificano che i possibili soggetti di «mangiare» sono esseri animati: un tavolo non può mangiare alcunché!
I micromondi e SHRDLU
La rappresentazione del significato basata sulla analisi logica delle frasi e sulla scomposizione in componenti
dei termini lessicali, che pure comporta delle notevoli difficoltà, si è dimostrata ben presto insufficiente al fine di
dotare i computer della capacità di comprendere veramente il significato del linguaggio. I problemi di questo
modo di procedere sono molteplici. In primo luogo, come scegliere i componenti minimi del significato dei
termini? Su questo aspetto le proposte sono state molteplici, ma nessuna si è rivelata soddisfacente.
Ma il problema più rilevante è un’altro. Prendiamo ad esempio la frase
(a) Fabio era stato invitato al compleanno di Ugo, ma quando agitò il suo salvadanaio non sentì nessun
rumore
Per capire il senso di (a), che ogni parlante italiano è in grado di interpretare senza troppi sforzi, non basta
conoscere il significato delle singole parole e ricostruire la sua forma logica (ammesso che sia possibile). Infatti
essa sottintende una mole notevole di informazioni che non sono espresse esplicitamente dalle singole parole. Ad
esempio, occorre sapere che di norma quando si è invitati ad una festa di compleanno si porta un regalo al
festeggiato; che per comperare regali occorre del denaro; che alcune persone tengono i loro risparmi nei
salvadanai; e che il denaro dentro il salvadanaio, in genere, fa rumore se viene scosso. Insomma, per capire il
linguaggio dobbiamo anche essere in grado di collocare le frasi in un contesto di riferimento, dal quale possiamo
estrapolare tutte le informazioni implicite nella frase.
Generalizzando, potremmo dire che un agente intelligente (naturale o artificiale che sia) deve possedere una
dettagliata conoscenza del mondo nel quale vive per essere in grado di parlare, ragionare e, a maggior ragione, agire su
di esso. A questo punto si pongono due questioni: quanto dettagliata deve essere tale conoscenza? E in che
modo possiamo rappresentarla in forma simbolica?
Intorno al 1970 una serie di ricercatori pensò che per rispondere a queste domande la strada migliore fosse
quella di circoscrivere e semplificare il problema generale costruendo dei programmi che avessero una
conoscenza perfetta di mondi molto piccoli e semplici, o micromondi:
Un micromondo è un dominio artificiale limitato, i cui possibili oggetti, le possibili proprietà e i
possibili eventi sono definiti in anticipo in modo ristretto ed esplicito. Gli scacchi, per esempio, sono un
micromondo: ci sono solo un numero limitato di pezzi e mosse lecite, e tutto è chiaramente definito
dalle regole. A differenza di un vero condottiero medievale, uno stratega degli scacchi non deve mai
preoccuparsi di epidemie, scomuniche, malcontento fra le file dei suoi guerrieri o della comparsa di
cosacchi all’orizzonte: perché nulla può accadere in un micromondo che non sia permesso
espressamente nella sua definizione. 4
L’idea era quella di eliminare il problema del livello di dettaglio delle conoscenze (il mondo reale è veramente
complicato, e le conoscenze che perfino un bambino di soli quattro o cinque anni possiede sono sterminate) per
concentrarsi sul modo in cui tali conoscenze sono rappresentate e utilizzate. In un secondo momento si sarebbe
passati ad estendere la conoscenza per renderla abbastanza vasta e complessa da dare conto del mondo reale.
Il più famoso tra i programmi che abitavano nei micromondi è SHRDLU realizzato da Terry Winograd
all’inizio degli anni 70. Il mondo di SHRDLU è noto come mondo dei blocchi: si trattava di un ambiente
costituito da una tavola su cui erano appoggiati una serie di blocchi, piramidi e scatole colorati.
Figura 2 - Due raffigurazioni del mondo dei blocchi di SHRDLU
Naturalmente la conoscenza che il programma aveva di questo mondo era puramente simbolica: insomma il
mondo di SHRDLU era un ambiente virtuale. Tuttavia per il programma esso era un mondo a tutti gli effetti,
tanto che SHRDLU era in grado non solo di parlare correntemente in inglese su di esso, ma anche di agire
mediante un braccio virtuale. In sostanza SHRDLU avrebbe potuto senza problemi controllare un robot che
manipolava elementi reali su un tavolo 5.
Grazie alla sua profonda ‘conoscenza del mondo’ SHRDLU era in grado sostenere lunghe conversazioni in
inglese, eseguire i compiti che gli venivano indicati (naturalmente in modo virtuale) e perfino motivare le sue
azioni. Quello che segue è un breve estratto da una delle sue conversazioni, a cui abbiamo aggiunto una
traduzione in italiano:
Persona:
how many things are on top of green cubes?
[quante cose ci sono sopra i cubi verdi?]
SHRDLU:
i'm not sure what you mean by "on top of "in the phrase "on top of green cubes" . Do
you mean:
1 - directly on the surface
2 - anwhere on top of?
[non sono sicuro su cosa intendi con ‘sopra’ nell’espressione ‘sopra i cubi verdi’. Intendi
1- direttamente sulla superficie
2- ovunque sopra ai cubi?]
4
J. Haugeland, Intelligenza Artificiale, Bollati Boringhieri 1988, p. 173.
Naturalmente la costruzione del robot avrebbe comportato molti altri problemi sia a livello software (ad esempio avrebbe dovuto essere
dotato di un programma per la visione) sia a livello hardware.
5
Persona:
SHRDLU:
2
three of them
[ci sono tre cose]
Persona:
had you touched any pyramid before you put the green one on the little cube?
[avevi toccato qualche piramide prima di mettere quella verde sul cubo piccolo?]
SHRDLU:
yes, the green one
[si quella verde]
Persona:
when did you pick it up?
[quando l’hai presa?]
SHRDLU:
while i was stacking up the red cube, a large red block and a large green cube
[mentre stavo mettendo l’uno sopra l’altro il cubo rosso, un blocco rosso grande e un cubo verde grande]
Persona:
why?
[perché?]
SHRDLU:
to get rid of it
[per toglierlo di mezzo]
Persona:
why did you do that?
[perché l’hai fatto?]
SHRDLU:
to clean off the red cube
[per liberare il cubo rosso]
Persona:
why did you clear off that cube?
[perché hai liberato il cubo rosso]
SHRDLU:
to put it on a large green cube
[per metterlo su un cubo verde grande]
Persona:
why did you do that?
[perché l’hai fatto?]
SHRDLU:
to stack up the red cube, a large red block and a large green cube
[per mettere uno sopra l’altro il cubo rosso, un blocco rosso grande e un cubo verde grande]
Persona:
why did you do that?
[perché l’hai fatto?]
SHRDLU:
because you asked me to
[perché me lo hai chiesto]
Come potete vedere SHRDLU è in grado di considerare retrospettivamente ciò che ha fatto, e riesce anche a
trovare delle motivazioni per quelle azioni che non gli sono state richieste esplicitamente ma che ha dovuto
eseguire al fine di obbedire ad un comando. In altre conversazioni il programma mostra anche la capacità di
imparare il significato di parole nuove che non sono presenti nel suo vocabolario, posto che esse vengano
definite dal suo interlocutore mediante termini conosciuti.
Un programma come SHRDLU costituisce senza dubbio un notevole passo in avanti rispetto ad Eliza o
Parry. Tuttavia non si può in alcun modo dire né che SHRDLU capisca veramente ciò che dice, né che la sua
organizzazione interna sia in qualche modo una plausibile spiegazione del comportamento intelligente umano.
Ad esempio SHRDLU ricorda tutto ciò che accade nel suo mondo, mentre è evidente che un essere umano
seleziona le cose da immagazzinare in memoria in base a ciò che ritiene importante. Il fatto è che il mondo dei
blocchi è troppo povero e soprattutto è del tutto prevedibile. SHRDLU non si deve aspettare sorprese, mentre
qualsiasi creatura vivente (più o meno intelligente) ha un controllo limitato sul suo ambiente. E con tutta
probabilità è proprio la necessità di migliorare la capacità di prevedere il comportamento di un ambiente ostile
che ha determinato nel corso dei millenni l’emergenza di comportamenti intelligenti nella nostra specie.
La rappresentazione della conoscenza
Gli evidenti limiti di SHRDLU (e di altri suoi simili) resero ben presto evidente che la scorciatoia dei
micromondi era un vicolo cieco. Se veramente si intendeva sviluppare programmi intelligenti, era necessario
affrontare in modo diretto il problema di fornire alle macchine digitali una conoscenza esaustiva del mondo reale,
e possibilmente anche una conoscenza di se stesse.
Proprio su questi temi, a partire dagli anni 70, si è concentrata l’attenzione di moltissimi ricercatori e studiosi
di intelligenza artificiale. Ne sono derivati una grande mole di teorie relative al modo in cui la nostra mente
rappresenta e organizza le informazioni sul mondo, e una altrettanto grande (se non più grande) quantità di
formalismi e linguaggi specializzati nella rappresentazione della conoscenza (knowledge representation).
Le reti semantiche
Uno dei formalismi per la rappresentazione delle conoscenze più diffusi nella IA sono le cosiddette reti
semantiche. La prima formulazione del concetto di rete semantica si deve a Ross Quillian, che lo elaborò nel 1968
per costruire un modello dell’organizzazione dei significati delle parole nella memoria e della capacità di associare
concetti. Successivamente molti altri studiosi hanno proposto evoluzioni e potenziamenti del modello originale,
senza però distaccarsi delle primitive intuizioni di Quillian.
Ma che cosa è una rete semantica? Secondo Quillian i concetti (o significati delle parole, che per quanto ci
concerne possono essere considerati la stessa cosa) nella nostra mente sono organizzati in una struttura
reticolare. Solo che in questa rete esistono due tipi di nodi: i nodi tipo e i nodi occorrenza. I nodi tipo corrispondono
ai significati delle singole parole. Da ogni nodo tipo si dipartono una serie di collegamenti o archi che terminano
nei nodi occorrenza. Questi ultimi hanno la funzione di descrivere il significato della parola in questione. Tale
descrizione, come avviene nei dizionari, si basa sull’uso di altre parole che sono il contenuto dei nodi occorrenza.
A sua volta ciascun nodo occorrenza è collegato mediante un arco al nodo tipo che ne specifica il significato.
Insomma nella rete ogni parola deriva il suo significato da un certo numero di altre parole.
Figura 3 - La rete semantica di Quillian per la parola ‘food’
Inoltre gli archi che collegano i nodi specificano diversi tipi di relazione: ci sono archi che indicano relazioni
di sottoclasse, o di appartenenza ad un genere: ad esempio l’arco che da «cibo» porta a «cosa». Gli archi di questo
tipo sono successivamente divenuti noti come archi ‘IS A’, ovvero archi ‘è un(a)…’. Vi sono poi archi che
indicano una relazione di congiunzione tra due componenti del significato di una parola. Archi che invece
indicano una disgiunzione tra più significati e così via.
Appoggiandosi ad una rete semantica (opportunamente tradotta in un linguaggio informatico) un
programma è in grado non solo di risolvere il significato delle espressioni lessicali, ma anche rispondere a
domande come: «è vero che il cibo è una cosa che si mangia?». Infatti nella rete della figura esiste un percorso
che permette di dedurre proprio questa conclusione.
I frame di Minsky
Le reti semantiche come quelle cui abbiamo accennato nel paragrafo precedente hanno due limiti. In primo
luogo ogni singolo concetto è considerato come un elemento unitario. Sebbene gli archi che collegano un nodo
ad un altro possano essere considerati una rappresentazione articolata del significato di un termine, questa
articolazione sembra comunque troppo limitata per rendere conto di tutte le varie componenti di un concetto. In
secondo luogo la specificazione del significato di un concetto è estremamente rigida: ogni concetto infatti viene
descritto mediante una serie di componenti obbligatori, un po’ come avviene nelle definizioni di un dizionario.
Questo modo di rappresentare la conoscenza è inadeguato per rendere conto del modo assai rapido in cui un
essere umano è in grado di accedere alle conoscenze immagazzinate nella sua memoria e di utilizzarle per
ragionare, comprendere un discorso in lingua naturale o riconoscere gli oggetti e le situazioni che gli si
presentano. Per capire che cosa intendiamo dire, prendiamo in considerazione la seguente frase:
(a) Fabio entrò in cucina e si mise a sedere
Ognuno di noi è in grado capire perfettamente il suo significato. A nessuno verrebbe in mente di chiedere
con aria stupefatta «si mise a sedere dove?». Tuttavia se analizzassimo il significato stretto di ogni singola parola
della frase, non troveremmo da nessuna parte il concetto di «sedia». Questo significa che nella nostra memoria il
concetto di cucina deve avare una struttura assai più ricca di quanto non preveda un dizionario, e che questa
struttura deve comprendere tra le altre cose una sorta di descrizione di una cucina standard in cui si dica (o si
mostri) che in una cucina si trovano di norma una tavolo e delle sedie.
D’altra parte, se qualcuno ci dicesse:
(b) Fabio era stanchissimo ma quando entrò in cucina non trovò nulla su cui sedere
non troveremmo nulla da obiettare. Evidentemente il fatto che il concetto di cucina preveda che in una
cucina ci siano di norma un tavolo e delle sedie non deve essere vincolante ai fini della comprensione. Siamo
disposti a concedere che in una cucina sedie e tavoli possano anche mancare. Un fenomeno simile avviene
quando ascoltiamo una frase come
(d) «Lo struzzo è un uccello che non può volare».
La proprietà di essere un «essere animato che vola» sembra essere parte integrante del concetto di uccello.
Ma il fatto che (d) non sia giudicata una contraddizione (sebbene ci stupisca) mostra chiaramente che la struttura
del concetto di uccello deve essere piuttosto flessibile, fino al punto da concedere che possa esistere un uccello
che non può volare.
Per rendere conto di queste caratteristiche della nostra memoria concettuale, e per riprodurla su un
computer, Marvin Minsky, uno dei pionieri dell’intelligenza artificiale, ha elaborato la nozione di frame (che in
inglese significa struttura o cornice). Si tratta di una nozione molto simile a quella di stereotipo. Un frame infatti è
una struttura che raccoglie e organizza secondo vari livelli di obbligatorietà tutte le informazioni che sembrano
comporre un determinato concetto. Alcune informazioni sono considerate necessarie, altre probabili e altre solo
opzionali. Ad esempio il frame per il concetto di cucina potrebbe avere questa struttura:
Cucina
Sottoclasse di: stanza
Funzioni (sempre): preparare cibo
Funzioni (probabile): consumare cibo
Ha come costituenti (sempre): pareti, soffitto, pavimento
Contiene (sempre): macchina a gas o elettrica oppure camino
Posizione (quasi sempre): a ridosso di parete
Contiene (quasi sempre): frigorifero, lavandino
Posizione (quasi sempre): a ridosso di parete
Contiene (probabilmente): tavolo
Posizione (probabile): centro stanza oppure a ridosso di parete
Contiene (probabilmente): sedie
Posizione (probabile): intorno a tavolo
Etc.
In realtà questo è un abbozzo estremamente grossolano di quello che dovrebbe essere un vero frame, che
dovrebbe avere un numero assai maggiori di informazioni e che soprattutto dovrebbe specificare in modo molto
più rigoroso proprietà e relazioni per essere utilizzato da un computer (e da un cervello, se esso lavora in modo
non troppo dissimile da un computer). Comunque, ci permette di capire quale dovrebbe essere la sua struttura.
In primo luogo vediamo che le componenti del frame sono articolate in varie tipologie, che corrispondono
alle diverse proprietà dell’oggetto reale cucina. In secondo luogo, possiamo notare come alcune componenti della
rappresentazione siano qualificate come obbligatorie, altre come probabili e altre ancora come opzionali. Tutte le
componenti non obbligatorie sono presenti nel frame per default: sono cioè considerate parte del prototipo di
cucina fina a prova contraria.
Quando leggiamo in un testo o ascoltiamo in un discorso la parola «cucina», il frame viene richiamato dalla
memoria nella sua forma standard. Se tuttavia procedendo nella lettura o nell’ascolto si riceve l’informazione che
nella tale cucina non sono presenti sedie, allora la componente relativa viene cancellata. Questo non produce
alcuna contraddizione, poiché il fatto di contenere sedie era una informazione per default e dunque rinegoziabile.
Viceversa se si apprende che nella presunta cucina non vi sono né una macchina a gas né un camino, ma un letto,
un comodino e un armadio, il frame cucina risulterebbe in contraddizione con le nuove informazioni e dunque
concluderemmo che quella stanza non era una cucina ma una stanza da letto.
Un ultimo aspetto importante dei frame su cui vale pena soffermare l’attenzione è che essi sono
interconnessi tra loro in un modo molto ricco e articolato. Infatti, ogni componente di ciascun frame è collegato
al frame che ne descrive la struttura: il componente ‘sedia’ del frame ‘cucina’ dunque è collegato con il frame
‘sedia’, così come il componente ‘stanza’ è collegato con il frame ‘stanza’. I frame insomma costituiscono una rete
di concetti6. I collegamenti tra frame non sono casuali ma organizzano lo spazio concettuale in base a precise
relazioni: alcune di esse sono più marcate (ad esempio le relazioni gerarchiche con i concetti iponimi e
iperonimi), altre meno (ad esempio le relazioni associative o analogiche). In questo modo i frame possono essere
usati per condurre sia i classici ragionamenti di tipo deduttivo, sia forme di ragionamento più complesse come
l’induzione o l’analogia.
Gli script di Schank
Una nozione (e un formalismo) simile a quella di frame è la nozione di script o copione, elaborata da Roger
Schank (un'altro eminente studioso nel campo dell’intelligenza artificiale) e dal suo collaboratore Abelson. Come
il nome scelto per queste strutture lascia immaginare, a differenza dei frame (in cui si rappresentano oggetti o
stati di cose), gli script servono a rappresentare eventi o sequenze di eventi tipici, come ‘andare al ristorante’,
‘andare dal dottore’ e così via.
Essi infatti furono sviluppati da Schank per consentire ad un programma di comprendere o parafrasare delle
storie o delle brevi narrazioni. Prendiamo ad esempio la seguente storiella:
(a) Fabio andò in un ristorante. Ordinò alla cameriera una bistecca ai ferri. Pagò il conto e se ne andò.
Ora, se dopo aver letto questa storia, qualcuno ci chiedesse «che cosa ha mangiato Fabio?» senza alcuno
sforzo risponderemmo «una bistecca ai ferri». Tuttavia nessuna delle frasi che compone (a) dice esplicitamente che
Fabio ha effettivamente mangiato la bistecca. Evidentemente la nostra risposta è stata inferita da un insieme di
conoscenze di contesto che ci dicono che di norma quando si va al ristorante e si ordina qualcosa poi lo si
mangia. Ebbene, secondo Schank queste conoscenze di contesto sono organizzate proprio sotto forma di script:
… uno script è un insieme di scanalature pronte a ricevere certi eventi e non altri. Lo script usato per
comprendere qualcosa ci aiuta a sapere che cosa aspettarci. Uno script dice che cosa probabilmente
seguirà in una catena di eventi stereotipati. Non solo, ci permette di capire la rilevanza di ciò che di fatto
succede subito dopo: garantisce il collegamento fra gli eventi. 7
Come vediamo la nozione di script rassomiglia molto a quella di frame, con la differenza che pone l’enfasi
sul succedersi di eventi piuttosto che sulle proprietà di oggetti. Uno script infatti è costituito da una serie di
scene, che specificano con estremo dettaglio la sequenza (o la concorrenza ) di eventi che sono pertinenti per
ogni scena. Inoltre lo script specifica anche i luoghi, i tempi, i personaggi e gli oggetti previsti dalla storia e indica
le condizioni (o motivazioni) di inizio e i risultati finali (ovvero gli obiettivi conseguiti) della storia. Alcuni script
Nel suo libro La società della mente (Adelphi 1989), Marvin Minsky ha ipotizzato che una rete di questo genere costituisca la struttura della
memoria umana.
6
7
R. C. Schank, Il computer cognitivo, Giunti 1989, p. 123.
possono essere divisi in diversi ‘sotto-script’ (denominati da Schank ‘binari’) che si adattano a diverse possibili
versioni della stessa storia. Ad esempio il frame ‘ristorante’ si articola in diversi binari in base al tipo di ristorante:
c’è così un binario ‘fast food’, uno ‘trattoria rustica’, uno ‘ristorante di lusso’ e così via. Questo è un esempio
estremamente semplificato di una parte dello script ‘ristorante’ 8:
Script:
Binario:
Oggetti:
Ristorante
Trattoria
Tavoli
Menu
Cibo
Conto
Denaro
Personaggi: Cliente
Cameriera
Cuoco
Condizioni di entrata:
Il cliente ha fame
Il cliente ha denaro
Risultati:
Il cliente ha meno denaro
Il proprietario ha più denaro
Il cliente non ha fame
Il cliente è soddisfatto
Scena 1: Ingresso
Entrare nel ristorante
Guardare i tavoli
Decidere dove sedersi
Andare al tavolo
Mettersi a sedere
Scena 2: Ordinazione
(menu sul tavolo)
Prendere il menu
(la cameriera porta il menu)
(chiedere il menu)
Chiamare la cameriera
La cameriera arriva al tavolo
Chiedere il menu
La cameriera dà il menu
Leggere il menu
Decidere (il cibo scelto)
Chiamare la cameriera
La cameriera arriva
Dire alla cameriera «Voglio (il cibo scelto)»
Nella seconda scena possiamo notare come in alcuni casi possano darsi diverse possibilità, che implicano a
loro volta diverse sequenze di eventi. Naturalmente uno script per essere utilizzato da un programma andrebbe
scritto mediante un opportuno linguaggio, e soprattutto dovrebbe essere assai più dettagliato di quanto non sia il
nostro esempio. Uno dei programmi basati sul formalismo degli script è SAM (Script Applier Mechanism),
sviluppato dallo stesso Schank e da un gruppo di suoi collaboratori. Esso era in grado di leggere dei brevi
racconti, compresi resoconti giornalistici, e di farne un sommario in inglese e in spagnolo. Inoltre poteva
rispondere in modo incredibilmente sensato a domande relative ai fatti narrati nelle storie.
8
Tratto con qualche rielaborazione da R. C. Schank, op. cit., p. 128-129.
Successivamente al lavoro sugli script, Schank ha elaborato un’altra serie di formalismi il cui fine era di
consentire ad un programma di individuare il tema di una storia anche senza possedere nessuna sceneggiatura
predefinita. Questi formalismi si basano sulle nozioni di piano e di scopo e sono state applicate nella creazione di
PAM (Plan Applier Mechanism). Questo programma, analizzando le frasi di un racconto qualsiasi, era in grado di
individuare le motivazioni dei vari personaggi e di prefigurare i possibili piani di azione che tali personaggi
potevano cercare di metter in atto per raggiungere i loro obiettivi. Anche PAM si è dimostrato
sorprendentemente efficiente ed ha rappresentato il modello di riferimento per numerosi programmi di IA
sviluppati nel corso del passato decennio.