Sistemi Esperti

Scopo di questo articolo, estratto dalla mia tesi di laura, è la definizione di sistema esperto, l’introduzione della terminologia e la presentazione delle componententi fondamentali, affrontando le principali problematiche e i vari aspetti teorici riguardanti la progettazione nel tentativo di dare una visione completa dell’argomento.

Definizione di Sistema Esperto

Una delle aree di maggior sviluppo in Intelligenza Artificiale è lo studio e la progettazione di Sistemi Esperti detti anche Expert Systems o Knowledge-Based Systems. La loro caratteristica fondamentale è la capacità di eseguire compiti, di solito eseguiti da una persona esperta, in un particolare dominio. L’esperto è colui che ha una notevole conoscenza ed esperienza in un ambito ben definito, ed è in grado, in tale ambito, di dare risposte corrette.
Il Sistema Esperto deve essere capace di emulare l’operato dell’esperto, in particolare deve essere in grado di compiere le stesse azioni, dare gli stessi giudizi, esibire le stesse spiegazioni.
L’ introduzione del termine ‘Sistema Esperto’ è datata 1977 ed è opera di Feigenbaum [Fe77], che ne diede anche una definizione precisa:

"Un Sistema Esperto è un programma di calcolatore, che usa conoscenze e tecniche di ragionamento per risolvere problemi che normalmente richiederebbero l’aiuto di un esperto. Un Sistema Esperto deve avere la capacità di giustificare o spiegare il perché di una particolare soluzione per un dato problema."

Caratteristiche

Le caratteristiche fondamentali di un Sistema Esperto sono:

1) Possesso di conoscenza specifica.

La bontà di un programma di intelligenza artificiale dipende non solo dal formalismo o dalla tecnica inferenziale utilizzata, ma principalmente, dalla conoscenza che il programma possiede. Come riportato da Waterman [Wa86]: "Per rendere un programma intelligente inserisci in esso molta conoscenza specifica, di alta qualità, riguardante un ben determinato dominio."

2) Capacità di ragionamento.

La capacità di ragionamento sulla conoscenza è una delle caratteristiche dell’esperto. Egli ha una notevole perizia nell’usare le proprie conoscenze, effettua delle deduzioni e prende delle decisioni mediante un ragionamento basato sulla conoscenza.

3) Capacità di interazione con il mondo esterno.

Un Sistema Esperto deve possedere un protocollo di comunicazione con il mondo esterno, per il reperimento di informazioni aggiuntive, necessarie per portare avanti il ragionamento, e per dare spiegazioni all’utente

4) Capacità di delucidare il proprio operato.

Il sistema deve essere in grado di spiegare il proprio comportamento. In particolare deve essere in grado di giustificare le proprie azioni e di esibire delle spiegazioni sulle conclusioni raggiunte.

5) Capacità di apprendimento. Questa caratteristica non è comune a tutti i Sistemi Esperti, ma è comunque interessante menzionarla. L’apprendimento di nuove esperienze e l’ampliamento della propria conoscenza sono alcune delle caratteristiche predominanti di un essere umano. L’esperto mediante il suo operato affina le proprie conoscenze e migliora la propria perizia nel raggiungimento della soluzione.

6) Aderenza del dominio alla realtà Il dominio in cui il Sistema Esperto agisce, non deve essere un modello semplificato del dominio reale, ma deve rappresentarlo così com’è, pur ovviamente con dei limiti, ma mai ricorrendo a modelli eccessivamente astratti.

Componenti di un Sistema Esperto

Le componenti fondamentali di un sistema esperto sono:

1) La base di conoscenza
2) Il motore inferenziale Insieme racchiudono tutta l’esperienza del sistema: la conoscenza riguardante il dominio e il meccanismo di ragionamento.

Figura A Componenti di un Sistema Esperto

Nella base di conoscenza è immagazzinata tutta la conoscenza dell’esperto. In essa sono contenute ad esempio informazioni del tipo: "Tracce di sega circolare si possono trovare su conci in tufo giallo napoletano, appartenenti a murature posteriori al 1957.", oppure "La muratura in tufo giallo napoletano caratteristica del 1500 è a cantieri.". Rappresenta la parte statica del sistema.

