Corso 2 - Introduzione all'intelligenza artificiale

  Learning
  Autori
  Scrivi
Indice
  Altre sezioni
Enciclopedia
Educazione al multimediale
Download
Indice tematico
Modulo 1: L'intelligenza artificiale: i fondamenti teorici
Modulo 2: Alcuni settori dell'intelligenza artificiale
Modulo 3: I limiti e le applicazioni pratiche dell'intelligenza artificiale
Modulo 4: Un nuovo paradigma: reti neurali e vita artificiale

Introduzione all'intelligenza artificiale
di Fabio Ciotti

 

Seconda dispensa

Alcuni settori dell'intelligenza artificiale.
Dalla comprensione del linguaggio alla rappresentazione della conoscenza

Sommario degli argomenti

  • Introduzione (1)

  • Il test di Turing (2)

  • Il caso di Eliza il dottore e Parry il paranoico (3)

  • L'elaborazione del linguaggio naturale (4)

  • Le grammatiche di Chomsky e l'analisi automatica del linguaggio naturale (5)

  • Il problema del significato (6)

  • I micromondi e SHRDLU (7)

  • La rappresentazione della conoscenza (8)

 
Video

Fate clik qui sopra per collegarvi al video di questa dispensa; potete anche semplicemente ascoltare la lezione mentre scorrete il testo, riducendo ad icona la finestra del player.

Se avete problemi a visualizzare il video controllate di aver installato il player sul vostro computer.

Il testo di questa dispensa è disponibile in formato RTF (Rich Text Format) nell'area Download del sito; potrete scaricarlo per leggerlo con calma o per stamparlo.

 

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

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 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. 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 infelice?

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

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 .

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?]
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 concetti . 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."

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' :

 
Script: Ristorante
Binario: Trattoria
Oggetti: 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.

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.