Sistema Esperto per l'analisi Di Una ConversazionE
-
Upload
nunzio-gianfelice -
Category
Technology
-
view
290 -
download
2
description
Transcript of Sistema Esperto per l'analisi Di Una ConversazionE
Università degli studi di Bari “Aldo Moro”
Laurea Magistrale in Informatica
Intelligenza Artificiale
Agenti per la comunicazione
SEDUCE
(Sistema Esperto per l’analisi Di Una ConversazionE)
Docenti:
Prof. Floriana Esposito
Prof. Stefano Ferilli
Prof. De Carolis
Nunzio Gianfelice
Matr. 585229
Indice Obiettivo
1) Comunicazione
1.1 Un modello formale di comunicazione
1.2 I cinque assiomi della comunicazione
1.3 Comunicazione non verbale
1.4 I vari sistemi di comunicazione umana
1.4.1 Sistema paralinguistico
1.4.2 Sistema cinestesico
1.4.3 Prossemica
1.4.4 Aptica
1.5 Fattori di influenza esterna
1.5.1 Contesto fisico
1.5.2 Contesto relazionale
2) Analisi di tutti i fattori
2.1 Cosa si può capire dalla “VOCE”?
2.2 Cosa si può capire dalla “POSTURA”?
2.3 Cosa si può capire dalla “MIMICA FACCIALE”?
2.4 Cosa si può capire dai “GESTI”?
2.5 Cosa ci indicano determinate “CUE WORD”?
2.6 Cosa si può capire dal “CONTESTO RELAZIONALE”?
2.7 Cosa si può capire dal “CONTESTO FISICO”?
3)Concettualizzazione
3.1 Concettualizzazione
3.2 Concettualizzazione dei predicati
3.3 Concettualizzazione delle regole
3.4 Fatti nella base di conoscenza
3.5 Regole nella base di conoscenza
4)Sviluppo
4.1 Scelta stategia di ragionamento
4.2 Meta – interprete forward
4.3 Interfaccia grafica Java
5)Utilizzo e sperimentazione
5.1 Esperimento
6)Considerazioni e sviluppi futuri
Obiettivo
L’obiettivo che si pone questo progetto consiste nell’estrarre informazioni rilevanti
dall’osservazione di una conversazione tra due o più individui. L’estrazione sarà fatta basandosi
su tutti i processi comunicativi che si attivano volontariamente e involontariamente quando
ognuno di noi comunica con un’altra persona. Oltre alla comunicazione sarà presa in
considerazione l’analisi del contesto in cui si svolge la comunicazione e fattori indiretti che
influenzano in qualche maniera la stessa come ad esempio l’abbigliamento.
I dati che saranno ricavati dall’osservazione di queste conversazioni saranno dati in input ad un
sistema esperto che riuscirà a dedurre informazioni rilevanti sui partecipanti alla conversazione,
sul contesto nella quale si svolge e sul messaggio che si vuole trasmettere.
Il progetto non si pone l’obiettivo di avere una vastissima collezione d’informazioni classificate
in input da processare, ma la definizione di una struttura di regole che permetta attraverso più
passi d’inferenza di ricavare dettagli utili per la classificazione di una conversazione o
comunicazione tra due individui. Per questo verrà fatta un’ampia analisi e descrizione di tutti i
processi che si attivano durante uno scambio d’informazione e con una metodologia di sviluppo
per raffinamenti successivi (step-wise refinement; naturalmente si terrà conto che si tratta di un
S.E.) si creerà uno schema da implementare che rispecchi in maniera più concreta possibile la
circostanza reale.
1) Comunicazione
La comunicazione (dal latino cum = con, e munire = legare, costruire e dal
latino communico = mettere in comune, far partecipe) non è soltanto un processo di
trasmissione d’informazioni (secondo il modello di Shannon-Weaver). In italiano, il termine
"comunicazione" ha il significato semantico di "far conoscere", "rendere noto". La
comunicazione è un processo costituito da un soggetto che ha intenzione di far sì che il
ricevente riesca a percepire ciò che si vuole trasmettere.
Fig. 1 – Modello che descrive il flusso di un’informazione
Il concetto di comunicazione comporta la presenza di un’interazione tra soggetti diversi: si tratta
in altri termini di un’attività che presuppone un certo grado di cooperazione. Ogni processo
comunicativo avviene in entrambe le direzioni.
Nel processo comunicativo che vede coinvolti gli esseri umani, ci troviamo così di fronte a due
polarità: da un lato la comunicazione come atto di pura cooperazione, in cui due o più individui
"costruiscono insieme" una realtà e una verità condivisa; dall'altro la pura e semplice
trasmissione, unidirezionale, senza possibilità di replica, nelle varianti dell'imbonimento
televisivo o dei rapporti di caserma. Nel mezzo, naturalmente, vi sono le mille diverse occasioni
comunicative che tutti viviamo ogni giorno, in famiglia, a scuola, in ufficio, in città.
Fig. 2 – Il sistema comunicativo umano – Sociologia della comunicazione, p. 48
1.1) Un modello formale di comunicazione
Generalmente si distinguono diversi elementi che concorrono a realizzare un singolo atto
comunicativo.
� Emittente: è la persona che avvia la comunicazione attraverso un messaggio.
� Ricevente: accoglie il messaggio, lo decifra, lo interpreta e lo comprende.
� Codice: parola parlata o scritta, immagine, tono impiegata per "formare" il messaggio.
� Canale: il mezzo di propagazione fisica del codice (onde sonore o elettromagnetiche,
scrittura, bit elettronici).
� Contesto: l'”ambiente" significativo all'interno del quale si situa l'atto comunicativo.
� Referente: l'oggetto della comunicazione, cui si riferisce il messaggio.
1.2) I cinque assiomi della comunicazione
Gli assiomi della comunicazione furono definiti da Paul Watzlawick e altri studiosi della Scuola
di Palo Alto (California), allo scopo di identificare alcune proprietà della comunicazione, e
utilizzarle per diagnosticare alcune patologie.
Né furono individuati cinque: l'impossibilità di non comunicare; i livelli comunicativi di
contenuto e relazione; la punteggiatura della sequenza di eventi; la comunicazione numerica e
analogica; l'interazione complementare e simmetrica.
Il primo assioma dice che è impossibile non comunicare: qualsiasi interazione umana è una
forma di comunicazione. Qualunque atteggiamento assunto da un individuo, diventa
immediatamente portatore di significato per gli altri.
Il secondo stabilisce un rapporto tra il contenuto e la relazione che c’è fra i comunicanti:
secondo gli studiosi di Palo Alto il contenuto classifica la relazione. Ogni comunicazione
comporta un aspetto di ‘meta comunicazione’ che determina la relazione tra i comunicanti. Ad
esempio, la mamma che ordina al bambino di andare a fare il bagno esprime, oltre al contenuto
(la volontà che il bambino si lavi), anche la relazione che intercorre tra chi comunica e chi è
oggetto della comunicazione, nel caso particolare quella di superiore/subordinato.
Il terzo assioma evidenzia la connessione tra la punteggiatura della sequenza di comunicazione
e la relazione che intercorre tra i comunicanti: il modo di interpretare la comunicazione è in
funzione della relazione tra i comunicanti. Poiché la comunicazione è un continuo alternarsi di
flussi comunicativi da una direzione all'altra e le variazioni di direzione del flusso
comunicativo sono scandite dalla punteggiatura, il modo di leggerla sarà determinato dal tipo di
relazione che lega i comunicanti.
Il quarto assioma attribuisce agli esseri umani la capacità di comunicare sia analogicamente
sia digitalmente. Quando gli esseri umani comunicano per immagini, ad esempio disegnando,
la comunicazione è analogica. La comunicazione analogica si basa sulla somiglianza tra gli
strumenti di supporto e le grandezze rappresentate: mantiene quindi un rapporto di analogia con
i fenomeni e gli oggetti che designa e trasmette. Esempi di mezzi di comunicazione analogici
sono: il termometro a mercurio, l'orologio a lancette. Quando si comunica usando le parole, la
comunicazione segue il modulo digitale. Questo perché le parole sono segni arbitrari che
permettono una manipolazione secondo le regole della sintassi logica che li organizza. La
comunicazione digitale si basa sull'uso di segnali discreti per rappresentare in forma numerica i
fenomeni e gli oggetti che intende designare. Esempi di mezzi di comunicazione digitali sono:
il faX, il compact disc, l'orologio a cristalli liquidi (in cui l'indicazione dell'ora e delle sue
frazioni è visualizzata con scatti di cifre).
Il quinto assioma afferma che tutti gli scambi comunicativi si fondano o sull'uguaglianza o
sulla differenza e quindi possono essere simmetrici o complementari. Si dicono complementari
gli scambi comunicativi in cui i comunicanti non sono sullo stesso piano (mamma/bambino,
dipendente/datore di lavoro). Sono simmetrici gli scambi in cui gli interlocutori si considerano
sullo stesso piano: è questo il caso di comunicazioni tra pari grado (marito/moglie, compagni di
classe, fratelli, amici).
1.3) Comunicazione non verbale
La comunicazione non verbale è quella parte della comunicazione che comprende tutti gli
aspetti di uno scambio comunicativo che non riguardano il livello puramente semantico del
messaggio, ossia il significato letterale delle parole che compongono il messaggio stesso, ma
che riguardano il linguaggio del corpo, ossia la comunicazione non parlata tra persone.
Secondo i linguisti più del 90% della nostra comunicazione giornaliera è, infatti, non-verbale. È
quindi un contributo enorme al linguaggio verbale e, poiché la comunicazione è strettamente
ambivalente, possiamo facilmente comprendere quanto sia più grande il rischio di non capire
quando si è al telefono piuttosto che quando si parla a faccia a faccia.
Uno studio condotto nel 1972 da Albert Mehrabian ("Non-verbal communication") ha mostrato
che ciò che viene percepito in un messaggio vocale può essere così suddiviso:
� Movimenti del corpo (soprattutto espressioni facciali) 55%
� Aspetto vocale (Volume, tono, ritmo) 38%
� Aspetto verbale (parole) 7%
L’efficacia di un messaggio dipende quindi solamente in minima parte dal significato letterale
di ciò che viene detto, e il modo in cui questo messaggio viene percepito è influenzato
pesantemente dai fattori di comunicazione non verbale.
Nell'ambito delle scienze della comunicazione la comunicazione non verbale viene suddivisa in
quattro componenti:
� Sistema paralinguistico
� Sistema cinestesico
� Prossemica
� Aptica
1.4) I vari sistemi di comunicazione umana
c
1.4.1) Sistema paralinguistico - Voce
Detto anche Sistema vocale non verbale, indica l'insieme dei suoni emessi nella comunicazione
verbale, indipendentemente dal significato delle parole. Le caratteristiche della voce, che
comprendono il flusso verbale, il volume e il ritmo, possono rivelare sentimenti ed emozioni
quali l’ansia, la paura, l’ira, il dolore e la gioia.
Il sistema paralinguistico è caratterizzato da diversi aspetti:
Tono
Il tono viene influenzato da fattori fisiologici (età, costituzione fisica), e dal contesto: una
persona di elevato livello sociale che si trova a parlare con una di livello sociale più basso
tenderà ad avere un tono di voce più grave.
Frequenza
Anche in questo caso l'aspetto sociale ha una forte influenza: una persona che si trova a parlare
con un superiore tenderà ad avere una frequenza di voce più bassa rispetto al normale.
Ritmo
Il ritmo dato ad un discorso conferisce maggiore o minore autorevolezza alle parole
pronunciate: parlare ad un ritmo lento, inserendo delle pause tra una frase e l'altra, dà un tono di
solennità a ciò che si dice; al contrario parlare ad un ritmo elevato attribuisce poca importanza
alle parole pronunciate.
Silenzio
Anche il silenzio rappresenta una forma di comunicazione nel sistema paralinguistico, e le sue
caratteristiche possono essere fortemente ambivalenti: il silenzio tra due innamorati ha
ovviamente un significato molto diverso rispetto al silenzio tra due persone che si ignorano. Ma
anche in questo caso gli aspetti sociali e gerarchici hanno una parte fondamentale: un professore
che parla alla classe o un ufficiale che si rivolge alle truppe parleranno nel generale silenzio,
considerato una forma di rispetto per il ruolo ricoperto dalla persona che parla.
1.4.2) Sistema cinestesico – Sguardo/Espressività facciale/Gesti/Postura
Il sistema cinestesico comprende tutti gli atti comunicativi espressi dai movimenti del corpo.
In primo luogo vanno considerati i movimenti oculari: il contatto visivo tra due persone ha una
pluralità di significati, dal comunicare interesse al gesto di sfida. L'aspetto sociale ed il contesto
influenzano anche quest’ aspetto: una persona, in una situazione di disagio, tenderà più
facilmente del solito ad abbassare lo sguardo.
Altra componente del sistema cinestesico è la mimica facciale. Riguardo a questo aspetto va
considerato che non tutto ciò che viene comunicato tramite le espressioni del volto è sotto il
nostro controllo (ad esempio l'arrossire o l'impallidire).
Altro elemento fondamentale del sistema cinestesico sono i gesti, in primo luogo quelli
compiuti con le mani. La gestualità manuale può essere una utile sottolineatura delle parole, e
quindi rafforzarne il significato, ma anche fornire una chiave di lettura difforme dal significato
del messaggio espresso verbalmente.
Vi sono diversi tipi di gesti divisi in quattro tipi di gesti:
- Deittico: viene utilizzato per indicare un oggetto ad una persona con l’indice e con la mano
aperta;
- Iconico: viene utilizzato per raffigurare nell’aria la forma o i movimenti tipici di un
oggetto, un animale o una persona;
- Simbolico: viene utilizzato in una certa cultura per dare un significato facilmente
traducibile in frasi o parole ;
- Batonico: viene utilizzato per scandire ed enfatizzare il parlato.
Altro elemento del sistema cinestesico è la postura. Anche in questo caso gli elementi sociali e
di contesto hanno grande importanza, talvolta identificando con precisione la posizione corretta
da mantenere in una data circostanza (i militari sull’attenti di fronte ad un superiore), talvolta in
maniera meno codificata ma comunque necessaria (una postura corretta e dignitosa di un alunno
in classe di fronte al professore). L’interlocutore può essere in piedi, seduto, le gambe o le
braccia incrociate, avere una o tutte e due le mani in tasca, dietro la schiena, essere piegato in
avanti. Tutto ciò che mettiamo davanti a noi costituisce una barriera e una difesa: le braccia
conserte e/o le gambe accavallate, una borsa, un mazzo di fiori, lo schienale della sedia se ci
mettiamo seduti a cavalcioni.
1.4.3) Prossemica – Vicinanza/Lontananza
L’aspetto prossemico della comunicazione analizza i messaggi inviati con l’occupazione dello
spazio.
Il modo nel quale le persone tendono a disporsi in una determinata situazione, apparentemente
casuale, è in realtà codificato da regole ben precise. Ognuno di noi tende a suddividere lo spazio
che ci circonda in quattro zone principali:
� Zona intima (da 0 a 50 centimetri)
� Zona personale (da 50 cm ad 1 metro)
� Zona sociale (da 1 m a 3 o 4 m)
� Zona pubblica (oltre i 4 m)
La zona intima è, come facilmente intuibile, quella con accesso più ristretto: di norma vengono
accettati senza disagio al suo interno solo alcuni familiari stretti e il partner. Un ingresso di altre
persone esterne a questo ristretto nucleo di “ammessi” all’interno della zona intima viene
percepita come una invasione che provoca un disagio, variabile a seconda del soggetto. Come
conferma di questo basti pensare alla situazione di imbarazzo che si prova quando siamo
costretti ad ammettere nella nostra zona intima soggetti estranei, ad esempio in ascensore o
sull’autobus; la conseguenza di questa situazione è un tentativo di mostrare l’involontarietà
della nostra “invasione”, quindi si tende ad irrigidirsi e a non incrociare lo sguardo con le altre
persone.
La zona personale è meno ristretta: vi sono ammessi familiari meno stretti, amici, colleghi. In
questa zona si possono svolgere comunicazioni informali, il volume della voce può essere
mantenuto basso e la distanza è comunque sufficientemente limitata da consentire di cogliere
nel dettaglio espressioni e movimenti degli interlocutori.
La zona sociale è quell’area in cui svolgiamo tutte le attività che prevedono interazione con
persone sconosciute o poco conosciute. A questa distanza (come detto da 1 a 3 o 4 metri) è
possibile cogliere interamente o quasi la figura dell’interlocutore, cosa che ci permette di
controllarlo per capire meglio le sue intenzioni. È anche la zona nella quale si svolgono gli
incontri di tipo formale, ad esempio un incontro di affari.
La zona pubblica è quella delle occasioni ufficiali: un comizio, una conferenza, una lezione
universitaria. In questo caso la distanza tra chi parla e chi ascolta è relativamente elevata e
generalmente codificata. È caratterizzata da una forte asimmetria tra i partecipanti alla
comunicazione: generalmente una sola persona parla, mentre tutte le altre ascoltano.
1.4.4) Aptica
L’aptica è costituita dai messaggi comunicativi espressi tramite contatto fisico. Anche in questo
caso si passa da forme comunicative codificate (la stretta di mano, il bacio sulle guance come
saluto ad amici e parenti), ad altre di natura più spontanea (un abbraccio, una pacca sulla spalla).
L’aptica è un campo nel quale le differenze culturali rivestono un ruolo cruciale: ad esempio la
quantità di contatto fisico presente nei rapporti interpersonali fra le persone di cultura sud-
europea verrebbe considerata come una violenta forma di invadenza dai popoli nord-europei.
1.5) Fattori di influenza esterna
Considerati i vari fattori di comunicazione di una conversazione in maniera diretta, si possono
analizzare fattori di influenza esterna che non condizionano la comunicazione ma possono
aiutare a capire e disambiguare sul significato della stessa osservata da un punto di vista esterno.
Tra questi fattori, troviamo sicuramente :
- Il contesto fisico inteso come luogo in cui avviene la conversazione;
- Il contesto relazionale inteso come relazione che intercorre tra i due.
1.5.1) Contesto fisico
Il contesto fisico in cui si svolge l’interazione tra due persone può essere fondamentale per
comprendere alcune caratteristiche della comunicazione che sta avvenendo. Per esempio se
consideriamo due giovani ragazzi in un parco sicuramente possiamo ipotizzare che il loro sia un
incontro informale. Viceversa se ci troviamo in un luogo accademico magari in un ufficio di un
Professore, la possibilità che si stia svolgendo una conversazione informale si abbassa ed è
molto più probabile che la conversazione sia di tipo formale. Naturalmente oltre il luogo inteso
proprio come localizzazione dello stesso, bisogna tenere conto anche dell’ “arredamento” dello
stesso. Ci si potrebbe trovare nell’atrio dell’Università e quindi essendoci un arredamento di
panchine, piante, alberi e fontane la conversazione potrebbe essere formale come informale.
Fig. 3 – Freddo o sulle difensive?
Un altro esempio che indica l’importanza del contesto potrebbe essere rappresentato(Fig.3) da
un persona che in una fredda giornata invernale se ne sta seduto in attesa dell’autobus con le
braccia e le gambe strettamente incrociate e il mento chino. Questa postura vuole indicare che il
soggetto ha freddo più che dimostrare un atteggiamento difensivo. Se però fosse seduto a un
tavolo davanti a voi mentre cercate di proporgli un’idea, o di vendergli un prodotto o un
servizio, significherà quasi di sicuro che non aprrezza o rifiuta l’ offerta.
1.5.2) Contesto relazionale
Il contesto relazionale serve soprattutto a definire il rapporto di potere che intercorre tra i
soggetti coinvolti nella comunicazione. Questo contesto è desumibile da fattori quali il sesso dei
due, l’età e l’abbigliamento che usano. Riprendendo l’esempio di prima si potrebbe capire nell’
osservare due ragazzi al parco, uno di sesso maschile e uno di sesso femminile con più o meno
la stessa età che tra di loro ed entrambi con un abbigliamento sportivo che c’è una relazione di
amicizia o intima. Invece se consideriamo due soggetti di sesso opposto ma di età molto
differenti e vestiti in maniera elegante si potrà escludere la relazione intima e pensare ad una
relazione di parentela oppure di ambito lavorativo.
2) Analisi di tutti i fattori
Potendo analizzare tutti i fattori sopra elencati riusciremmo ad ottenere molteplici informazioni
dalla semplice osservazioni di una conversazione tra due persone. Si potrebbe ipotizzare
l’esistenza di una rete di sensori (uno per ogni fattore descritto) che estraggono determinate
informazioni dall’osservazione della comunicazione e passano i dati raccolti ad un sistema
esperto che gli analizza e con processi di inferenza riesce a dedurre informazioni che non sono
direttamente ottenibili dall’osservazione dei singoli dati raccolti. Uno schema riassuntivo dei
vari fattori presi in analisi in questo documento è dato dall’ immagine seguente. (Fig. 4)
Fig. 4 – Fattori analizzati e possibili deduzioni ottenibili
Considerando ogni categoria del precedente schema che fornisce un input rilevante al sistema
esperto che si andrà a progettare, possiamo elencare le caratteristiche che verranno prese in
esame e possiamo elencarle per categoria.
2.1) Cosa si può capire dalla “VOCE”? [4][9]
Attraverso un analizzatore di voce si potrebbero distinguere le caratteristiche di Tonalità,
Intensità, Ritmo, Pause, Velocità e di conseguenza avere in input le seguenti informazioni.
Tonalità bassa � Accettazione di sè , Estroversione
Tonalità alta � Introversione, Insicurezza
Intensità (volume) alta � Dominanza
Intensità (volume) bassa � Ansia
Ritmo veloce � Ansia
Pause poche e brevi � Estroversione
Pause lunghe � Introversione
Aumento della Tonalità, Ritmo irregolare � Emozione di paura
Tono basso, Pause lunghe, Ritmo lento � Emozione di tristezza
Tonalità acuta della voce, Intensità crescente, Ritmo accelerato � Emozione di gioia
Diminuzione della Velocità, Tono basso, Intensità piena � Emozione di disprezzo
2.2) Cosa si può capire dalla “POSTURA”? [8][9]
Analizzando una conversazione da un punto esterno ad essa si può notare la postura dei due
interlocutori e suddividerla principalmente quattro zone. Ognuna delle quali va a delineare il
rapporto che intercorre tra i due soggetti.
Distanza tra i soggetti :
0cm – 50cm � zona intima, familiari stretti, amici stretti, partner
50cm – 1 m �zona personale, familiari, amici, colleghi, si svolgono interazioni
informali
1m – 3 m � zona sociale, persone sconosciute o poco conosciute, incontri informali
Posizione delle gambe, braccia, ecc :
Eretto sull’attenti � posizione formale, atteggiamento neutro, superiorità di chi si ha di
fronte
Eretto a gambe divaricate(prettamente maschile) � dominazione, intenzione di non
andarsene
Eretto con il piede in avanti � indica la persona più interessante o la direzione in cui si
vuole andare
Eretto con i pollici nei pantaloni � Se dello stesso sesso aggressività reciproca,
altrimenti imposizione e interesse sessuale
Eretto a gambe incrociate � sulla difensiva, poca familiarità, chiusura
Seduto incrocio delle caviglie � trattiene un sentimento negativo, paura o incertezza
Seduto intreccio gambe(dorso piede appoggiato gamba opposta – solo femminile) �
riservata e schiva
Seduto con gamba sul bracciolo � atteggiamento informale, indifferente e distaccato
Seduto a cavalcioni di una sedia � controllare ma precauzionarsi allo stesso momento
Seduto e mani dietro la testa � calmo, sicuro di sé, superiorità rispetto all’altro
Palmi aperti � verità, onestà, lealtà, subordinazione
Palmi verso l’altro � non minaccioso
Palmi verso il basso � autorità
Gambe divaricate � atteggiamento aperto o dominante
Gambe chiuse � atteggiamento di chiusura o incertezza
2.3) Cosa si può capire dalla “MIMICA FACCIALE”? [1][2][6]
Questa categoria è a sua volta suddivisa in due sottocategorie. Infatti ci dovranno essere più
analizzatori per quanto riguarda il viso. Uno analizzerà lo sguardo e un altro i movimenti
facciali.
Per quanto riguarda lo sguardo avremo quattro tipologie di sguardo.
Sguardo di traverso � Interesse romantico.
Sguardo prolungato (durante un discorso) � Interesse per il discorso
Sguardo da “duro” (occhi socchiusi e pupille contratte) � Atteggiamento aggressivo e/o
minaccioso
Sguardo sfuggente � Ingannevole o non interessato
Per quanto riguarda le espressioni facciali terremo conto sopratutto del sorriso.
Sorriso forzato (non coinvolge tutta la faccia, ma solo la bocca) � finzione di gioia
Sorriso a labbra strette � vuole apparire cortese
Sorriso aperto (mostra dell’arcata dentale superiore) � Genuino e sincero, voglia di una
migliore conoscenza
2.4) Cosa si può capire dai “GESTI”? [1][8][9]
La branchia dei gesti è una categoria praticamente infinita. I gesti che il nostro corpo produce
sono quantificati dagli esperti in più di 10.000. Ecco perché è quasi impossibile controllare ogni
minimo movimento del nostro corpo quando si è all’interno di una conversazione, generando
cosi un canale di comunicazione involontario e molto espressivo. Per questo progetto
prenderemo in esame solo alcuni dei gesti che è possibile effettuare. Tra questi dobbiamo
suddividere i gesti effettuati con la testa o dalla testa da quelli effettuati con il corpo.
Partiamo dai primi : gesti che riguardano la testa.
Attorcigliare i capelli � Segno di nervosismo
Toccarsi i capelli con due mani (donna vs uomo)� Insicurezza nel suo aspetto fisico
Toccarsi i capelli con una mano (donna vs uomo)� Interesse romantico
Testa diritta � serietà, autorevolezza
Testa inclinata � atteggiamento amichevole e ricettivo
Scuotere la testa � disaccordo
Annuire lentamente � concorde, vuole continuare ad ascoltare
Annuire velocemente � concorde, vuole prendere la parola
Grattarsi le orecchie � mancanza di fiducia
Toccarsi il naso � nascondere qualcosa
Dilatare le narici � arrabbiato – esasperato
Arricciare il naso � disgusto
Stropicciare l’occhio � nascondere qualcosa, mentire
I gesti del nostro corpo.
Togliersi peli “immaginari” di dosso � Opinione segreta che non vuole rivelare
Mani sui fianchi e gomiti verso l’esterno � sicurezza, aggressività, predominanza
Grattarsi il collo � Incertezza, dubbio
Battito di ciglia prolungato � noia, non voler ascoltare
Indici delle mani che si uniscono � parla di una connessione, legame
Applauso � esprimere apprezzamento
Alzare le spalle rispetto al collo � Perplesso, incerto
Mano alta con palmo aperto verso l’interlocutore � Scusa, è colpa mia
2.5) Cosa ci indicano determinate “CUE WORDS”? (positivi /
negativi) [4]
Il linguaggio umano è composto da migliaia di parole ed in ogni discorso di media
durata ne usiamo circa alcune centinaia. Ma quante di queste incidono veramente sul
contenuto della frase? In realtà la maggior parte delle parole serve a dare un senso
grammaticalmente compiuto alla frase, ma sono solo poche quelle che contengono
davvero significato. Un esempio potrebbe essere un sms scritto di fretta in questa
maniera “arrivato. Posteggiato all’angolo” che equivale ad un sms scritto in questo
modo : “ Ehi guarda che sono arrivato e ho posteggiato vicino all’angolo di casa tua, ti
aspetto qui!”. Quattro parole in confronto di diciassette per esprimere lo stesso concetto.
Perchè della seconda frase le parole che davvero captiamo sono solamente quelle
contenute anche nella prima frase; il resto sembra un contorno irrilevante.
Anche in questo caso simuliamo di avere un dispositivo che riesca a distinguere e
classificare le varie parole che vengono pronunciate in una conversazione
classificandole o in :
Vezzeggiativi (cas -uccia, caval -uccio)� segnale di affetto positivo (enfasi o affetto)
Dispregiativi (cagnol –accio, avocat –uccio)� segnale di affetto negativo (rabbia o
disprezzo)
oppure distinguendo all’interno delle frasi parole contenute in uno di questi quattro
macro insiemi che useremo come insiemi di partenza per l’indicazione che ci proviene
dalle “cue words”
( Evviva, bene, bravo, viva, urrà, mi da gioia, mi porta allegria, che felicità, che
contentezza, che piacere, che godimento, che dolcezza, che soddisfazione, che delizia )
� felicità, positività
( mi vergogno, provo vergogna, mi imbarazzo, ho timore, ho soggezione ) � vergogna,
disagio
( tristemente, triste, malinconico, infelice, scontento, scoraggiato, angosciato, disperato,
addolorato, amareggiato, abbattuto, demoralizzato, depresso, a terra, umore nero, di
cattivo umore, deluso, dispiaciuto ) � giù di morale, negatività
( arrabbiato, adirato, infuriato, furioso, furibondo, irritato, imbestialito, incavolato,
mannaggia, maledizione ) � nervosismo , collera
2.6) Cosa si può capire dal “CONTESTO RELAZIONALE”?
Osservando da una certa distanza due persone che conversano tra di loro sicuramente ognuno di
noi associa involontariamente e in maniera automatica un’ “etichetta” alla relazione che potrà
intercorrere tra i due. Per esempio se osserviamo due ragazzi all’ incirca coetanei, intorno ai
diciotto anni, che camminano per strada vestiti in maniera casual potremmo sicuramente
affermare che tra di loro intercorre un rapporto di amicizia. Questa nostra deduzione si basa
sopratutto su due fattori: età e abbigliamento.
Età più o meno simili � colleghi, amici, patner
Età visibilmente differenti � la persona più anziana ha un potere di predominanza nel rispetto
della persona più giovane
Abbigliamento casual - casual � rapporto familiare o amichevole
Abbigliamento elegante – elegante � rapporto formale, colleghi di lavoro
Abbigliamento elegante – casual � incontro occasionale non previsto
2.7) Cosa si può capire dal “CONTESTO FISICO”?
Un fattore discriminatorio molto importante da tenere in considerazione è certamente il luogo in
cui si svolge la conversazione. Se per esempio il luogo è un ufficio di lavoro difficilmente
potremo parlare di rapporto informale. Per analizzare il luogo simuliamo l’uso del Gps che ci
segnali il posto in cui ci troviamo distinguendo i maggiori punti di conversazione:
ufficio pubblico, ufficio privato, benzinaio � formale
hotel, centro commerciale, centro di ristorazione � formale / non formale
appartamento privato, libreria, palestra, parco, pub, parrucchiere/centro estetico, stadio, centro
benessere � non formale
3) Concettualizzazione
Nella fase precedente si è riusciti a suddividere tutti i fattori di interesse che riguardano questo
progetto in “classi” di appartenenza, raggruppando i fattori stessi in base al modo in cui
vengono osservati. Inoltre è stato creato un elenco molto dettagliato delle caratteristiche
considerate e di cosa esse comportano rendendo cosi più agevole la fase di concettualizzazione e
sviluppo.
3.1) Concettualizzazione
Il processo per esprimere la conoscenza descritta precedentemente attraverso la logica viene
chiamato concettualizzazione. Attraverso la concettualizzazione si descrive il mondo nel settore
d’interesse evidenziando solo gli “oggetti” e le “caratteristiche” che si ritengano possano avere
una qualche utilità per gli scopi che ci prefiggiamo. Per questo verranno elencati i vari predicati
utilizzati in questo progetto, le costanti presenti e le funzioni che esprimono le relazioni tra i
diversi oggetti.
Inizialmente dobbiamo considerare che una conversazione è formata da due persone. Questo
concetto che di per se sarebbe inutile racchiudere in un predicato assume importanza quando lo
si scompone in sesso e età. Andando avanti con lo sviluppo dell’applicativo ci si è resi conto
che si necessitava del concetto di ‘soggetto’ che servirà in questa prima versione a disambiguare
su alcune regole e che risulterà sicuramente utile per le versioni future dell’applicazione.
3.2) Concettualizzazione dei predicati (concetti da rappresentare)
Per questo i primi tre predicati che si vogliono elencare serviranno proprio ad indicare il sesso
delle persone che parteciperanno alla conversazione e le persone stesse. In più sono stati creati
due concetti che servono ad avere un’indicazione sulla differenza di età se alta o bassa.
Naturalmente entrambe le informazioni saranno immesse nel sistema esperto attraverso
l’interfaccia java che si andrà ad implementare. Non sarà quindi compito del sistema esperto
andare a calcolare se le età sono simili oppure no.
soggetto(X),maschio(X), femmina(X),
eta_simili(X, Y), eta_differenti(X,Y),
Per quanto riguarda invece i predicati riguardanti la “voce” di un individuo, dopo attente
valutazioni si è deciso di rappresentarne solo alcuni elementi presenti nell’analisi precedente che
vanno a dare inidicazioni sulle caratteristiche ottenute dall’osservatore o dal sensore di
riferimento. Per esempio “tonalita_bassa(marco)” , starà ad indicare che marco usa una tonalità
bassa nel modo di esprimersi.
tonalita_bassa(X), tonalita_alta(X), volume_alto(X), volume_basso(X),
ritmo_veloce(X), ritmo_lento(X), pause_brevi(X), pause_lunghe(X)
I concetti che forniscono informazioni sulla postura, si dividono in concetti riguardanti la
distanza tra gli interlocutori e concetti riguardanti la postura intesa come posizione. Per esempio
“distanza_50_1(giovanni, pippo)” indica che giovanni e pippo stanno interagendo ad una
distanza che varia tra i 50 cm e un metro. Anche in questo caso il nome che è stato dato ai
predicati è molto esplicativo e il significato che ognuno assume è spiegato nell’analisi fatta al
capitolo precedente.
distanza_0_50 (X, Y), distanza_50_1 (X, Y), distanza_1_3 (X, Y)
eretto_attenti(X), eretto_gambe_divaricate(X),
eretto_piede_inavanti(X), eretto_pollici_pantaloni(X),
eretto_gambe_incrociate(X), seduto_incrocio_caviglie(X),
seduto_intreccio_gambe(X), seduto_gamba_bracciolo(X),
seduto_cavalcioni_sedia(X), seduto_mani_dietrotesta(X)
palmi_aperti(X), palmi_vs_laltro(X), palmi_verso_basso(X)
gambe_divaricate(X), gambe_chiuse(X)
La mimica facciale si compone di pochi concetti ma molto significativi. Verranno rappresentati
i 3 sguardi principali descritti precedentemente e i 3 sorrisi più indicativi. Naturalmente lo
sguardo avrà un mittente e un destinatario; per questo il predicato fa uso di due variabili. Per
esempio “sguardo_traverso(giovanni, pippo)” indicherà che Giovanni ha lo sguardo di traverso
a Pippo.
sguardo_traverso(X,Y), sguardo_prolungato(X,Y), sguardo_sfuggente(X)
sorriso_forzato(X), sorriso_labbra_strette(X),sorriso_aperto(X)
I gesti rappresentano sicuramente la parte più ampia di questo progetto, ma nonostante ciò si è
voluto ridurre la loro analisi e di conseguenza la loro rappresentazione solo a quei gesti che sono
indicativi di uno stato d’animo oppure di un messaggio nascosto trasmesso.
attorcigliare_capelli(X), toccarsi_capelli_2mani(X),
toccarsi_capelli_1mano(X), testa_diritta(X), testa_inclinata(X),
scuotere_testa(X), annuire_lentamente(X), annuire_velocemente(X),
grattarsi_orecchie(X), toccarsi_naso(X), dilatare_narici(X),
arricciare_naso(X), stropicciare_occhio(X)
togliersi_peli_didosso(X), mani_fianchi_gomiti_esterno(X),
grattarsi_collo(X), battito_ciglia_prolungato(X),
indici_mani_siuniscono(X), applauso(X), alzare_spalle_collo(X),
mano_alta_palmo_verso_interlocutore(X)
L’uso di cue words è una branca ancora in via di definizione. Questi concetti che andremo ad
elencare come anche la fase di analisi si basano molto sulle linee guida estrapolate dall’ articolo
pubblicato dalla Dott. Isabella Poggi [4]. I primi due stanno ad indicare che una persona ha
usato nelle sue frasi vezzeggiativi o dispregiativi. Gli altri invece si rifanno all’uso di parole
positive, negative, di vergogna oppure di nervosismo da parte di un soggetto ‘X’. Per ogni
‘significato’ di quest’ultimi quattro concetti sono stati prodotti dei gruppi di parole in fase di
analisi, che verranno usati per asserire questi predicati dandoli in input al sistema esperto.
Questo compito di riconoscimento verrà svolto dal programma che si trova dall’altra parte del
middleware java. Gli elenchi per esteso sono riportati nel secondo capitolo di questo progetto.
uso_vezzeggiativi(X), uso_dispregiativi(X), parole_positive(X),
parole_vergogna(X), parole_negative(X), parole_nervosismo(X)
Anche se in maniera non ufficiale durante l’analisi ci si è imbattuti in delle letture che parlavano
di quanto il contesto relazionale e il contesto fisico siano fattori discriminatori per
l’assegnazione di etichette sociali a due persone che stanno conversando tra di loro. Per questo
si è deciso di prendere comunque in considerazione le informazioni ottenute cosi da non
escludere i due ambiti. Per quanto riguarda il contesto relazionale, oltre all’ età, già analizzata in
precedenza si considera l’abbigliamento che dovrà essere casual o elegante per fornire qualche
aiuto nella deduzione. In più si elencano solo i luoghi che sono o del tutto formali o del tutto
informali. Gli ibridi per questione di praticità non verranno considerati in questo progetto.
abbigliamento_casual(X), abbigliamento_elegante(X)
ufficio_pubblico, ufficio_privato, benzinaio, hotel,
centro_commerciale, centro_ristorazione, appartamento_privato,
libreria, palestra, parco, pub, centro_estetico, stadio
3.3) Concettualizzazione delle regole (funzioni e relazioni sui
concetti)
Regole per verificare se una conversazione è cooperativa/competitiva.
Si sono definite delle regole per determinare che un individuo “X” sia cooperativo o
competitivo (concetti intermedi) e con che livello (in base alla percentuale di incisione calcolata
da Albert Mehrabian). Si noti che queste regole sono composte da una sintassi composta da
cooperativa_xx e competitivo_xx. Il numero che è compreso nel nome dei due predicati sta ad
indicare con che percentuale l’individuo è predisposto alla cooperatività oppure con che
percentuale è predisposto ad essere competitivo. Per questo, questi predicati non sono
mutualmente esclusivi tra di loro; anzi il verificarsi di due dei seguenti predicati porta ad avere
la definizione in uno dei livelli (poco, abb. , molto) definiti più avanti con delle altre regole.
cooperativa_38(X) :- tonalita_bassa(X),pause_brevi (X)
cooperativa_55(X) :- palmi_aperti(X), gambe_divaricate(X)
cooperativa_55(X) :- palmi_vs_laltro(X)
competitivo_38(X) :- volume_alto(X)
competitivo_55(X) :- eretto_pollici_pantaloni(X), maschio(X), maschio
(Y)
competitivo_55(X) :- seduto_cavalcioni_sedia(X)
competitivo_55(X) :- seduto_intreccio_gambe(X), femmina (X)
e poi sei regole generali per definire il livello di cooperatività o competività tra gli individui. Per
questo si è voluto definire degli stati per il tipo di cooperatività o competitività che possono
variare tra poco, abbastanza, molto .
conv_poco_cooperativa(X,Y) :- cooperativa_38(X), cooperativa_38(Y)
conv_abbastanza_cooperativa(X,Y) :- cooperativa_55(X),
cooperativa_38(Y)
conv_molto_cooperativa(X,Y):-
cooperativa_55(X),cooperativa_55(Y),conv_poco_cooperativa(X,Y)
conv_poco_competitiva(X,Y) :- competitivo_38(X), competitivo_38(Y)
conv_abbastanza_competitiva(X,Y) :- competitivo_55(X),
competitivo_38(Y)
conv_molto_competitiva(X,Y) :- competitivo_55(X), competitivo_55(Y)
Il ruolo di potere che intercorre tra due persone in una conversazione, è dato principalmente da
uno stato di “Insicurezza” da parte di un soggetto e dalla voglia di “Dominazione” dell’altro
soggetto. Per questo si sono create queste regole che asseriscono che un soggetto ‘X’ sia
insicuro oppure sia dominante.
insicurezza (X) :- tonalita_alta(X)
insicurezza(X) :- volume_basso(X)
insicurezza (X) :- eretto_attenti(X)
insicurezza(X) :- seduto_incrocio_caviglie(X)
insicurezza(X) :- gambe_chiuse(X)
insicurezza(X) :- grattarsi_collo(X)
insicurezza(X) :- alzare_spalle_collo(X)
dominanza(X) :- volume_alto(X)
dominanza(X) :- eretto_gambe_divaricate(X)
dominanza(X) :- seduto_cavalcioni_sedia(X)
dominanza(X) :- seduto_mani_dietrotesta(X)
dominanza(X) :- gambe_divaricate(X)
dominanza(X) :- palmi_verso_basso(X)
dominanza(X) :- mani_fianchi_gomiti_esterno(X)
Se in una conversazione tra due individui ‘X’ e ‘Y’ si asserisce per il primo uno stato di
“Insicurezza” e per il secondo uno stato di “Dominanza” si viene a creare una relazione di
“Sottomissione” che fa scattare la seguente regola. In caso si creino due situazioni di
sottomissione in cui entrambi gli individui cercano di sottomettere l’altro allora scatta la regola
“entrambi_dominanti”.
sottomesso (X, Y) :- insicurezza(X), dominanza(Y)
entrambi_dominanti(X, Y) :- sottomesso(X,Y), sottomesso(Y,X)
Pensando anche ad un evoluzione del progetto si è voluto dividire questo ambito tra: regole che
rappresentano la formalità/informalità in termini di distanza tra i soggetti; regole che usano
come fattore discriminatorio il luogo; e regole generali (al momento solo due ma in futuro
potranno essere ampliate) che definiscono la formalità e informalità di una persona nel modo di
comportarsi.
informale_dis(X,Y) :- distanza_0_50 (X, Y)
informale_dis(X,Y) :- distanza_50_1 (X,Y)
formale_dis(X,Y) :- distanza_1_3(X,Y)
formale_luo (X,Y) :- ufficio_pubblico
formale_luo (X,Y) :- ufficio_privato
formale_luo (X,Y) :- benzinaio
informale_luo(X,Y) :- appartamento_privato
informale_luo(X,Y) :- libreria
informale_luo(X,Y) :- palestra
informale_luo(X,Y) :- parco
informale_luo(X,Y) :- pub
informale_luo(X,Y) :- centro_estetico
informale_luo(X,Y) :- stadio
formale (X) :- eretto_attenti(X)
informale (X) :- seduto_gamba_bracciolo (X)
Una volta assodato che un soggetto sia formale/informale si possono anche qui definire dei
livelli di formalità/informalità suddivisi in poco , abbastanza e molto. Questi livelli saranno
determinati dai vari predicati che saranno dedotti attraverso le regole precedenti.
conv_poco_formale(X,Y) :- formale_luo(X,Y), informale_dis(X,Y)
conv_poco_formale(X,Y) :- formale_luo(X,Y), informale (_)
conv_abb_formale(X,Y) :- formale_luo(X,Y), formale(_)
conv_abb_formale(X,Y) :- altro_luogo, formale(_), formale_dis(X,Y)
conv_molto_formale(X,Y) :- formale_luo(X,Y), formale_dis(X,Y)
conv_molto_formale(X,Y) :- formale_luo(X,Y), formale(X), formale(Y)
conv_poco_informale(X,Y) :- informale_luo(X,Y), formale_dis(X,Y)
conv_poco_informale(X,Y) :- informale_luo(X,Y), formale(X)
conv_abb_informale(X,Y) :- informale_luo(X,Y), informale (_)
conv_abb_informale(X,Y) :- altro_luogo, informale (_),
informale_dis(X,Y)
conv_molto_informale(X,Y) :- informale_luo(X,Y), informale_dis(X,Y)
conv_molto_informale(X,Y) :- informale_luo(X,Y), informale(X),
informale(Y)
Di seguito vengono elencate tutte le regole che governano la parte dei messaggi non verbali
trasmessi e dell’interesse dei soggetti in una conversazione. Si è voluto unire queste due branche
per la loro forte connessione e allo stesso tempo indipendenza nel dare informazioni utili. Tutti i
predicati descritti di seguito sono formati da un nome esplicativo che ne fa capire subito il
signficato.
intenzione_non_andarsene(X) :- eretto_gambe_divaricate(X), maschio(X)
persona_interessante_avanti(X) :- eretto_piede_inavanti(X)
interesse_sessuale(X,Y) :- eretto_pollici_pantaloni(X), maschio(X),
femmina(Y)
sulla_difensiva (X) :- eretto_gambe_incrociate(X)
nervosismo(X) :- attorcigliare_capelli(X)
insicura_aspetto_fisico(X,Y) :- femmina(X),
toccarsi_capelli_2mani(X),maschio(Y)
interesse_romantico(X,Y) :- femmina(X), toccarsi_capelli_1mano(X),
maschio(Y)
disaccordo(X) :- scuotere_testa(X)
concorde_vuole_parlare(X) :- annuire_velocemente(X)
concorde_vuole_ascoltare(X) :- annuire_lentamente(X)
mancanza_fiducia(X) :- grattarsi_orecchie(X)
nascondere_qualcosa(X) :- toccarsi_naso(X)
nascondere_qualcosa(X) :- stropicciare_occhio(X)
opnione_segreta(X) :- togliersi_peli_didosso(X)
non_voler_ascoltare(X) :- battito_ciglia_prolungato(X)
apprezzamento(X) :- applauso(X)
arrabbiato(X) :- dilatare_narici(X)
disgusto(X) :- arricciare_naso(X)
scusarsi(X) :- mano_alta_palmo_verso_interlocutore(X)
interesse_romantico(X,Y) :- sguardo_traverso (X, Y)
non_interessato(X) :- sguardo_sfuggente(X)
interesse_discorso(X,Y) :- sguardo_prolungato(X,Y)
vuole_apparire_cortese(X) :- sorriso_labbra_strette(X)
finge_gioia(X) :- sorriso_forzato(X)
sincero (X) :- sorriso_aperto(X)
In ultimo ci sono le regole per la definizione della relazione che intercorre tra i due soggetti
osservati e lo stato d’animo che coinvolge gli stessi. Anche in questo caso si sono definiti degli
stati per quanto riguarda la relazione che intercorre tra i soggetti ed essi sono :
Familiare/Amichevole, Amichevole, Sconosciuto. La definizione dei concetti intermedi è
formata da dei predicati seguiti dalla tipologia di fattore da cui derivano. Per esempio
‘familiare_dist’ significa che hanno un rapporto familiare se calcolato in base alla distanza.
Naturalmente questi sono solo concetti intermedi che andranno a far attivare o meno concetti
finali quali ‘familiare(X,Y), amichevole(X,Y) e sconosciuti(X,Y)’.
familiare_dist (X,Y):- distanza_0_50 (X, Y)
amichevole_dist (X,Y) :- distanza_50_1 (X,Y)
sconosciuti_dist (X,Y) :- distanza_1_3 (X,Y)
amichevole_eta (X,Y) :- eta_simili(X,Y)
familiare_abbigliamento(X,Y):- abbigliamento_casual(X),
abbigliamento_casual(Y)
amichevole_abbigliamento(X,Y) :- abbigliamento_elegante(X),
abbigliamento_elegante(Y)
sconosciuti_abbigliamento(X,Y) :- abbigliamento_elegante(X),
abbigliamento_casual(Y)
familiare(X,Y) :- familiare_55(X,Y), familiare_10(X,Y)
amichevole(X,Y) :-amichevole_55(X,Y), amichevole_10(X,Y)
amichevole(X,Y) :- familiare_55(X,Y), amichevole_10(X,Y)
amichevole(X,Y) :- amichevole_55(X,Y), familiare_10(X,Y)
sconosciuti(X,Y) :- sconosciuti_55(X,Y), amichevole_10(X,Y)
sconosciuti(X,Y) :- sconosciuti_55(X,Y), sconosciuti_10(X,Y)
enfasi_positiva (X) :- uso_vezzeggiativi(X)
enfasi_negativa (X) :- uso_dispregiativi (X)
positività (X) :- parole_positive(X)
disagio(X) :- parole_vergona(X)
negatività(X) :- parole_negative(X)
collera(X) :- parole_nervosismo(X)
3.4) Fatti nella base di conoscenza
Nella fase di concettualizzazioni sono stati individuati ed esplicitati tutti i “concetti chiave” che
permettono di descrivere e disambiguare ciascun rappresentazione del contesto dall’altra. Questi
concetti però devono essere rappresentati in modo da poter essere utilizzati dal motore
inferenziale che si è sviluppato.
Perciò ogni fatto asserito o comunque gestito dal sistema esperto in questione sarà rappresentato
secondo la sintassi:
fatto(predicato da asserire).
dove predicato da asserire verrà sostituito con il predicato che si vorrà asserire e quindi
aggiungere alla base di conoscenza del sistema esperto.
Per esemplificare il concetto precedentemente descritto riporto un esempio con un predicato
sopra elencati. Se l’osservatore che inserisce i dati nel sistema esperto osserva che Giovanni ha
la tonalità di voce bassa lo comunicherà all’interfaccia grafica che attraverso la regola che
gestisce le asserzioni (“asseriscifact”) andrà ad eseguire la query
“assert(fatto(tonalita_bassa(giovanni)))”.
Per fare ciò si è andato a definire un nuovo predicato “asseriscifact” il cui funzionamento è
esplicitato nel paragrafo riguardante il motore inferenziale.
3.5) Regole nella base di conoscenza
Per quanto riguarda le regole che inferiscono conoscenza dai fatti, anche loro sono state
rappresentate seguendo una struttura sintattica rigida che ha permesso poi alle regole di
inferenza di utilizzare le stese. La sintassi con cui si è voluto rappresentare le regole è la
seguente :
regola([LHS]) :- [RHS].
dove la parte LHS rappresenta la parte sinistra della regola e RHS la parte destra da verificare.
Si è voluto aggiungere il tag regola poichè si è ritenuto utile distinguere sintatticamente le
regole dai fatti che in linguaggio Prolog (liguaggio usato per lo sviluppo del sistema esperto)
corrispondono a regole senza parte destra.
tonalita_bassa(giovanni). �� tonalita_bassa(giovanni):- TRUE.
Questa scelta verrà compresa meglio nel prossimo capitolo dove verrà spiegato la progettazione
e lo sviluppo del meta-interprete prolog. In più si può notare che sia la parte destra, sia la parte
sinistra (escluso il tag regola) sono racchiusi tra parentesi quadre. Le parentesi quadre nel
linguaggio prolog sono sinonimo di liste, che si è scelto di usare per poter avere una maggiore
manegevolezza delle regole e dei fatti durante l’implementazione del motore inferenziale.
Volendo fare un esempio contestuale all’esempio precedente una regola del sistema esperto
sulla tonalità bassa di una determinata persona è :
regola([fatto(cooperativa_38(X))]) :- [fatto(tonalita_bassa(X))),(fatto(pause_brevi(X))].
dove X è una variabile che rappresenta il nome del soggetto in questione.
4) Sviluppo
Questo progetto mira a creare un sistema esperto che riesca, date varie informazioni in input su
una conversazione, a dedurre informazioni nascoste in maniera implicita nello scambio
comunicazionale che sta avvenendo. Questo fa in modo che il sistema ragioni su questi dati a
prescindere dalla loro provenienza.
In questo progetto, come già detto precedentemente, i dati non proveranno dai vari sensori reali
ma essi verranno simulati attraverso un’ interfaccia grafica che permetterà ad un osservatore di
svolgere il lavoro dei vari sensori e quindi di catturare dati e immetterli nel sistema esperto.
Questa scelta è dovuta al fatto che non si dispone di molti dei sensori che servono alla
rilevazione dei dati di input; piuttosto mira a creare uno strato di separazione (un middleware)
tra il sistema esperto e l’ acquisizione dei dati di input. Infatti in futuro si potrà agevolmente
sostituire l’ interfaccia grafica con dati che provengono direttamente dai sensori predisposti. I
sensori invieranno i dati ad un middleware JAVA che dopo averli standardizzati e raffinati li
darà in pasto al motore inferenziale ottenendo lo stesso risultato che si consegue attraverso l’
uso dell’ interfaccia grafica. Di seguito troviamo lo schema di funzionamento del sistema,
astratto in maniera tale che si capiscano tutti i meccanismi coinvolti.
Fig.5 - Schema funzionale del sistema
4.1) Scelta strategia di ragionamento
Un sistema esperto è un sistema in grado di risolvere problemi in un dominio limitato, ma con
prestazioni simili a quelle di un esperto umano del dominio stesso. Da un lato, quindi, ci si
limita a considerare domini limitati e particolari classi di problemi, dall’altro ci si pone come
obbiettivo il raggiungimento di prestazioni comparabili con quelle di un esperto. Un sistema
esperto può essere caratterizzato dalle seguenti proprietà :
- Rappresentazione esplicita della conoscenza. La conoscenza sul dominio è rappresentata
in modo esplicito all’interno del sistema e non codificata in algoritmi di risoluzione o in
funzioni euristiche;
- Meccanismi di ragionamento. Tali meccanismi devono essere definiti in modo preciso,
tendendo conto del particoare tipo di problema che si vuole risolvere.
Si può affermare con certezza che ogni sistema esperto necessita di una specializzazione del
ragionamento per il proprio dominio. Uno dei modi più frequenti per rappresentare la base di
conoscenza e il ragionamento dei sistemi esperti è quello dei sistemi a regolo di produzione.
Un sistema a regole di produzione è costituito da tre componenti fondamentali:
- Base di conoscenza a regole (in cui sono contenute le regole di produzione;
- Memoria di lavoro (memoria a breve termine, in cui sono contenuti i dati e le
conclusioni raggiunte dal sistema);
- Motore inferenziale ( che sceglie quale regola di produzione è applicabile sul contenuto
della memoria di lavoro).
La strategia con cui le regole vengono applicate dipende dai dati del particolare problema da
risolvere; in particolare, ci sono due alternative fondamentali nel definire la stategia di controllo
per l’uso delle regole:
- Forward : detto anche controllo guidato dai dati (data-driven), in questo caso sono i
dati che controllano il sistema e le regole che vengono attivate;
- Backward: detto anche controllo guidato dal goal (goal-driven), in questo caso la
memoria di lavoro contiene l’obiettivo che si vuole raggiungere e il processo di
ragionamento corrisponde alla dimostrazione dell’obiettivo.
Questo progetto è sviluppato nel liguaggio Prolog (PROgrammation en LOGique) un linguaggio
di programmazione che adotta il paradigma di programmazione logica. Vi è una notevole
similitudine tra i sistemi a regole di produzione e il Prolog. Infatti può essere visto come un
stistema a regole di produzione in cui:
- Le clausole Prolog corrispondono alle regole di produzione;
- Le asserzioni Prolog corrispondono ai fatti;
- Il database Prolog corrisponde alla memoria di lavoro e alla base di conoscenza;
- L’interprete Prolog corrisponde al motore inferenziale (basato su una strategia
backward).
La strategia di ragionamento che si è scelto di implementare considerato il dominio applicativo
del sistema esperto che si è andato a produrre è la strategia Forward. Questa scelta è dovuta al
fatto che il sistema esperto non andrà a rispondere a quesiti di tipo “solve(GOAL) ?” , ma dati
una serie di “fatti” in ingresso dall’osservatore che utilizzerà l’applicativo dovrà dedurre
informazioni aggiuntive sulla situazione che si sta osservando. Questo è un tipico approcio
data-driven.
4.2) Meta - interprete forward
Il toolkit scelto per lo sviluppo del sistema esperto è l’ambiente SWI-Prolog. La scelta è stata
vincolata dal fatto che quest’ambiente si adatta bene con la libreria jpl, che permette un’
interazione con il linguaggio Java cosi da permettere l’integrazione del sistema esperto con
qualunque altro sistema. In questo progetto è stato fondamentale l’integrazione con Java per la
parte di sviluppo dell’interfaccia grafica che è stata interamente sviluppata in linguaggio Java
con ambiente NetBeans. In futuro l’integrazione con Java potrà permettere di sostituire man
mano l’input manuale dei dati con degli input provenienti direttamente da sistemi automatizzati.
La regola con cui far partire l’iterazione che applica le regole che ‘matchano’ sui dati che si
sono asseriti è la regola interpreta cosi strutturata:
interpreta(HEAD):-
clause(regola(HEAD),BODY),
verifica(BODY),
asserisci(HEAD),
deduzione(HEAD,BODY).
Iniziamo a descrivere la regola dalla sua ‘testa’. Si è scelto di inserire la variabile HEAD, poichè
il prolog in questa maniera ci restituirà tutte le possibili soluzioni per quella variabile che
vengano soddisfatte dalle clausole presenti nella parte del ‘corpo’. In caso non si fossero avuti
parametri la regola avrebbe interpretato non più tutti i risultati ma solamente il primo che
soddisfacesse la stessa, non realizzando l’effetto desiderato.
Cosi facendo la regola interpreta viene considerata per tutte le (regola(HEAD),BODY) presenti
nella base di conoscenza. Queste regole vengono considerate attraverso la condizione
clause(regola(HEAD),BODY).
Il predicato ‘clause’ in prolog estrae dalla memoria tutti i predicati aventi una determinata testa.
L’ unico vincono di questo predicato è che la testa non può essere interamente una variabile. Per
questo motivo si è scelto di definire le regole secondo la struttura
regola([LHS]) :- [RHS].
cosi da poter usare il predicato ‘clause’ specificando solamente il path “regola”. In questo modo
si può evitare di coinvolgere i fatti che non verranno considerati da questa prima condizione per
una mancanza di match sulla parte sinistra delle regole. La seconda possibilità di implementare
una strategia di forward poteva essere la definizione di un operatore ‘==>’ e la definizione delle
regole nel formato “ regola ID : [condizione1,condizione2,..] ==> [azione1,azione2,..] “ e di un
meta interprete che gestisse queste regole come nel forward puro.
Si è scelto di implementare la prima strategia per mantenere una linea di ‘ibridità’ tra il forward
e il backward, dato che le regole sono rappresentate comunque nel formato classico del prolog
(che implementa il backward) ma vengono trattate come forward da questo motore inferenziale
che si è andato a costruire. Questo da possibilità a futuri scenari in cui vengano implementate
entrambe le strategie usando la stessa struttura che si è andata a definire per fatti e regole.
La condizione
verifica(BODY)
verifica che i predicati presenti nella parte destra della regola siano veri e in caso positivo passa
alla condizione successiva
asserisci(HEAD)
la quale provvederà ad inserire la HEAD nella memoria a breve termine. Ricordiamoci che la
HEAD in questione sarà una lista con la seguente sintassi “[fatto(predicato da asserire)]”. Una
volta asserito il fatto in questione andiamo a tracciare la deduzione avvenuta richiamando il
predicato
deduzione(HEAD,BODY)
il quale permette di tenere traccia della deduzione avvenuta, cosi da poter essere riutilizzato
nella fase di spiegazione del perchè.
In pratica la regola rappresentata attravero la sintassi “regola([HEAD]) :- [BODY]” può essere
vista come un ragionamento forward equivalente a
SE (BODY) ALLORA (HEAD) oppure più simbolicamente BODY ==> HEAD.
Il predicato “verifica(BODY)” è un predicato che permette di verificare che il BODY di una
regola sia vero o falso. Naturalmente bisogna tener presente che il BODY sarà una lista di fatti e
per questo motivo questo predicato è stato definito in maniera ricorsiva cosi da poter analizzare
ogni singolo elemento della lista.
verifica([A|B]):- call(A), verifica(B).
La rappresentazione della lista nel formato [A|B] permette di splittare la lista in due parti: la
variabile A prenderà il valore del primo elemento della lista; la variabile B sarà a sua volta una
lista contenente tutti gli elementi meno il primo (cioè la lista originaria tagliata della testa).
Il predicato di meta-livello predefinto del prolog “call(A)” richiede all’interprete la
dimostrazione di A. Se la valutazione del goal A da parte dell’interprete prolog è positiva il
predicato in questione assume il valore vero, altrimenti fallisce. La ricorsione continua
attraverso la condizione “verifica(B)” , che richiama la stessa regola ma passandogli la lista
privata della propria testa che è stata già analizzata dal predicato call(A). La ricorsione finisce
quando la lista rimanente (B) è una lista vuota. A sto punto “verifica(B)” cercherà se esiste un
“verifica([])” tra le parti sinistre delle regole e in caso negativo fallirà. Per questo, per
concludere la ricorsione in maniera positiva in caso si siano verificati tutti i fatti e la lista sia
diventata vuota si è aggiunto il predicato (senza corpo)
verifica([]).
che permette di far diventare vera anche l’ultima condizione della ricorsione cosi da rendere il
predicato iniziale “verifica(BODY)” TRUE.
Per il predicato “asserisci(HEAD)” si è fatto lo stesso ragionamento appena descritto. Anche
HEAD è una lista e i fatti contenuti al suo interno vanno asseriti singolarmente. Per questo la
soluzione ricorsiva è stata adottata anche in questo caso.
asserisci([A|B]):- asserisci(B), not(A), asserta(A).
asserisci([]).
Unica differenza con il predicato verifica è che il predicato asserisci si accerta di non avere già
quel fatto che sta per asserire nella memoria di lavoro evitando quindi di duplicare le
informazioni. Quindi prima di asserire il fatto e iniziare la ricorsione con la lista decapitata c’è
la condizione “not(A)” che restituisce vero se A non è presente nella memoria, falso altrimenti.
Anche la posizione in cui è posizionato il “not(A)” è strategica. Infatti facendo l’ipotesi di avere
3 elementi all’interno della lista da asserire e che l’elemento centrale sia già presente nella
memoria di lavoro,se il “not(A)” fosse stata la prima condizione si sarebbe avuto l’effetto di
poter asserire solamente il primo fatto della lista, perchè il secondo not(A) sarebbe fallito e non
avrebbe avanzato la ricorsione andando a considerare il terzo elemento. Invece in questa
maniera la ricorsione è il primo elemento che viene richiamato, cosi da dare a tutti la possibilità
di essere immessi nella memoria di lavoro. Poi attraverso la strategia di backtracking ogni
asserzione sarebbe stata valutata al suo livello e in caso positivo aggiunta in memoria altrimenti
scartata.
Collegato a questo predicato ne è stato definito un altro per asserire fatti singoli. Il predicato è
“asseriscifact(A)” ed è utile sopratutto per i richiami da interfaccia grafica in cui un osservatore
inserisce i fatti che osserva nella base di conoscenza. E’ stato necessario definirlo sopratutto
perchè il precedente “asserisci([A|B])” era compatibile con il tipo lista, cosa che qui era inutile
creare dato che l’immissione nella memoria avviene un fatto per volta.
Un altro predicato creato è
deduzione(HEAD,BODY)
che serve a memorizzare tutte le regole utilizzate fino a quel momento, cosi da poter
implementare la funzionalità di spiegazione di come sono stati dedotti alcuni fatti nella base di
conoscenza. Questo semplice predicato in realtà non fa altro che asserire un nuovo
(sintatticamente parlando) tipo di fatto con la seguente sintassi
dimostrato([ lista fatti dedotti][lista fatti da cui è partita la deduzione])
cosi da avere in memoria la regola applicata per dedurre quel fatto. Questo predicato viene
richiamato attraverso l’interfaccia grafica quando si usa la funzionalità di spiegazione.
E’ stato sviluppato un metodo di spiegazione anche per l’uso del sistema non da interfaccia
grafica, dove viene richiamato il predicato “spiega(GOAL)” che attraverso dei passi di
ricorsione spiega tutto l’albero che è stato percorso per asserire quel GOAL. Associato a questo
naturalmente è stato creato anche un predicato di stampa, per stampare le liste di fatti contenuti
nei vari “dimostrato” e avere anche un format testuale per la facile lettura della spiegazione.
spiega(GOAL)
:-
dimostrato(GOAL,REGOLE),!, stampa(GOAL), write('dedotto'), write('dai fatti:') , stampa(REGOLE),nl,spiegare(REGOLE).
spiegare([R1|L]):- spiega([R1]), spiegare(L).
spiegare([]):- write(' asserito dall osservatore').
stampa([R1|L]) :- write(R1),write(' '), stampa(L).
stampa([]).
Per creare anche una tipologia di spiegazione che spiegasse il goal ottenuto non solo sotto forma
di regole e predicati da cui è stato dedotto ma anche in maniera descrittiva, si sono creati dei
nuovi predicati che hanno la funzione di esplicitare il concetto racchiuso nel predicato. Questa
esigenza è venuta fuori dopo un paio di test con gli utenti che si sono effettuati per testare
l’usabilità del sistema. I concetti di spiegazione hanno la seguente forma e ne è stato definito
uno per ogni concetto che sia intermedio o finale. Non sono stati definiti i concetti iniziali dato
che essendo inseriti dall’utente attaverso interfaccia grafica hanno già una facile comprensione.
La sintassi del predicato di spiegazione è
spiegazione(fatto(...(..)),’ descrizione informale del concetto’).
e questo predicato viene richiamato direttamente dall’interfaccia grafica attraverso una
Query (spiegata nel paragrafo successivo) che ne permette la visualizzazione nella GUI
costruita. L’elenco dei fatti di spiegazione è il seguente:
spiegazione(fatto(cooperativa_38(_)),'il livello di cooperatività da parte del soggetto è al 38 percento. _ Questa percentuale(bassa) è data dalla tipologia dei fatti da cui è stato dedotto.').
spiegazione(fatto(cooperativa_55(_)),'il livello di cooperatività da parte del soggetto è al 55 percento. _ Questa percentuale(medio alta) è data dalla tipologia dei fatti da cui è stato dedotto.').
spiegazione(fatto(competitivo_38(_)),'il livello di competitività da parte del soggetto è al 38 percento. _ Questa percentuale(bassa) è data dalla tipologia dei fatti da cui è stato dedotto.').
spiegazione(fatto(competitiva_55(_)),'il livello di competitività da parte del soggetto è al 55 percento. _ Questa percentuale(medio alta) è data dalla tipologia dei fatti da cui è stato dedotto.').
spiegazione(fatto(conv_poco_cooperativa(_,_)),'la conversazione tra i due soggetti è poco cooperativa. _ Questo lo si capisce dal fatto che i due soggetti a loro volta danno solo segnali di bassa cooperatività.').
spiegazione(fatto(conv_abbastanza_cooperativa(_,_)),'la conversazione tra i due soggetti è abbastanza cooperativa. _ Questo lo si capisce dal fatto che uno dei due soggetti è più propenso alla cooperazione.').
spiegazione(fatto(conv_molto_cooperativa(_,_)),'la conversazione tra i due soggetti è molto cooperativa. _ Entrambi i soggetti presentano sintomi di buona cooperazione.').
spiegazione(fatto(conv_poco_competitiva(_,_)),'la conversazione tra i due soggetti sembra diventare competitiva. _ Questo lo si capisce dal fatto che i due soggetti a loro volta danno piccoli segnali si competitività.').
spiegazione(fatto(conv_abbastanza_competitiva(_,_)),'la conversazione tra i due soggetti è competitiva. _ Questo lo si capisce dal fatto che entrambi danno segnali di competitività.').
spiegazione(fatto(conv_molto_competitiva(_,_)),'la conversazione tra i due soggetti è molto competitiva. _ Entrambi i soggetti presentano sintomi di alta competitività.').
spiegazione(fatto(insicurezza(_)),'il soggetto si sente insicuro e/o non si trova a proprio agio nella conversazione. _ Comunicando segnali di insicurezza.').
spiegazione(fatto(dominanza(_)),'il soggetto comunica segnali di dominanza. _ La maggior parte delle volte sono intrinsechi nel modo naturale di comportarsi.').
spiegazione(fatto(sottomesso(_,_)),'il primo soggetto(in parentesi) è in una situazione di sottomissione da parte del secondo soggetto.').
spiegazione(fatto(entrambi_dominanti(_,_)),'entrambi cercano di porsi in una situazione di dominanza rispetto all altro.').
spiegazione(fatto(informale_dis(_,_)),'la distanza tra i soggetti è definita informale perchè si è nel raggio _ della zona personale o intima aperta di solito a familiari,amici o colleghi.').
spiegazione(fatto(formale_dis(_,_)),'la distanza tra i soggetti è definita formale perchè si è fuori dal raggio _ della zona personale. Di solito ci si tiene a questa distanza con gli sconosciuti _ o con chi si ha poca confidenza.').
spiegazione(fatto(formale_luo(_,_)),'il luogo in cui si svolge la conversazione è un luogo dove per lo _ più si svolgono interazioni di tipo formale.').
spiegazione(fatto(informale_luo(_,_)),'il luogo in cui si svolge la conversazione è un luogo dove per lo _ più si svolgono interazioni di tipo informale.').
spiegazione(fatto(formale(_)),'il soggetto è in una posizione che determina la sua rigidezza.').
spiegazione(fatto(informale(_)),'il soggetto è in una posizione che determina la sua disinvoltura.').
spiegazione(fatto(conv_poco_formale(_,_)),'la conversazione risulta caratterizzata da alcuni tratti di formalità.').
spiegazione(fatto(conv_abb_formale(_,_)),'la conversazione risulta caratterizzata da tratti di formalità.').
spiegazione(fatto(conv_molto_formale(_,_)),'la conversazione risulta caratterizzata da numerosi tratti di formalità.').
spiegazione(fatto(conv_poco_informale(_,_)),'la conversazione potrebbe essere informale.').
spiegazione(fatto(conv_abb_informale(_,_)),'la conversazione sembra essere informale.').
spiegazione(fatto(conv_molto_informale(_,_)),'la conversazione risulta essere informale.').
spiegazione(fatto(intenzione_non_andarsene(_)),'il soggetto in questione non ha intenzione di abbandonare la conversazione.').
spiegazione(fatto(persona_interessante_avanti(_)),'il soggetto ritiene che il suo interlocutore sia una persona interessante.').
spiegazione(fatto(interesse_sessuale(_,_)),'il soggetto maschile ha interesse sessuale verso il soggetto femminile.').
spiegazione(fatto(sulla_difensiva(_)),'il soggetto è sulla difensiva.').
spiegazione(fatto(nervosismo(_)),'il soggetto presenta segni di nervosismo.').
spiegazione(fatto(insicura_aspetto_fisico(_,_)),'il soggetto femminile manifesta insicurezza sul proprio aspetto fisico.').
spiegazione(fatto(interesse_romantico(_,_)),'il soggetto manifesta un certo interesse romantico per il suo interlocutore.').
spiegazione(fatto(disaccordo(_)),'il soggetto sembra non essere in accordo con il pensiero del suo interlocutore.').
spiegazione(fatto(concorde_vuole_parlare(_)),'il soggetto è concorde e intende esprimere la propria opinione.').
spiegazione(fatto(concorde_vuole_ascoltare(_)),'il soggetto è concorde e vuole continuare ad ascoltare.').
spiegazione(fatto(mancanza_fiducia(_)),'il soggetto non prova piena fiducia verso il suo interlocutore.').
spiegazione(fatto(nascondere_qualcosa(_)),'il soggetto ha qualcosa da nascondere.').
spiegazione(fatto(opinione_segreta(_)),'il soggetto ha un opinione segreta sulla conversazione.').
spiegazione(fatto(non_voler_ascoltare(_)),'il soggetto non è interessato alla conversazione.').
spiegazione(fatto(apprezzamento(_)),'il soggetto apprezza molto il suo interlocutore').
spiegazione(fatto(arrabbiato(_)),'il soggetto è alterato.').
spiegazione(fatto(disgusto(_)),'il soggetto non gradisce il contenuto della conversazione.').
spiegazione(fatto(scusarsi(_)),'il soggetto vuole scusarsi con il suo interlocutore.').
spiegazione(fatto(non_interessato(_)),'il soggetto non è interessato a continuare la conversazione.').
spiegazione(fatto(interesse_discorso(_,_)),'il soggetto è particolarmente interessato al dialogo.').
spiegazione(fatto(vuole_apparire_cortese(_)),'il soggetto vuole apparire cortese nei confronti del suo interlocutore.').
spiegazione(fatto(finge_gioia(_)),'il soggetto cerca di manifestare finta gioia.').
spiegazione(fatto(sincero(_)),'il soggetto risulta essere sincero.').
spiegazione(fatto(familiare_dist(_,_)),'tra i soggetti esiste una certa confidenza. _ Lo si capisce dalla poca distanza che li separa.').
spiegazione(fatto(amichevole_dist(_,_)),'i soggetti sono in un rapporto amichevole. _ Lo si può capire dalla distanza che li separa.').
spiegazione(fatto(sconosciuti_dist(_,_)),'i soggetti risultano avere un rapporto poco confidenziale. _ Lo si può capire dalla distanza che li separa.').
spiegazione(fatto(amichevole_eta(_,_)),'i soggetti sono a loro agio avendo età simili.').
spiegazione(fatto(familiare_abbigliamento(_,_)),'i soggetti sono in una situazione rilassata. _ Lo si può capire dall abbigliamento casual dei due.').
spiegazione(fatto(amichevole_abbigliamento(_,_)),'i soggetti potrebbero avere gli stessi interessi.').
spiegazione(fatto(sconosciuti_abbigliamento(_,_)),'i soggetti sembrano avere diversi interessi al momento della conversazione. _ Sono vestiti in maniera diversa.').
spiegazione(fatto(familiare(_,_)),'tra i soggetti esiste un rapporto di confidenza.').
spiegazione(fatto(amichevole(_,_)),'tra i soggetti esiste un rapporto amichevole.').
spiegazione(fatto(sconosciuti(_,_)),'tra i soggetti non esiste un rapporto di confidenza.').
spiegazione(fatto(enfasi_positiva(_)),'il soggetto è in uno stato di esaltazione.').
spiegazione(fatto(enfasi_negativa(_)),'il soggetto è in uno stato di abbattimento.').
spiegazione(fatto(positività(_)),'il soggetto è molto positivo.').
spiegazione(fatto(disagio(_)),'il soggetto non si trova a proprio agio.').
spiegazione(fatto(negatività(_)),'il soggetto è in uno stato di negatività.').
spiegazione(fatto(collera(_)),'il soggetto prova rancore.').
Cenni di backward
Volendo immaginare una funzionalità di backward per lo stesso sistema esperto
descritto in questo documento e considerato lo schema sintattico definito per l’utilizzo
di regole, fatti e predicati già utilizzati nel motore inferenziale con ragionamento in
forward si riporta di seguito un prototipo di motore inferenziale con ragionamento in
backward che si potrebbe integrare nel sistema in futuro.
Al momento il funzionamento di questo tipo di ragionamento essendo inutile per questo
sistema esperto è stato lasciato tra i commenti del file prolog in questione. Questo
piccolo meccanismo è basato sul riutilizzo delle regole soprastanti è sulla definizione
delle regole nel formato descritto nella documentazione allegata di cui si riporta la
sintassi "regola[HEAD] :- [BODY]".
Si può notare che avendo definito una sintassi molto generale, riutilizzabile e sopratutto
inspirata alla struttura delle regole per un motore backward, i predicati da definire per
far si che il sistema sia funzionante in maniera sia backward che forward sono i
seguenti.
solvebackward(HEAD) :- clause(regola(HEAD),BODY), verifica(BODY).
solvebackward(true).
Con questi pochi concetti si può attivare il meccanismo di backward per controllare se
un fatto sia vero o falso mantenendo inalterate i concetti prima definiti. La maggior
parte dei predicati precedentemente definiti sono potenzialmente riutilizzabili.
4.3) Interfaccia grafica java
Per rendere il sistema facile da usare dal punto di vista dell’osservatore che dovrà introdurre in
memoria molte caratteristiche raccolte guardando una conversazione, si è deciso di sviluppare
un’ interfaccia grafica in linguaggio Java che racchiudesse tutte le funzionalità del sistema. Per
fare ciò è stato usato l’ ambiente di sviluppo NetBeans [11] e in particolare il package
javax.swing utile per l’appunto alla creazione e al settaggio delle componenti grafiche (Frame,
Panel, Button, TextArea, ecc.).
Attraverso questo si è creata l’ interfaccia grafica voluta con una buona interazione con l’utente
cosi da permettere sia la rapida e continuativa introduzione di osservazioni nel sistema sia la
possibilità di osservare in maniera diretta i dati dedotti volta dopo volta, senza dover aspettare la
fine delle osservazioni per effettuare una query di avvio all’inferenza. Per collegare l’interfaccia
grafica al sistema prolog si è usata la libreria “jpl.jar” [12], libreria che consente di:
• alle applicazioni Prolog di sfruttare tutte le classi Java, le sue istanze e i suoi metodi;
• consentire alle applicazioni Java di manipolare tutte le libreri standard Prolog, i vari
predicati ed eseguire query sulla base di conoscenza.
Fig. 6 -Inclusione della libreria jpl.jar nel progetto Java SEDUCE
Dando un’ occhiata al codice prodotto si può notare che nel metodo main (metodo principale
che viene eseguito all’ avvio di un programma java) della classe Dialogo (classe principale del
progetto SEDUCE) vengono eseguite subito delle operazioni di “consult” che servono a caricare
in memoria sia il file “motore_forward.pl” che contiene il motore inferenziale del sistema sia il
file “kb.pl” che ha al suo interno la serie di regole di deduzione descritte nel capitolo di
concettualizzaione (paragrafo 3.3).
Fig.7 - Main della classe Dialogo.java
Ad ogni inserimento di un’ osservazione il sistema invece crea una Query (oggetto java che
serve per eseguire query nell’interprete prolog) che permettera l’esecuzione del predicato
“asseriscifact(..)” nell’interprete prolog. Successivamente dopo ogni inserimento di un
osservazione si va a richiamare la Query “interpreta(X)” cosi da poter avviare l’inferenza ed
avere i risultati man mano che si procede con l’inserimento. Da questa funzione attraverso il
metodo “nextElement().get(X)” recuperiamo tutti le risposte che il prolog andrà a fornire alla
query “interpreta(X)”.
Fig. 8 - Query di interazione tra Java e Prolog
L’interfaccia grafica è stata strutturata in maniera tale da avere quattro sezioni separate che
servono ad avere una maggiore manegevolezza nell’uso dell’applicativo.
Fig. 9 - Schermata generale interfaccia grafica
La prima sezione riguarda l’inserimento delle informazioni generali sui soggetti come nome,
sesso e anche la possibilità di inserire una foto dello stesso. In questa sezione si è ritenuto
opportuno anche inserire l’osservazione di due fatti che non sono associati ad un solo soggetto
ma ad entrambi e che quindi valeva la pena mettere in questa sezione generale; la distanza tra i
due soggetti e il luogo in cui sono gli stessi si asseriscono attraverso questa sezione
(contraddistinta da color turchese).
Fig.10 - Sezione riguardante informazioni sui soggetti
La seconda e terza sezione(colore giallo) sono simmetricamente uguali, ma con funzioni
indipendenti tra loro. Esse si riferiscono rispettivamente ai due soggetti in questione e permetto
sia l’inserimento dei fatti osservati che la visualizzazione di uno storico dei fatti asseriti. Essa è
composta da una serie di menu a tendina che si innestano tra loro fino a che non si selezione un
predicato e lo si asserisce.
Fig.11 - Sezione riguardante l’inserimento di ciò che si osserva
La quarta sezione è stata creata per la gestione degli output del sistema esperto. Infatti è formata
da due caselle di testo: nell’ area di testo superiore sono contenuti i fatti che il sistema ha
dedotto attravero le regole di inferenza; nell’area di testo inferiore si può avere una spiegazione
del perchè ha asserito quel fatto e di come il sistema ci è arrivato (regole utilizzate). Questa
spiegazione è facilmente ottenibile selezionando un fatto dalla lista delle deduzioni ottenute e
usando l’apposito pulsante “Chiedi spiegazioni”.
Fig. 12 - Sezione riguardante l’output del sistema esperto
5) Utilizzo e sperimentazione
Per eseguire l’applicativo in questione basta recarsi nella cartella dove è contenuto il file
SEDUCE.jar e da linea di comando avviare l’applicativo java attraverso la linea di comando
“java –jar SEDUCE.jar”. Perchè il tutto funzioni perfettamente bisogna avere i seguenti requisiti
installati sul sistema:
- JVM (Java Virtual Machine) in funzione - contenuta anche nella versione Java per
desktop[13];
- Interprete SWI-Prolog installato (il sistema è stato testato con la versione 6.2.2);
- i file “motore_forward.pl” e “kb.pl” devono essere nella stessa directory del file
SEDUCE.jar;
- avere all’interno della stessa directory una sotto-directory dal nome lib con all’interno la
libreria “jpl.jar”(libreria che si trova nella cartella ‘lib’ del swi-prolog);
- su windows aggiungere alla variabile d’ambiente di sistema ‘path’ la seguente stringa
“C:\Program Files\pl\lib\jpl.jar;”.
Una volta che ci siamo assicurati di avere questi seguenti requisiti possiamo lanciare il comando
attraverso linea di comando e la nostra applicazione si avvierà e in maniera nascosta anche il
nostro interprete prolog si avvierà.
Fig. 13 - Avvio da prompt dei comandi di Windows
Una volta avviato il sistema si avrà la seguente schermata che permetterà solamente di inserire
le informazioni sui soggetti; una volta fatto ciò compariranno le schermate che permetto
l’asserzione dei fatti osservati.
Fig. 14 - Screenshot inserimento dati utenti
Si noti che una volta selezionato il sesso, inserito il nome e cliccato sul pulsante “inserisci
informazioni” di ciascun soggetto non sarà più possibile modificare le stesse. Questo perchè
saranno asseriti dei fatti nella base di conoscenza in cui verranno utilizzati queste informazioni
come parametro di altri predicati e quindi creerebbe conflitti nel match dei fatti con le regole.
L’unica opzione che si può cambiare anche nell’esecuzione in corso del programma è la foto del
soggetto. Basterà cliccarci su per far apparire la schermata di scelta foto all’interno del proprio
pc.
Una volta inserite le informazioni base, compariranno tutte le opzioni per la selezione e
l’inserimento dei fatti osservati.
Fig. 15 - Screenshot inserimento osservazioni personali
Ci sarà un menu a tendina che permetterà di scegliere la tipologia di osservazione da inserire, e
poi un secondo menu a tendina che invece farà in modo di poter inserire un predicato all’interno
della base di conoscenza. Nel frattempo si formerà lo storico in basso, che terrà traccia dei fatti
inseriti fino ad un determinato momento.
In qualunque momento sarà possibile inserire anche le informazioni in comune tra i due
soggetti; la distanza tra i due e il luogo in cui si svolge la conversazione. Una volta asseriti
scompariranno i menu che permetto di effettuare tale scelta.
Fig. 16 - Screenshot inserimento informazioni in comune
In contemporanea con l’inserimento di dati sulla destra si avrà l’elenco delle deduzioni ottenute
che andranno pian piano a formarsi con l’asserzione da parte dell’osservatore di più
caratteristiche possibili. Selezionandone una e cliccando sul pulsante “Chiedi spiegazioni” è
possibile ottenere le spiegazioni in merito al fatto dedotto.
Fig. 17 - Screenshot gestione dell’output
Per testare il ragionamento del sistema piuttosto che effettuare un paio di esempi descritti che
permettevano di vedere le sue funzionalità, si è preferito scegliere la scena di un film cosi da
poter analizzare i movimenti e i gesti degli attori coinvolti sapendo come sarebbe finita la scena
del film.
5.1) Esperimento
Nell’ esperimento che si va a proporre si analizza un piccolo pezzettino di una scena di un
famoso film italiano “Benvenuti al sud”[14]. La scena in questione riguarda il direttore delle
poste italiane che cerca di avere un trasferimento fingendosi disabile e l’ispettore che effettua il
controllo di questa domanda di trasferimento.
Nella conversazione si possono notare alcuni particolari gesti che fanno capire che il direttore
delle poste si trova in disagio e sta mentendo. In questo screenshot infine si è riusciti a catturare
il frame del video che mostra come il direttore delle poste si stropicci il naso.
Fig. 18 – Benvenuti al sud – Direttore si stropiccia il naso (=> nascondere qualcosa)
Inserendo questo ed altri segnali all’interno del sistema esperto SEDUCE si può notare che il
sistema segnala che il personaggio sta nascondendo qualcosa. Avrà per caso scoperto la falsa
disabilità del nostro caro direttore? Andiamo a vedere il comportamento del sistema avendo
inserito la maggior parte dei fattori che sono emersi da questo piccolo spezzone di film.
Fig. 19 – SEDUCE per la scena del film “Benvenuti al sud”
Come si può notare semplicemente inserendo le informazioni di circostanza come la distanza tra
i soggetti e il luogo, il sistema è riuscito a dedurre che si tratta di una conversazione molto
formale. Andando avanti fino alla fine della scena si può vedere che il sistema sembra fornire
molte informazioni. Ecco lo screenshot del sistema alla fine della scena.
Fig. 20 – SEDUCE riesce a capire che qualcosa non va
Infatti si può notare come il sistema esperto riesca a dedurre tutte cose vere, tra cui anche
“fatto(nascondere_qualcosa(direttore_posta))”. Selezionandolo e facendo uso della funzione
“chiedi spiegazioni” esce scritto che ‘il soggetto ha qualcosa da nascondere’ (non è stato fatto
lo screenshot con questa funzionalità solamente per una questione di grandezza immagine).
Alla fine Bisio sembrerebbe riuscire a farla franca e infatti l’ispettore mostra sincerità quando
afferma che lo reputa una persona onesta e sincera e nel frattempo il battito prolungato di ciglia
da parte di Bisio fa dedurre al sistema esperto che non vuole ascoltare (come un rigetto verso
una palese bugia).
6)Considerazioni e sviluppi futuri
Il sistema sembra rispondere bene ai canoni per cui è stato proggettato. Riesce ad avere molte
deduzioni vere e come visto nell’esempio precedente a capire cose implicitamente nascoste
nella conversazione tra due individui. Sono sicuramente emerse due difficoltà nell’uso di
SEDUCE :
- la prima riguarda la limitata velocità con cui un osservatore riesce a cogliere i dettagli di
una conversazione e ad immetterli nel sistema;
- la seconda riguarda la capacità dell’osservatore di cogliere i dettagli della conversazione
che sta osservando.
Infatti è difficile osservare tutto e non perdersi piccoli dettagli come il battito di ciglia
prolungato, che si rivelano caratteristiche fondamentali affinchè il S.E. riesca a dedurre fatti
intrinsechi.
Come sviluppi futuri si potrebbe pensare ad un ampliamento dei fatti e delle regole considerate
cosi da permettere una più dettagliata analisi di una conversazione. Inoltre si potrebbe creare
una versione in cui si facciano domande all’osservatore invece di dare libera scelta
all’osservatore di asserire ciò che si vede. Le versioni potrebbero essere integrate come no.
Riferimenti
1) Isabella Poggi(2006) – Carocci
“Le parole del corpo. Introduzione alla comunicazione multimodale”
2) Ekman P., Friesen W.V. , Sonia Ancoli(1980) - UniversitY of California
“ Facial sign of emotional eXperience”
3) Paccagnella, “ Sociologia della comunicazione”, Il Mulino , Bologna, 2004
4) Isabella Poggi° ed Emanuela Magno Caldognetto* - °Dip. di Scienze dell’Educazione, Università Roma Tre - *ISTC Sezione di Padova ‘Fonetica e Dialettologia’
“ Il parlato emotivo. Aspetti cognitivi, linguistici e fonetici”
5) VinaY Bettadapura - College of Computing, Georgia Institute of TechnologY
6) “Face EXpression Recognition and AnalYsis: The State of the Art”
7) Maria Pia Capolongo - °Facoltà di Scienze Matematiche Fisiche e Naturali, Università degli Studi di Bari – Corso di Laurea Magistrale in Informatica
8) Tesi di Laurea: “Un sistema esperto per il riconoscimento della comunicazione non verbale: i gesti”.
9) Allan & Barbara Pease – Bur Rizzoli – “ Perchè mentiamo con gli occhi e ci vergogniamo con i piedi?”
10) Console , Lamma – UTET Libreria – “Programmazione logica e prolog “
11) http://netbeans.org/
12) http://www.swi-prolog.org/packages/jpl/java_api/javadoc/index.html
13) http://www.java.com/it/download/
14) http://it.wikipedia.org/wiki/Benvenuti_al_Sud