Il motore inferenziale è la parte del sistema che lavora sulla conoscenza al fine di raggiungere le conclusioni. Porta avanti ragionamenti, seleziona le parti della conoscenza utili in un determinato momento, chiede l’interazione con l’utente. E’ la parte dinamica del sistema.

Tra le altre componenti menzioniamo: l’area dati, l’interfaccia di comunicazione con l’utente. Nell’ area dati vengono memorizzate le informazioni di partenza, i risultati parziali della computazione, nonché le informazioni aggiuntive che di volta in volta vengono richieste all’utente. L’ interfaccia di comunicazione, offre la possibilità di interagire con l’utente. I moderni linguaggi di programmazione, tra le altre cose, offrono gli strumenti per costruire interfacce grafiche user friendly semplici e chiare, idonee ad una migliore comprensione da parte dell’ utente.

Progettazione di un Sistema Esperto

La progettazione di un Sistema Esperto richiede una forte interazione tra il progettista e l’esperto. Lo scopo del primo è di riuscire a codificare nel sistema sia la conoscenza, sia il meccanismo cognitivo dell’esperto. L’esperto deve individuare e definire in termini precisi, la propria esperienza, fatta di conoscenza del dominio, di regole euristiche, meccanismi di ragionamento abitualmente utilizzati ed espedienti per semplificare l’operato. Lo sforzo maggiore del progettista è di comprendere questa esperienza, attraverso un continuo scambio di domande e risposte con l’esperto, e di codificarla opportunamente. Come si costruisce un Sistema Esperto? Hayes-Roth, Waterman, e Lenat [Ha83], hanno dato una risposta soddisfacente: lo sviluppo di un Sistema Esperto è un processo incrementale ed evolutivo in cui si individuano diverse fasi e che può essere riassunto in un processo di estrazione e in un altro di rappresentazione dalla conoscenza dell’esperto.

Figura B Fasi della progettazione di un sistema esperto

Nella fase di identificazione si individuano le caratteristiche del problema e gli elementi della conoscenza. Nella fase di concettualizzazione, l’obbiettivo è di identificare ed esplicitare i concetti chiave, e le relazioni tra gli elementi identificati nella prima fase. E’ la fase in cui il problema viene suddiviso in un insieme di moduli indipendenti. La fase di formalizzazione comprende la scelta del linguaggio di rappresentazione e la progettazione di strutture per organizzare la conoscenza. L’ implementazione riguarda la formulazione di regole, che costituiscono la base di conoscenza, e la strategia di controllo da utilizzare per ragionare su di essa. La quinta ed ultima fase riguarda il test del sistema, concerne la valutazione delle prestazioni del sistema, che viene sottoposto al giudizio critico dell’esperto. Tuttavia, l’ evoluzione del sistema non è un processo rigorosamente lineare come può far credere ciò che abbiamo detto finora. Durante la fase di progettazione c’è un continuo processo di revisione del sistema, di riformulazione dei concetti, di riprogettazione della conoscenza che porta ad un raffinamento dello stesso. Questa suddivisione non vuole essere altro che una traccia della complessa attività che accompagna l’evoluzione di un Sistema Esperto.

Figura C Processo evolutivo di un Sistema Esperto

Una ulteriore caratteristica di un Sistema Esperto è che esso non è mai completo. Tale caratteristica è comune a tutti i programmi di intelligenza artificiale, per i quali non esiste una ben definita specificazione del comportamento desiderato, ma viene richiesta una approssimazione del comportamento umano. In particolare nei sistemi esperti, sono due i principali motivi di questa incompletabilità:

1) La conoscenza dell’esperto è la principale fonte di informazione, per cui la base di conoscenza non è mai completa, ci sarà sempre la possibilità di aggiungere ulteriore conoscenza per migliorarne le prestazioni;

2) Alcune volte il sistema da risposte non corrette, per cui abbiamo la necessità di aggiungere nuova euristica in modo da ottenere migliori risultati.

Rappresentazione della conoscenza

