Sei sulla pagina 1di 16

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 Intelligenza1, 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.

1
A. Turing, “Macchine Calcolatrici e Intelligenza”, in V. Somenzi e R. Cordeschi, La filosofia degli automi,
Bollati Boringhieri 1996.
È 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 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


2
J. Weizenbaum, Il potere del computer e la ragione umana, Edizioni Gruppo Abele 1987, p. 22.
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 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

3
Ivi, p. 23.
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 componenti: 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.

4
J. Haugeland, Intelligenza Artificiale, Bollati Boringhieri 1988, p. 173.
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 tavolo5.

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?]
Persona: 2
SHRDLU: 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?]

5
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.
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

6
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.
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 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: Ristorante
Binario: Trattoria
Oggetti: Tavoli
Menu
Cibo
Conto
Denaro
7
R. C. Schank, Il computer cognitivo, Giunti 1989, p. 123.

8
Tratto con qualche rielaborazione da R. C. Schank, op. cit., p. 128-129.
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) (la cameriera porta il menu) (chiedere il menu)
Prendere 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.

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.