Il punto focale della progettazione di un Sistema Esperto è la rappresentazione della conoscenza. Ha un’ identità di per se indipendente dalla funzionalità complessiva del sistema. Questo esclude che un programma, inteso in senso tradizionale, con un’architettura in cui la conoscenza è diffusa nelle singole istruzioni, corrisponda ad un sistema esperto. Per rappresentazione della conoscenza si intende la scelta del linguaggio di rappresentazione e la definizione di architetture nelle quali sia esplicita la base di conoscenza, che sarà composta da espressioni nel linguaggio scelto. Il fatto che il sistema debba presentare un comportamento intelligente, pone delle condizioni sulla rappresentazione della conoscenza. Infatti il luogo unico in cui il sistema agisce è il mondo reale. Questo implica una qualche connessione tra la conoscenza del sistema e il mondo reale. Rispetto a ciò troviamo due posizioni: una vede tale connessione come una mappa fra mondo reale e rappresentazione, cioè ipotizza che il mondo reale ammetta una descrizione in un qualche linguaggio; la seconda delega a chi studia la percezione e gli organi motori la trasformazione degli stimoli provenienti dal mondo in descrizioni del mondo ed è in un certo senso agnostica rispetto alle relazioni tra rappresentazione e mondo reale. Generalmente nei sistemi esperti si richiede che la conoscenza sia rappresentata in maniera tale da avere una descrizione esplicita del dominio, che tra le altre cose rende il sistema estendibile e facilmente modificabile e in modo tale che un motore inferenziale riesca a inferire nuove conclusioni semplicemente manipolandone la struttura.

La conoscenza è solitamente costituita dai seguenti elementi:

- Gli Oggetti e le loro proprietà: ‘La macchina è rotta’, ‘La legge F = m* a è alla base della meccanica’;

- Gli Eventi, elementi che cambiano l’ambiente in cui il sistema opera: ‘Domani porterò la macchina dal meccanico’ ‘Il corpo si è spostato dalla posizione X alla posizione Y’.

La rappresentazione degli eventi comprende sia una conoscenza specifica su come fare qualcosa, sia una conoscenza su cosa si conosce (metaconoscenza), cioè caratteristiche su cosa conosciamo e sulle modalità nel fare certe attività. Per passare da una visione della conoscenza come archivio, banca dati, ad una visione come base per avere un comportamento intelligente, occorre definirne le modalità d’uso. Tali modalità possono raggrupparsi in:

- Acquisizione: apprendimento, aggiornamento, quindi capacità di mettere in relazione il nuovo con qualcosa di già noto, classificazione della conoscenza al fine di renderne più agevole il reperimento. Tecnicamente, procedure per inserire, cancellare, strutturare;

- Reperimento: Linking: legami fra parti della conoscenza correlati per particolari attività. Ad esempio il fatto " l’auto è dal meccanico" è legato all’evento"prendere il bus". Lumping: raggruppamento di elementi della conoscenza che solitamente si usano insieme. Ad esempio gli elementi "l’auto non parte" , "controllo batteria", "controllo benzina" solitamente si usano insieme;

- Inferenza: Meccanismi per rendere esplicita conoscenza implicita: deduzione, induzione abduzione, uso di metaconoscenza;

Non esiste una teoria della rappresentazione della conoscenza! Non esiste una risposta a domande del tipo: "E’ una rappresentazione adeguata per quel problema?". Esistono solo dei criteri informali che orientano nella scelta e nella definizione di uno schema e di un formalismo per la rappresentare la conoscenza.

Tra gli altri menzioniamo:

- Adeguatezza epistemologica. (McCarthy e Hayes [Mc69]): capacità di rappresentare tutti gli aspetti del mondo.

- Adeguatezza euristica (efficienza).

- Rappresentare in maniera semplice e naturale, senza ricorrere a modelli eccessivamente astratti.

- Rappresentare in modo modulare, al fine di rendere agevoli eventuali modifiche.

- Rappresentare in modo che la manipolazione sia comprensibile e corretta.

Vedi: Schemi di rappresentazione della conoscenza.

La componente di inferenza

La componente di inferenza ha il compito di manipolare la conoscenza, al fine di raggiungere la soluzione. Generalmente presenta una architettura a due livelli: - Livello oggetto - Livello meta. Ognuno di essi può essere visto come un sistema individuale, con un proprio linguaggio di rappresentazione.

Lo scopo del livello oggetto è portare avanti ragionamenti nel dominio di applicazione del sistema, mentre lo scopo del livello meta è controllare il comportamento del livello oggetto. Solitamente comprende diverse strategie di ricerca della soluzione, idonee a snellire la computazione. Per esplorare e definire classi di sistemi è utile introdurre il concetto di ‘locus of action’, il luogo del sistema attivo in un determinato istante di tempo.Con esso possiamo classificare i sistemi in quelli in cui il ‘locus of action’ è prevalentemente a livello oggetto, e quelli in cui è prevalentemente a livello meta. I primi hanno essenzialmente una sola componente, quella operante a livello oggetto, che prende in esame la metaconoscenza durante il ciclo computazionale, in alcuni punti fissi, per aggiustare il suo comportamento. Nei secondi il comportamento del livello oggetto è completamente specificato nel meta-livello. Utilizzando la conoscenza sul livello oggetto, il meta-livello può completamente simulare il processo di inferenza che avviene al livello oggetto. Ne consegue che la componente a livello oggetto non è più presente nel sistema. Inoltre, le inferenze che avvengono al meta-livello, costruiscono le soluzioni al livello oggetto. In questo modo la ricerca della soluzione avviene al livello meta anziché al livello oggetto e ciò comporta una maggior efficienza del sistema, in quanto lo spazio di ricerca al livello meta, è più ristretto e ci si accorge prima degli errori. Infatti in esso, vengono codificate strategie di ricerca della soluzione, e il sistema deve ragionare su quale sia la migliore strategia piuttosto che ragionare su una soluzione tentata in una strategia fissa. Inoltre essendo completamente indipendente dal livello oggetto, è facilmente estendibile e ridefinibile. Tra i sistemi in cui il ‘locus of action’ è alternativamente a livello oggetto e al livello meta, menzioniamo: - Sistemi ‘Reflect and Act’ in cui il livello oggetto ‘agisce’ e il meta-livello ‘riflette’ sulle azioni del livello oggetto (Sistema Esperto ‘Teiresias’ [Da80]).

Figura D Sistema Reflect and Act

- Sistemi che cercano soluzioni di fronte ad una crisi, in cui il meta-livello interviene solo quando il sistema si trova davanti ad una crisi o un empasse (Sistema Esperto ‘SOAR’ [La87], [Ro88]).

Figura E Sistemi che cercano soluzioni di fronte ad una crisi

- Sistemi che trattano i ‘sub-task’ in cui la metaconoscenza è utilizzata per dividere i task a livello oggetto in un insieme di sub-task (Sistema Esperto ’CENTAUR’ [Ai83]).

Figura F Sistemi che dividono i task a livello oggetto in un insieme di sub-task

 

Bibliografia

[Ai83] Aikins, J. S., "Prototypical Knowledge for Expert Systems," Artificial Intelligence 20, 1983, pp.163-210

[Da80] Davis, R., "Meta-Rules: Reasoning about Control", Artificial Intelligence 15, 1980

[Fe77] Feigenbaum, E. A., The art of Artificial Intelligence, 1:Theories and case studie in knowledge engineering, Proc. 5th IJCAI, 1977

[Ha83] Hayes-Roth, F., Waterman, D. A., Lenat, D, (eds) Building in Expert Systems, Reading, Mass., Addison-Wesley, 1983

[La87] Laird, J., Newell A., Rosenbloom, P., "SOAR: an Architecture for General Intelligence", Artificial Intelligence 33, 1987

[Mc69] McCarthy, J.and Hayes, P. J., "Some Philosophical Problems from the Standpoint of Artificial Intelligence", in Machine Intelligence 4, ed. B. Meltzer and D. Michie, Edinburg University Press, Edinburg

[Ro88] Rosembloom, P., Laird, J. Newell, A. in: Maes, P. Nardi, Meta-Level Architectures and Reflection, North Holland, 1988

[Wa86] Waterman, D. A. A guide to Expert Systems, Readin Mass., Addison Wesley, 1986