25.01.2014 Views

Strumenti ed Ambienti di Sviluppo Software per Interfacce Vocali ...

Strumenti ed Ambienti di Sviluppo Software per Interfacce Vocali ...

Strumenti ed Ambienti di Sviluppo Software per Interfacce Vocali ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

SI-TAL<br />

<strong>Strumenti</strong> <strong>ed</strong> <strong>Ambienti</strong> <strong>di</strong> <strong>Sviluppo</strong><br />

<strong>Software</strong> <strong>per</strong> <strong>Interfacce</strong> <strong>Vocali</strong><br />

Avanzate<br />

Linea 1.4<br />

Validazione e valutazione<br />

* *<br />

Telecom Italia Lab - Loquendo (TILAB-LOQUENDO)<br />

Istituto Trentino <strong>di</strong> Cultura - Istituto <strong>per</strong> la Ricerca Scientifica e<br />

Tecnologica (ITC-IRST)<br />

ALCEO<br />

COMPUTER-SHARING<br />

DELCO<br />

GST<br />

INTERACTIVE-MEDIA<br />

NECSY


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

In<strong>di</strong>ce<br />

1. Statistiche <strong>di</strong> un servizio vocale <strong>per</strong> gli orari ferroviari (TILAB-LOQUENDO)..................... 4<br />

1.1. Analisi generale................................................................................................................... 4<br />

1.2. Analisi <strong>di</strong> dettaglio ............................................................................................................... 4<br />

1.3. Valutazione del rispon<strong>di</strong>tore automatico ............................................................................. 6<br />

2. Interprete VoiceXML (ITC-IRST)....................................................................................... 10<br />

2.1. Package vxmlInterpreter ................................................................................................... 12<br />

2.2. Esempio <strong>di</strong> VoiceXML Interpreter Context........................................................................ 24<br />

3. Un’applicazione vocale su pagine Web (GST) ................................................................. 30<br />

3.1. Introduzione....................................................................................................................... 30<br />

3.2. Architettura specifica dell’applicazione ............................................................................. 33<br />

3.3. Descrizione del <strong>di</strong>alogo ..................................................................................................... 34<br />

3.4. L’architettura delle pagine VoiceXML................................................................................ 35<br />

3.5. Osservazioni e test effettuati............................................................................................. 40<br />

3.6. Conclusioni........................................................................................................................ 40<br />

4. Un front-end <strong>per</strong> la piattaforma VoxNauta <strong>di</strong> Loquendo (COMPUTER-SHARING) ....... 42<br />

4.1. Introduzione....................................................................................................................... 42<br />

4.2. Visual Telephone C.A.S.E................................................................................................. 42<br />

4.3. Il sistema I.V.R. ................................................................................................................. 43<br />

4.4. Il sistema CTI: Call Center Kit ........................................................................................... 44<br />

4.5. Le funzionalità del Call Center KIT.................................................................................... 46<br />

4.6. Esempio <strong>di</strong> Flusso............................................................................................................. 46<br />

4.7. Statistiche.......................................................................................................................... 48<br />

4.8. Esempio <strong>di</strong> Analisi statistiche............................................................................................ 50<br />

4.9. Tipologia delle richieste..................................................................................................... 52<br />

4.10. Vantaggi ............................................................................................................................ 55<br />

4.11. Testing............................................................................................................................... 56<br />

4.12. Interfaccia IM..................................................................................................................... 56<br />

4.13. Interfaccia I1...................................................................................................................... 56<br />

4.14. Scenari .............................................................................................................................. 57<br />

5. Un servizio automatico ad accesso vocale (INTERACTIVE-MEDIA) ............................... 58<br />

5.1. Introduzione....................................................................................................................... 58<br />

5.2. L’applicazione.................................................................................................................... 58<br />

5.3. L’analisi statistica .............................................................................................................. 68<br />

2


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

6. Esempio <strong>di</strong> un servizio sviluppato con l’SCE Phoenix (NECSY) ...................................... 72<br />

6.1. Architettura del sistema installato ..................................................................................... 73<br />

6.2. Statistiche sulla <strong>per</strong>centuale <strong>di</strong> automazione raggiunta.................................................... 73<br />

6.3. Considerazioni sui risultati ................................................................................................ 73<br />

6.4. Descrizione del sistema .................................................................................................... 74<br />

6.5. La realizzazione ................................................................................................................74<br />

6.6. Un esempio <strong>di</strong> <strong>di</strong>alogo....................................................................................................... 75<br />

6.7. Testing............................................................................................................................... 76<br />

7. SCE Infovox - Piano dei test e validazione interna (ALCEO) ........................................... 78<br />

7.1. Verifica del corretto funzionamento del SCE .................................................................... 78<br />

7.2. Verifica del corretto funzionamento del RTP .................................................................... 78<br />

7.3. Test <strong>di</strong> validazione finale................................................................................................... 79<br />

7.4. Considerazioni finali .......................................................................................................... 81<br />

8. Statistiche <strong>di</strong> un servizio automatico telefonico <strong>di</strong> accesso vocale (DELCO)................... 82<br />

8.1. Introduzione....................................................................................................................... 82<br />

8.2. Ambiente Hardware........................................................................................................... 82<br />

8.3. Ambiente <strong>Software</strong>............................................................................................................ 84<br />

8.4. Test ................................................................................................................................... 86<br />

3


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

1. Statistiche <strong>di</strong> un servizio vocale <strong>per</strong> gli orari ferroviari (TILAB-<br />

LOQUENDO)<br />

Il presente capitolo descrive le statistiche effettuate su un servizio telefonico automatico <strong>di</strong><br />

accesso vocale ad informazioni sugli orari ferroviari che utilizza le tecnologie vocali piu` evolute <strong>di</strong><br />

riconoscimento, sintesi e <strong>di</strong>alogo <strong>di</strong> Loquendo S.p.A. <strong>per</strong> il trattamento del linguaggio naturale.<br />

1.1. Analisi generale<br />

Telefonate Ricevute: 122<br />

Telefonate Valide: 113<br />

Telefonate con riaggancio imm<strong>ed</strong>iato: 9<br />

Telefonate terminate con successo: 100<br />

Percentuale successo: 88.5%<br />

1.2. Analisi <strong>di</strong> dettaglio<br />

Percentuale <strong>di</strong> riconoscimento corretto <strong>per</strong> i 914<strong>di</strong>aloghi senza quelli in cui non viene riconosciuto<br />

nulla:<br />

SA 90.9% WA 88.2%<br />

dove SA = sentence accuracy ovvero frasi corrette<br />

WA = word accuracy ovvero parole corrette<br />

<strong>di</strong>stribuzione durata telefonate<br />

120<br />

100<br />

80<br />

60<br />

Series1<br />

40<br />

20<br />

0<br />

60<br />

90<br />

120<br />

150<br />

180<br />

210<br />

240<br />

270<br />

300<br />

4


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Tempo m<strong>ed</strong>io <strong>per</strong> <strong>di</strong>alogo, dove T.Parz e' il tempo fino alla lettura (esclusa) e T.Totale e' il tempo<br />

totale del <strong>di</strong>alogo con lettura inclusa.<br />

-----------------------------------------------------------------------------<br />

Dialoghi totale: n. 122 T.Parz. T.Totale<br />

M<strong>ed</strong>ia M<strong>ed</strong>ia<br />

70.58 129.45<br />

-----------------------------------------------------------------------------<br />

Dialoghi tot. senza riag.imm.: n. 113 T.Parz. T.Totale<br />

M<strong>ed</strong>ia M<strong>ed</strong>ia<br />

76.20 139.08<br />

-----------------------------------------------------------------------------<br />

Dialoghi con Successo: n. 100 T.Parz. T.Totale<br />

M<strong>ed</strong>ia M<strong>ed</strong>ia<br />

85.18 143.52<br />

-----------------------------------------------------------------------------<br />

Chiamate totali: 122<br />

9 ( 7.4) A<br />

100 ( 82.0) S<br />

13 ( 10.7) V<br />

122 (100.0) total<br />

con dettaglio:<br />

1 ( 0.8) AF01<br />

1 ( 0.8) AI01<br />

1 ( 0.8) AP01<br />

2 ( 1.6) AP03<br />

4 ( 3.3) AP11<br />

100 ( 82.0) SUCC<br />

9 ( 7.4) V000<br />

3 ( 2.5) VP01<br />

1 ( 0.8) VP03<br />

122 (100.0) total<br />

-----------------------------------------------------------------------------<br />

Chiamate esclusi i riagganci imm<strong>ed</strong>iati: 113<br />

9 ( 8.0) A<br />

100 ( 88.5) S<br />

4 ( 3.5) V<br />

113 (100.0) total<br />

con dettaglio:<br />

1 ( 0.9) AF01<br />

1 ( 0.9) AI01<br />

1 ( 0.9) AP01<br />

2 ( 1.8) AP03<br />

4 ( 3.5) AP11<br />

100 ( 88.5) SUCC<br />

3 ( 2.7) VP01<br />

1 ( 0.9) VP03<br />

113 (100.0) total<br />

5


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

1.3. Valutazione del rispon<strong>di</strong>tore automatico<br />

Nel seguito è riportata l’indagine statistica sul servizio sulla base <strong>di</strong> 100 <strong>per</strong>sone intervistate.<br />

Per Lei ottenere l’informazione è stato…<br />

Abbastanz<br />

1a <strong>di</strong>fficile<br />

2<br />

Molto<br />

<strong>di</strong>fficile<br />

2<br />

Molto<br />

semplice<br />

5<br />

Abbastanz<br />

a semplice<br />

Le istruzioni fornite <strong>di</strong> volta in volta dal rispon<strong>di</strong>tore automatico erano…<br />

8<br />

Chiare<br />

1<br />

1<br />

Non in<strong>di</strong>ca<br />

Non del tutto<br />

comprensibili<br />

Il timbro della voce del rispon<strong>di</strong>tore automatico Le è sembrato…<br />

Abbastanza<br />

sgradevole<br />

2<br />

Molto<br />

sgradevole<br />

6 6<br />

Molto<br />

gradevole<br />

6<br />

Abbastanza<br />

gradevole<br />

6


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Per Lei parlare con un rispon<strong>di</strong>tore automatico è…<br />

In<strong>di</strong>fferente<br />

Fasti<strong>di</strong>oso<br />

Le informazioni riguardo al treno selezionato sono sufficienti?<br />

1<br />

No<br />

8<br />

Si<br />

Quale altra informazione potrebbe essere fornita tramite un rispon<strong>di</strong>tore automatico?<br />

Prezzo del biglietto<br />

Binario <strong>di</strong> partenza<br />

Presenza <strong>di</strong> posti<br />

Stazioni interm<strong>ed</strong>ie<br />

Coincidenze con altri treni<br />

Presenza bar<br />

Provenienza del treno<br />

Presenza ristorante<br />

Altro<br />

Non sa<br />

80<br />

46<br />

35<br />

21<br />

21<br />

18<br />

11<br />

10<br />

6<br />

4<br />

7


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

L’intervistato ha eseguito l’esercizio…<br />

Senza alcun problema<br />

60<br />

40<br />

Ha dovuto ripetere alcune informazioni<br />

Quali?<br />

Stazione <strong>di</strong><br />

partenza<br />

Stazione <strong>di</strong><br />

arrivo<br />

Data e ora<br />

V.A.<br />

17<br />

22<br />

27<br />

Numero m<strong>ed</strong>io <strong>di</strong> volte<br />

Su totale hanno<br />

ripetuto<br />

l’informazione<br />

1.18<br />

1.50<br />

1.37<br />

Su totale<br />

interviste<br />

0.2<br />

0.33<br />

0.37<br />

Conferme<br />

istruzioni<br />

6<br />

1.33<br />

0.08<br />

Altre<br />

istruzioni<br />

2<br />

1.0<br />

0.02<br />

8


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Lei ritiene il servizio …..<br />

Poco utile<br />

5<br />

Per niente<br />

utile<br />

1<br />

1<br />

Non in<strong>di</strong>ca<br />

4<br />

Abbastanza<br />

utile<br />

5<br />

Molto utile<br />

Plus del servizio<br />

Como<strong>di</strong>tà <strong>di</strong> ottenere informazioni <strong>di</strong>rettamente<br />

a casa<br />

Rapi<strong>di</strong>tà nell’ottenere informazioni<br />

Completezza/ricchezza informazioni ottenibili<br />

36<br />

31<br />

30<br />

Chiarezza/precisione informazioni fornite<br />

Gratuità del servizio<br />

Possibilità <strong>di</strong> avere informazioni in tempo reale<br />

18<br />

8<br />

8<br />

Cortesia degli o<strong>per</strong>atori<br />

Possibilità <strong>di</strong> <strong>di</strong>alogo <strong>di</strong>retto con o<strong>per</strong>atore<br />

Co<strong>per</strong>tura del servizio (24 h.)<br />

Nessun elemento positivo<br />

Altro<br />

Non sa<br />

7<br />

2<br />

2<br />

3<br />

1<br />

2<br />

9


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

2. Interprete VoiceXML (ITC-IRST)<br />

L'interprete VoiceXML è stato sviluppato in Java e reso possibile grazie ai seguenti<br />

packages:<br />

javax.xml.parsers, org.w3c.dom e org.xml.sax., <strong>di</strong>sponibili presso il sito della Sun<br />

http://java.sun.com/xml/. Questi <strong>per</strong>mettono <strong>di</strong> modellare un documento XML come<br />

un albero detto DOM (Document Object Model).<br />

FESI.jslib, <strong>di</strong>sponibile presso http://home.worldcom.ch/~jmlugrin/fesi/index.html.<br />

Questo pacchetto mette a <strong>di</strong>sposizione un interprete <strong>per</strong> script <strong>di</strong> tipo ECMA-262<br />

(http://www.ecma.ch/ecma1/STAND/ECMA-262.HTM).<br />

Così com’è definito nella specifica del VoiceXML (http://www.w3.org/TR/2000/NOTEvoicexml-20000505/)<br />

il modello dell’architettura <strong>di</strong> fig. 1 può essere sud<strong>di</strong>viso in più livelli<br />

d’astrazione:<br />

document<br />

Document<br />

Server<br />

VoiceXML<br />

Interpreter<br />

Context<br />

Voice<br />

XML<br />

Interpreter<br />

Implementation<br />

Platform<br />

request<br />

fig. 1: Modello dell’architettura.<br />

Livello <strong>di</strong> Document Server: mantiene i documenti VoiceXML che devono essere elaborati<br />

dall'interprete. Un documento VoiceXML consente <strong>di</strong> gestire un'interazione vocale in<br />

maniera alquanto generale <strong>ed</strong> in particolare può gestire un <strong>di</strong>alogo ad iniziativa mista con<br />

il chiamante, data una certa infrastruttura telefonica. Il documento VoiceXML consente <strong>di</strong><br />

controllare l'evoluzione temporale della macchina a stati che rappresenta il <strong>di</strong>alogo, in<br />

particolare i messaggi vocali e le grammatiche da attivare/<strong>di</strong>sattivare. Compito della<br />

descrizione contenuta nel documento è <strong>di</strong> fornire, in base alle azioni intraprese dall'utente,<br />

le successive mosse <strong>per</strong> acc<strong>ed</strong>ere alle informazioni richieste.<br />

Livello <strong>di</strong> interprete VoiceXML: è il motore che <strong>per</strong>mette l'interpretazione dei documenti<br />

VoiceXML. Consente una corretta interpretazione della descrizione attraverso l'uso <strong>di</strong> un<br />

API (Application Programming Interface). Lo sviluppatore quin<strong>di</strong> può interagire con il<br />

motore in base al tipo d’azione da intraprendere in un dato istante <strong>di</strong> tempo.<br />

Livello <strong>di</strong> contesto dell'interprete VoiceXML: contiene il contesto su cui si appoggia l'API,<br />

ciò <strong>per</strong>mette all'interprete <strong>di</strong> mantenere l'in<strong>di</strong>pendenza dai motori ASR (Automatic Speech<br />

Recognition), TTS (Text To Speech) e dalla sorgente <strong>di</strong> segnale vocale (<strong>per</strong> esempio una<br />

10


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

sch<strong>ed</strong>a telefonica o una sch<strong>ed</strong>a au<strong>di</strong>o in generale).<br />

Livello <strong>di</strong> piattaforma implementativa: genera gli eventi che sono necessari ai prec<strong>ed</strong>enti<br />

livelli <strong>per</strong> condurre a buon fine l'interazione con l'utente del sistema. Quest'ultima è<br />

controllata sia dal contesto sia dall'interprete, poiché il primo si preoccupa d’inizializzare<br />

la piattaforma, mentre il secondo la controlla <strong>per</strong> condurre l'interazione secondo le<br />

specifiche della descrizione.<br />

Il presente documento riguarderà quasi unicamente l'interprete VoiceXML, poiché questo<br />

rappresenta sia la parte più consistente dell'intero sistema (escludendo ovviamente i motori<br />

ASR e TTS), mentre il resto dovrebbe essere sviluppato in modo <strong>di</strong>pendente dalla<br />

piattaforma. Inoltre il contesto dell'interprete definisce il tipo d’applicazione che lo<br />

sviluppatore intende portare avanti.<br />

L'interprete inoltre potrebbe essere paragonato ad una black-box poiché, in base<br />

all'ingresso (eventi e/o frasi pronunciate dall'utente) <strong>ed</strong> allo stato corrente, ritorna l'uscita<br />

come nuova azione da intraprendere, cambiando così lo stato del <strong>di</strong>alogo in base a quanto<br />

specificato nella descrizione stessa.<br />

Fin dalle prime fasi <strong>di</strong> progetto l'interprete (v<strong>ed</strong>i engine nell'API) è stato costruito in modo<br />

da gestire interazioni non sempre sincrone, in altre parole l'interazione con il contesto può<br />

avvenire in <strong>per</strong>fetta sincronia oppure è stato previsto che gli ingressi possano essere asincroni,<br />

<strong>per</strong> garantire la funzionalità <strong>di</strong> barge-in.<br />

Attraverso l'utilizzo dell'interprete, lo sviluppatore può <strong>di</strong>sinteressarsi dell'interpretazione<br />

della descrizione <strong>per</strong> concentrarsi unicamente sul tipo d’uscite che l'API può proporre, inoltre<br />

<strong>per</strong> ogni uscita è possibile intraprendere delle azioni <strong>di</strong>stinte. Possiamo notare che così<br />

facendo l'interprete è in<strong>di</strong>pendente sia dall'infrastruttura impiegata nel servizio (ASR, TTS,<br />

sch<strong>ed</strong>a telefonica, etc.) che dal funzionamento del servizio stesso; <strong>per</strong> continuare l'interazione<br />

è necessario che tutte le richieste siano sod<strong>di</strong>sfatte.<br />

11


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

2.1. Package vxmlInterpreter<br />

Analizziamo l'API dell'interprete VoiceXML nella versione 0.9.5b. Questa si compone del<br />

package Java vxmlInterpreter, da includere nella variabile <strong>di</strong> sistema CLASSPATH <strong>per</strong> la<br />

Java 2. Attualmente <strong>per</strong> funzionare correttamente il pacchetto necessita della JDK 1.2.x o<br />

<strong>di</strong> una versione su<strong>per</strong>iore.<br />

VoiceXML<br />

Applications<br />

API<br />

Object<br />

engine<br />

decod<strong>ed</strong><br />

events<br />

settings<br />

VoiceXML<br />

Interpreter<br />

Context<br />

Engine<br />

VoiceXML<br />

Object<br />

listener<br />

synthesis<br />

telephone<br />

grm-DTMF<br />

grm-ASR<br />

recognition<br />

TTS<br />

ASR<br />

voice<br />

voice<br />

Telephone<br />

Board<br />

fig. 2: Comunicazione ad eventi tra processi e oggetti dell’API.<br />

Il package è strutturato nelle seguenti classi: Engine, EngineListener, EngineAdapter,<br />

EngineEvent <strong>ed</strong> EngineFactory. V<strong>ed</strong>iamole nel dettaglio.<br />

12


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

2.1.1. Interface Engine<br />

È l'interfaccia che <strong>per</strong>mette <strong>di</strong> acc<strong>ed</strong>ere alle potenzialità dell'interprete VoiceXML; questa<br />

dopo una prima fase d’inizializzazione dei parametri del motore richi<strong>ed</strong>e ad un server HTTP<br />

o al filesystem locale un documento VoiceXML. Associando a quest’ultima un listener è<br />

possibile catturare gli eventi generati dal motore. È prevista una funzionalità <strong>di</strong> debugging<br />

dell'engine attraverso filesystem, il cui utilizzo è consigliato almeno in una prima fase iniziale.<br />

Costruttori.<br />

Non presenta costruttori <strong>per</strong> definizione.<br />

Distruttori.<br />

Non presenta <strong>di</strong>struttori <strong>per</strong> definizione.<br />

Campi.<br />

public static String CANCEL<br />

Evento relativo alla richiesta da parte dell'utente <strong>di</strong> terminare la riproduzione del<br />

prompt corrente.<br />

public static String ERROR<br />

Evento base <strong>per</strong> qualsiasi tipo d’errore.<br />

public static String ERROR_BADFETCH<br />

Evento relativo ad un errore <strong>di</strong> run-time.<br />

public static String ERROR_NOAUTHORIZATION<br />

Evento d'errore relativo ad una richiesta dell'utente <strong>di</strong> un'o<strong>per</strong>azione non<br />

autorizzata (es. il trasferimento <strong>di</strong> chiamata verso un numero inesistente).<br />

public static String ERROR_SEMANTIC<br />

Evento d'errore relativo al documento VoiceXML, come ad esempio una <strong>di</strong>visione<br />

<strong>per</strong> 0, in<strong>di</strong>cizzazione errata <strong>di</strong> stringhe oppure riferimento a variabili non <strong>di</strong>chiarate.<br />

public static final String ERROR_UNSUPPORTED<br />

Evento d'errore dovuto al fatto che la piattaforma non utilizza un particolare<br />

elemento VoiceXML. Ad esempio, se la piattaforma non è abilitata alla registrazione<br />

<strong>di</strong> frasi pronunciate dall'utente, sarebbe lanciato dal motore il seguente<br />

error.unsupport<strong>ed</strong>.record. Ciò <strong>per</strong>mette allo sviluppatore <strong>di</strong> documenti<br />

VoiceXML l'adattamento alle capacità <strong>di</strong> <strong>di</strong>verse piattaforme, catturando tali eventi<br />

qualora occorressero.<br />

public static final String ERROR_UNSUPPORTED_FORMAT<br />

È lanciato dall'engine se una particolare risorsa (grammatica, file au<strong>di</strong>o, tipo<br />

MIME, ...) è richiesta dal documento VoiceXML ma non è contemplata dalla<br />

piattaforma.<br />

public static final String EXIT<br />

13


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

L'utente ha richiesto <strong>di</strong> terminare l'interazione.<br />

public static final String HELP<br />

L'utente ha chiesto un aiuto sui dati da inserire in un particolare stato del <strong>di</strong>alogo.<br />

public static final String NOINPUT<br />

L'utente non ha fornito nessun input a fronte <strong>di</strong> una richiesta del sistema.<br />

public static final String NOMATCH<br />

L'utente ha inserito dei dati ma questi non sono stati catturati dalla piattaforma.<br />

public static final String TELEPHONE_DISCONNECT_HANGUP<br />

Evento asincrono che in<strong>di</strong>ca che l'utente ha riattaccato la cornetta.<br />

public static final String TELEPHONE_DISCONNECT_TRANSFER<br />

In<strong>di</strong>ca che la chiamata telefonica è stata trasferita definitivamente ad un altro<br />

numero.<br />

public static String DTMF<br />

Identifica la modalità d'ingresso DTMF (Dual Tone Multi-Frequency) dei dati<br />

inseriti dall'utente.<br />

public static final String VOICE<br />

Identifica la modalità d'ingresso vocale dei dati inseriti dall'utente.<br />

Meto<strong>di</strong>.<br />

public void start() throws NullPointerException, Malform<strong>ed</strong>URLException<br />

Metodo bloccante che in<strong>di</strong>ca al motore <strong>di</strong> iniziare l'interpretazione del documento<br />

VoiceXML. L'esecuzione inizia <strong>per</strong> default al primo <strong>di</strong>alog, prosegue finché non è<br />

specificato nessun altro <strong>di</strong>alog.<br />

public void setEngineListener(EngineListener listener)<br />

In<strong>di</strong>ca all'engine il listener cui notificare le richieste sottoforma <strong>di</strong> eventi Java.<br />

Fanno parte delle richieste tutte le o<strong>per</strong>azioni <strong>di</strong> input/output verso la piattaforma (es.<br />

attesa <strong>di</strong> una chiamata, attivazione <strong>di</strong> una grammatica, riproduzione/sintesi,<br />

riconoscimento <strong>di</strong> segnale, etc.). Attualmente se lo sviluppatore non include alcun<br />

listener, il motore terminerà la sua esecuzione all'invocazione del metodo start()<br />

lanciando una NullPointerException.<br />

public EngineListener getEngineListener()<br />

Ritorna il listener associato al motore.<br />

public Pro<strong>per</strong>ties getPro<strong>per</strong>ties()<br />

Ritorna, in un unico oggetto <strong>di</strong> tipo java.util.Pro<strong>per</strong>ties, le proprietà runtime<br />

del motore. Queste ultime possono essere definite <strong>per</strong> la piattaforma, <strong>per</strong> l'intera<br />

applicazione, <strong>per</strong> il documento, <strong>per</strong> il <strong>di</strong>alog o <strong>per</strong> un particolare form item.<br />

14


public void setEvent(String event)<br />

Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Notifica <strong>di</strong> un evento <strong>di</strong> tipo VoiceXML da parte della implementation platform o<br />

del VoiceXML interpreter context. Questi eventi riguardano errori semantici, eccezioni<br />

(l'utente non pronuncia alcuna frase o qualcosa che non viene riconosciuto) o normali<br />

eventi (l'utente vuole terminare l'interazione o riappende la cornetta).<br />

public void setInput(String utterance, String grammar, double confidenceLevel, String mode)<br />

Utilizzato <strong>per</strong> notificare al motore che è avvenuto un riconoscimento. In particolare<br />

questo metodo deve essere usato dallo sviluppatore quando l'utente pronuncia una<br />

frase utterance catturata da una grammar <strong>di</strong> default (help, boolean, <strong>di</strong>gits,<br />

currency, time, phone, date, number). Il tipo <strong>di</strong> riconoscitore usato (<strong>per</strong> toni DTMF o<br />

<strong>per</strong> il parlato) viene specificato dal parametro mode, mentre il confidenceLevel<br />

in<strong>di</strong>ca il livello <strong>di</strong> confidenza della frase.<br />

public void setInput(Hashtable utterance, String grammar, double confidenceLevel, String mode)<br />

Questo metodo ha le m<strong>ed</strong>esime funzionalità del prec<strong>ed</strong>ente. La <strong>di</strong>fferenza consiste<br />

nella possibilità lasciata allo sviluppatore <strong>di</strong> includere uno o più slots riempiti da una<br />

frase dell’utente. Questi vengono memorizzati nella Hashtable utterance dove<br />

ogni chiave rappresenta uno slot. Se la chiave non ha associato alcuna field item<br />

variables (slot) del documento VoiceXML allora questa viene ignorata.<br />

public void setConfidenceLevel(double confidenceLevel)<br />

Impostazione <strong>di</strong> confidenceLevel come particolare livello <strong>di</strong> confidenza.<br />

public void setInputMode(String inputmode)<br />

Impostazione <strong>di</strong> inputmode come input del sistema.<br />

public void setAu<strong>di</strong>oError(String au<strong>di</strong>o, boolean isAu<strong>di</strong>o)<br />

Impostazione <strong>di</strong> au<strong>di</strong>o come prompt a fronte <strong>di</strong> un evento <strong>di</strong> tipo error. Il<br />

parametro isAu<strong>di</strong>o in<strong>di</strong>ca nel caso true che au<strong>di</strong>o identifica un URI oppure una<br />

stringa che necessita <strong>di</strong> un motore TTS.<br />

public void setAu<strong>di</strong>oHelp(String au<strong>di</strong>o, boolean isAu<strong>di</strong>o)<br />

Impostazione <strong>di</strong> au<strong>di</strong>o come prompt a fronte <strong>di</strong> un evento <strong>di</strong> tipo help. Il<br />

parametro isAu<strong>di</strong>o in<strong>di</strong>ca nel caso true che au<strong>di</strong>o identifica un URI oppure una<br />

stringa che necessita <strong>di</strong> un motore TTS.<br />

public void setAu<strong>di</strong>oNoMatch(String au<strong>di</strong>o, boolean isAu<strong>di</strong>o)<br />

Impostazione <strong>di</strong> au<strong>di</strong>o come prompt a fronte <strong>di</strong> un evento <strong>di</strong> tipo nomatch. Il<br />

parametro isAu<strong>di</strong>o in<strong>di</strong>ca nel caso true che au<strong>di</strong>o identifica un URI oppure una<br />

stringa che necessita <strong>di</strong> un motore TTS.<br />

public void setAu<strong>di</strong>oAllOthers(String au<strong>di</strong>o, boolean isAu<strong>di</strong>o)<br />

Impostazione <strong>di</strong> au<strong>di</strong>o come prompt a fronte <strong>di</strong> un evento non contemplato dai<br />

prec<strong>ed</strong>enti meto<strong>di</strong>. Il parametro isAu<strong>di</strong>o in<strong>di</strong>ca nel caso true che au<strong>di</strong>o identifica<br />

un URI oppure una stringa che necessita <strong>di</strong> un motore TTS.<br />

public void setHelpGrammar(String grammar, boolean external, boolean isASRGrammar)<br />

15


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Impostazione <strong>di</strong> grammar come grammatica <strong>di</strong> default <strong>per</strong> il riconoscimento della<br />

richiesta d'aiuto (help) messa a <strong>di</strong>sposizione dalla piattaforma. Il parametro<br />

external, qualora a true, in<strong>di</strong>ca che la grammatica è specificata da un URI,<br />

altrimenti è in line. Il parametro isASRGrammar, qualora a true, in<strong>di</strong>ca che la<br />

grammatica è <strong>per</strong> un motore ASR, altrimenti <strong>per</strong> un riconoscitore a toni DTMF.<br />

public void setBooleanGrammar(String grammar, boolean external, boolean isASRGrammar)<br />

Impostazione <strong>di</strong> grammar come grammatica <strong>di</strong> riconoscimento <strong>di</strong> sì/no (boolean)<br />

<strong>di</strong> default messa a <strong>di</strong>sposizione dalla piattaforma. Il parametro external, qualora a<br />

true, in<strong>di</strong>ca che la grammatica è specificata da un URI, altrimenti è in line. Il<br />

parametro isASRGrammar, qualora a true, in<strong>di</strong>ca che la grammatica è <strong>per</strong> un motore<br />

ASR, altrimenti <strong>per</strong> un riconoscitore a toni DTMF.<br />

public void setDateGrammar(String grammar, boolean external, boolean isASRGrammar)<br />

Impostazione <strong>di</strong> grammar come grammatica <strong>di</strong> riconoscimento delle date (date) <strong>di</strong><br />

default messa a <strong>di</strong>sposizione dalla piattaforma. Il parametro external, qualora a<br />

true, in<strong>di</strong>ca che la grammatica è specificata da un URI, altrimenti è in line. Il<br />

parametro isASRGrammar, qualora a true, in<strong>di</strong>ca che la grammatica è <strong>per</strong> un motore<br />

ASR, altrimenti <strong>per</strong> un riconoscitore a toni DTMF.<br />

public void setDigitsGrammar(String grammar, boolean external, boolean isASRGrammar)<br />

Impostazione <strong>di</strong> grammar come grammatica <strong>di</strong> riconoscimento dei numeri da 0 a<br />

9 (<strong>di</strong>gits) <strong>di</strong> default messa a <strong>di</strong>sposizione dalla piattaforma. Il parametro external,<br />

qualora a true, in<strong>di</strong>ca che la grammatica è specificata da un URI, altrimenti è in line. Il<br />

parametro isASRGrammar, qualora a true, in<strong>di</strong>ca che la grammatica è <strong>per</strong> un motore<br />

ASR, altrimenti <strong>per</strong> un riconoscitore a toni DTMF.<br />

public void setCurrencyGrammar(String grammar, boolean external, boolean isASRGrammar)<br />

Impostazione <strong>di</strong> grammar come grammatica <strong>di</strong> riconoscimento degli importi<br />

monetari (currency) <strong>di</strong> default messa a <strong>di</strong>sposizione dalla piattaforma. Il parametro<br />

external, qualora a true, in<strong>di</strong>ca che la grammatica è specificata da un URI,<br />

altrimenti è in line. Il parametro isASRGrammar, qualora a true, in<strong>di</strong>ca che la<br />

grammatica è <strong>per</strong> un motore ASR, altrimenti <strong>per</strong> un riconoscitore a toni DTMF.<br />

public void setNumberGrammar(String grammar, boolean external, boolean isASRGrammar)<br />

Impostazione <strong>di</strong> grammar come grammatica <strong>di</strong> riconoscimento dei numeri<br />

(number) <strong>di</strong> default messa a <strong>di</strong>sposizione dalla piattaforma. Il parametro external,<br />

qualora a true, in<strong>di</strong>ca che la grammatica è specificata da un URI, altrimenti è in line. Il<br />

parametro isASRGrammar, qualora a true, in<strong>di</strong>ca che la grammatica è <strong>per</strong> un motore<br />

ASR, altrimenti <strong>per</strong> un riconoscitore a toni DTMF.<br />

public void setPhoneGrammar(String grammar, boolean external, boolean isASRGrammar)<br />

Impostazione <strong>di</strong> grammar come grammatica <strong>di</strong> riconoscimento dei numeri<br />

telefonici (phone) <strong>di</strong> default messa a <strong>di</strong>sposizione dalla piattaforma. Il parametro<br />

external, qualora a true, in<strong>di</strong>ca che la grammatica è specificata da un URI,<br />

altrimenti è in line. Il parametro isASRGrammar, qualora a true, in<strong>di</strong>ca che la<br />

grammatica è <strong>per</strong> un motore ASR, altrimenti <strong>per</strong> un riconoscitore a toni DTMF.<br />

16


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

public void setTimeGrammar(String grammar, boolean external, boolean isASRGrammar)<br />

Impostazione <strong>di</strong> grammar come grammatica <strong>di</strong> riconoscimento degli orari (time)<br />

<strong>di</strong> default messa a <strong>di</strong>sposizione dalla piattaforma. Il parametro external, qualora a<br />

true, in<strong>di</strong>ca che la grammatica è specificata da un URI, altrimenti è in line. Il<br />

parametro isASRGrammar, qualora a true, in<strong>di</strong>ca che la grammatica è <strong>per</strong> un motore<br />

ASR, altrimenti <strong>per</strong> un riconoscitore a toni DTMF.<br />

public void setCompleteTimeout(String pro<strong>per</strong>ty)<br />

Il parametro pro<strong>per</strong>ty determina<br />

l’intervallo tra la fine <strong>di</strong> una frase e la fine<br />

della registrazione del segnale. In tale<br />

intervallo sarà campionato unicamente del<br />

silenzio.<br />

Inizio<br />

registraz.<br />

Inizio<br />

speech<br />

Fine<br />

speech<br />

complete<br />

timeout<br />

Fine<br />

registraz.<br />

decod<strong>ed</strong><br />

t<br />

public void setIncompleteTimeout(String pro<strong>per</strong>ty)<br />

Il parametro pro<strong>per</strong>ty determina<br />

l’intervallo tra la fine <strong>di</strong> una frase non<br />

riconosciuta dalla grammatica e la fine<br />

della registrazione del segnale. Dopo tale<br />

intervallo sarà lanciato un evento <strong>di</strong><br />

nomatch.<br />

Inizio<br />

registraz.<br />

Inizio<br />

speech<br />

Fine<br />

speech<br />

incomplete<br />

timeout<br />

Fine<br />

registrazione<br />

nomatch<br />

t<br />

public void setInter<strong>di</strong>gitTimeout(String pro<strong>per</strong>ty)<br />

Il parametro pro<strong>per</strong>ty determina<br />

l’intervallo massimo che può intercorrere<br />

tra due toni DTMF.<br />

Tono 1<br />

DTMF<br />

…<br />

inter<strong>di</strong>git<br />

timeout<br />

Tono N<br />

DTMF<br />

decod<strong>ed</strong><br />

t<br />

public void setTimeout(String pro<strong>per</strong>ty)<br />

Il parametro pro<strong>per</strong>ty determina<br />

quando l’evento noinput deve essere<br />

lanciato <strong>per</strong>ché l’utente non ha parlato.<br />

Inizio<br />

registraz.<br />

timeout<br />

Fine<br />

registrazione<br />

noinput<br />

t<br />

public void setFetchAu<strong>di</strong>o(String pro<strong>per</strong>ty)<br />

Imposta l’URI <strong>di</strong> un file au<strong>di</strong>o da riprodurre durante le attese dovute all’esecuzione<br />

dell’interprete.<br />

public void setFetchTimeout(String pro<strong>per</strong>ty)<br />

Imposta l’intervallo d’attesa <strong>di</strong> un file da processare prima <strong>di</strong> mandare un<br />

17


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

error.badfetch (attualmente è ignorato dall’interprete).<br />

public void setAutomaticNumberIdentification(String ANI)<br />

Imposta la variabile <strong>di</strong> sessione session.telephone.ani che identifica il numero del<br />

chiamante. Se il servizio non è supportato dalla sch<strong>ed</strong>a telefonica vale undefin<strong>ed</strong>.<br />

public void setDial<strong>ed</strong>NumberIdentificationService(String DNIS)<br />

Imposta la variabile <strong>di</strong> sessione session.telephone.dnis che identifica il numero cui<br />

il chiamante vuole essere re-in<strong>di</strong>rizzato. Se il servizio non è supportato dalla sch<strong>ed</strong>a<br />

telefonica vale undefin<strong>ed</strong>.<br />

public void setInformationIn<strong>di</strong>catorDigit(String IID)<br />

Imposta la variabile <strong>di</strong> sessione session.telephone.ii<strong>di</strong>gits che in<strong>di</strong>vidua il tipo <strong>di</strong><br />

linea del chiamante. Se il servizio non è supportato dalla sch<strong>ed</strong>a telefonica vale<br />

undefin<strong>ed</strong>.<br />

public void setUsertoUserInformation(String UUI)<br />

Imposta la variabile <strong>di</strong> sessione session.telephone.uui che è parte delle<br />

informazioni <strong>di</strong> una linea ISDN. Se il servizio non è supportato dalla sch<strong>ed</strong>a telefonica<br />

vale undefin<strong>ed</strong>.<br />

public void setDocument(String document)<br />

Imposta l’URI del documento VoiceXML da caricare nell’interprete all’invocazione<br />

del metodo start().<br />

public void setHTTPMethod(String method)<br />

Imposta il metodo get o post <strong>di</strong> richiesta del documento VoiceXML.<br />

public void setHTTPNameList(Hashtable namelist)<br />

Ogni chiave del parametro namelist in<strong>di</strong>ca una variabile da sottomettere al server<br />

http <strong>per</strong> la richiesta <strong>di</strong> uno specifico documento VoiceXML, col rispettivo valore.<br />

public void VICWarning(String str)<br />

Permette al VoiceXML Interpreter Context (VIC) <strong>di</strong> inserire un commento nel file<br />

<strong>di</strong> debug opportunamente commentato (solo in debugging).<br />

2.1.2. Interface EngineListener<br />

È l'interfaccia che <strong>per</strong>mette <strong>di</strong> catturare gli eventi generati dall'engine. Questa, se<br />

opportunamente gestita, <strong>per</strong>mette allo sviluppatore <strong>di</strong> sod<strong>di</strong>sfare tutte le richieste<br />

dell'interprete, quin<strong>di</strong> <strong>per</strong> sua costruzione deve essere considerata come il substrato tra il<br />

VoiceXML Interpreter e il VoiceXML Interpreter Context (fig. 2).<br />

Costruttori.<br />

Non presenta costruttori <strong>per</strong> definizione.<br />

18


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Distruttori.<br />

Non presenta <strong>di</strong>struttori <strong>per</strong> definizione.<br />

Campi.<br />

Non presenta campi <strong>per</strong> costruzione.<br />

Meto<strong>di</strong>.<br />

public void asrGrammar(EngineEvent e)<br />

E’ il metodo utilizzato dall’engine <strong>per</strong> notificare al contesto tutte le o<strong>per</strong>azioni<br />

sulle grammatiche del riconoscitore vocale. Gli eventi notificati da questo metodo<br />

sono:<br />

ASR_GRAMMAR_LOAD_INLINE,<br />

ASR_GRAMMAR_LOAD_EXTERNAL,<br />

ASR_GRAMMAR_UNLOAD,<br />

ASR_GRAMMAR_ACTIVE,<br />

ASR_GRAMMAR_DEACTIVE.<br />

public void prompt(EngineEvent e)<br />

E’ il metodo utilizzato dall’engine <strong>per</strong> notificare al contesto tutte le o<strong>per</strong>azioni<br />

relative al sintetizzatore. La stringa che dovrà essere sintetizzata è specificata secondo<br />

il formalismo del VoiceXML, <strong>per</strong> esempio in tal modo è possibile controllare<br />

attraverso il markup language la proso<strong>di</strong>a. Gli eventi notificati da questo metodo<br />

sono:<br />

PROMPT.<br />

public void dtmfGrammar(EngineEvent e)<br />

E’ il metodo utilizzato dall’engine <strong>per</strong> notificare al contesto tutte le o<strong>per</strong>azioni<br />

sulle grammatiche del riconoscitore dei toni DTMF. Gli eventi notificati da questo<br />

metodo<br />

sono:<br />

DTMF_GRAMMAR_LOAD_INLINE,<br />

DTMF_GRAMMAR_LOAD_EXTERNAL,<br />

DTMF_GRAMMAR_UNLOAD,<br />

DTMF_GRAMMAR_ACTIVE,<br />

DTMF_GRAMMAR_DEACTIVE.<br />

public void au<strong>di</strong>o(EngineEvent e)<br />

E’ il metodo utilizzato dall’engine <strong>per</strong> notificare al contesto tutte le o<strong>per</strong>azioni<br />

relative alla riproduzione <strong>di</strong> file sonori. Gli eventi notificati da questo metodo sono:<br />

AUDIO.<br />

L’attuale versione dell’engine ignora questo metodo.<br />

public void exit(EngineEvent e)<br />

E’ il metodo utilizzato dall’engine <strong>per</strong> notificare al contesto che l’utente ha chiesto<br />

<strong>di</strong> terminare l’interazione, dando modo al VoiceXML Interpreter Context <strong>di</strong> chiudere<br />

la sessione correttamente. Gli eventi notificati da questo metodo sono:<br />

EXIT.<br />

public void <strong>di</strong>sconnect(EngineEvent e)<br />

19


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

E’ il metodo utilizzato dall’engine <strong>per</strong> notificare al contesto che la linea telefonica<br />

con l’utente è stata chiusa, <strong>per</strong> volontà <strong>di</strong> quest'ultimo o <strong>per</strong>ché questi ha richiesto un<br />

trasferimento <strong>di</strong> chiamata. Gli eventi notificati da questo metodo sono:<br />

DISCONNECT_HANGUP,<br />

DISCONNECT_TRANSFER.<br />

public void error(EngineEvent e)<br />

E’ il metodo utilizzato dall’engine <strong>per</strong> notificare al contesto che è avvenuto un<br />

errore durante l’esecuzione. Gli eventi notificati da questo metodo sono:<br />

ERROR,<br />

ERROR_BADFETCH,<br />

ERROR_NOAUTHORIZATION,<br />

ERROR_SEMANTIC,<br />

ERROR_UNSUPPORTED,<br />

ERROR_UNSUPPORTED_FORMAT.<br />

public void document(EngineEvent e)<br />

E’ il metodo utilizzato dall’engine <strong>per</strong> notificare al contesto le informazioni<br />

relative al documento VoiceXML attualmente in interpretazione. Gli eventi notificati<br />

da questo metodo sono:<br />

DOCUMENT_URI,<br />

DOCUMENT_LANG,<br />

DOCUMENT_BASE<br />

2.1.3. EngineAdapter<br />

È la classe che implementa, vuoti, i meto<strong>di</strong> dell'interfaccia EngineListener, così lo<br />

sviluppatore potrà effettuare un override solamente dei meto<strong>di</strong> d’interesse. Questa tecnica<br />

d’implementazione dei listeners è comune nella programmazione in ambiente Java.<br />

2.1.4. EngineEvent<br />

È la classe che contiene tutti gli eventi che possono essere scatenati dal motore, questi<br />

sono catturati dal listener <strong>per</strong> intraprendere l'azione più adeguata.<br />

Costruttori.<br />

public EngineEvent(Object src, short type)<br />

Definisce le proprietà dell’oggetto EngineEvent. Il parametro src identifica<br />

l’oggetto che ha generato l’evento, mentre type in<strong>di</strong>ca il tipo tra quelli definiti dalla<br />

classe stessa.<br />

public EngineEvent(Object src, short type, String data)<br />

Definisce le proprietà dell’oggetto EngineEvent in modo analogo al costruttore<br />

prec<strong>ed</strong>ente. Il parametro data identifica i dati che il particolare tipo d’evento ha<br />

assegnati (es. l’evento PROMPT deve notificare la stringa da sintetizzare).<br />

Distruttori.<br />

protect<strong>ed</strong> void finalize()<br />

20


Metodo richiamato dal finalizer della Java Virtual Machine.<br />

Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Campi.<br />

public static final short ASR_GRAMMAR_LOAD_INLINE<br />

Evento relativo al caricamento della grammatica definita come:<br />

<br />

<br />

marco<br />

{marco}<br />

| pier [giorgio] {piergiorgio}<br />

| mario {mario_rossi}<br />

| rossi [mario] {mario_rossi}<br />

<br />

In quest’esempio in VoiceXML, data contiene la definizione della grammatica che<br />

<strong>per</strong>mette <strong>di</strong> riconoscere i nomi: marco, pier, piergiorgio, mario, rossi e rossi mario.<br />

public static final short ASR_GRAMMAR_LOAD_EXTERNAL<br />

Evento relativo al caricamento della grammatica definita come:<br />

<br />

<br />

In quest’esempio in VoiceXML, data contiene l’URI della grammatica<br />

“nomi.gram”. Questo è notificato quando l’esecuzione inizia la visita <strong>di</strong> un documento<br />

VoiceXML.<br />

public static final short ASR_GRAMMAR_UNLOAD<br />

Evento relativo allo scaricamento <strong>di</strong> una grammatica prec<strong>ed</strong>entemente caricata<br />

(come in line o external). Questo è notificato quando l’esecuzione termina la visita <strong>di</strong><br />

un documento VoiceXML.<br />

public static final short ASR_GRAMMAR_ACTIVE<br />

Evento relativo all’attivazione <strong>di</strong> una grammatica prec<strong>ed</strong>entemente caricata (come<br />

in line o external). Questo è notificato quando l’esecuzione fa guadagnare lo scope<br />

alla grammatica specificata da data.<br />

public static final short ASR_GRAMMAR_DEACTIVE<br />

Evento relativo alla <strong>di</strong>sattivazione <strong>di</strong> una grammatica prec<strong>ed</strong>entemente attivata.<br />

Questo è notificato quando l’esecuzione fa <strong>per</strong>dere lo scope alla grammatica<br />

specificata da data.<br />

public static final short DTMF_GRAMMAR_LOAD_INLINE<br />

Ha funzionalità analoghe all’evento ASR_GRAMMAR_LOAD_INLINE <strong>per</strong> il<br />

riconoscitore <strong>di</strong> toni DTMF.<br />

public static final short DTMF_GRAMMAR_LOAD_EXTERNAL<br />

Ha funzionalità analoghe all’evento ASR_GRAMMAR_LOAD_EXTERNAL <strong>per</strong><br />

il riconoscitore <strong>di</strong> toni DTMF.<br />

public static final short DTMF_GRAMMAR_UNLOAD<br />

21


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Ha funzionalità analoghe all’evento ASR_GRAMMAR_LOAD_UNLOAD <strong>per</strong> il<br />

riconoscitore <strong>di</strong> toni DTMF.<br />

public static final short DTMF_GRAMMAR_ACTIVE<br />

Ha funzionalità analoghe all’evento ASR_GRAMMAR_LOAD_ACTIVE <strong>per</strong> il<br />

riconoscitore <strong>di</strong> toni DTMF.<br />

public static final short DTMF_GRAMMAR_DEACTIVE<br />

Ha funzionalità analoghe all’evento ASR_GRAMMAR_LOAD_DEACTIVE <strong>per</strong> il<br />

riconoscitore <strong>di</strong> toni DTMF.<br />

public static final short PROMPT<br />

Evento utilizzato <strong>per</strong> notificare la stringa da sintetizzare da un motore TTS<br />

contenuta in data. Esempio in VoiceXML:<br />

<br />

Questo è un testo generato completamente dal computer.<br />

Cosa ne pensi?<br />

<br />

data conterrà la stringa all’interno del tag , ovvero la frase da<br />

sintetizzare <strong>ed</strong> i tags relativi alla proso<strong>di</strong>a della frase.<br />

public static final short AUDIO<br />

Attualmente ignorato dall’interprete. Il tag è notificato dall’evento<br />

PROMPT.<br />

public static final short EXIT<br />

Evento utilizzato <strong>per</strong> in<strong>di</strong>care che l’utente ha richiesto esplicitamente <strong>di</strong> terminare<br />

l’interazione.<br />

public static final short DISCONNECT_HANGUP<br />

Notifica che l’utente ha riattaccato la cornetta facendo cadere la linea telefonica, tal<br />

evento è totalmente asincrono.<br />

public static final short DISCONNECT_TRANSFER<br />

Notifica che è in corso un trasferimento <strong>di</strong> chiamata. Attualmente quest’evento è<br />

ignorato.<br />

public static final short ERROR<br />

Evento preposto alla notifica che il motore si è imbattuto in un errore d’esecuzione.<br />

E’ possibile dare a quest’evento <strong>di</strong>versa granularita'.<br />

public static final short ERROR_BADFETCH<br />

Notifica un errore d’esecuzione.<br />

public static final short ERROR_NOAUTHORIZATION<br />

Attualmente ignorato.<br />

public static final short ERROR_SEMANTIC<br />

22


Notifica un errore semantico nel documento VoiceXML.<br />

public static final short ERROR_UNSUPPORTED<br />

Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Notifica che un tag particolare incontrato in un documento VoiceXML non è<br />

interpretato dal motore. E’ possibile dare a quest’evento <strong>di</strong>versa granularita’.<br />

public static final short ERROR_UNSUPPORTED_FORMAT<br />

Notifica che un formato particolare incontrato in un documento VoiceXML non è<br />

contemplato dalla piattaforma.<br />

public static final short DOCUMENT_URI<br />

Notifica che il documento VoiceXML specificato da data è in corso<br />

d’interpretazione.<br />

public static final short DOCUMENT_LANG<br />

Notifica che il documento VoiceXML in corso d’interpretazione ha in data la lingua<br />

usata.<br />

<br />

<br />

...<br />

<br />

public static final short DOCUMENT_BASE<br />

Notifica dell’URI base del documento VoiceXML in corso d’interpretazione.<br />

<br />

<br />

...<br />

<br />

Meto<strong>di</strong>.<br />

public short getType()<br />

Ritorna il tipo d’evento che l’istanza della classe rappresenta.<br />

public String getData()<br />

Ritorna il campo privato data che l’istanza della classe rappresenta.<br />

2.1.5. EngineFactory<br />

È la classe d’accesso all'API dell'interprete VoiceXML. Permette <strong>di</strong> creare interpreti<br />

<strong>di</strong>versi, ai quali associare caratteristiche particolari.<br />

Costruttori.<br />

Non presenta costruttori <strong>per</strong> definizione.<br />

Distruttori.<br />

Non presenta <strong>di</strong>struttori <strong>per</strong> definizione.<br />

23


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Campi.<br />

Non presenta campi <strong>per</strong> costruzione.<br />

Meto<strong>di</strong>.<br />

public static Engine newEngine(boolean validate, EngineListener listener)<br />

Crea un nuovo motore con le seguenti caratteristiche:<br />

il documento risulta validato dal DTD del VoiceXML, l’engine ha associato il listener<br />

<strong>per</strong> la notifica degli eventi.<br />

public static Engine newEngine(EngineListener listener)<br />

Crea un nuovo motore con le seguenti caratteristiche:<br />

utilizzo <strong>di</strong> listener <strong>per</strong> la notifica degli eventi.<br />

public static Engine newEngine(boolean validate)<br />

Crea un nuovo motore con le seguenti caratteristiche:<br />

il documento risulta validato dal DTD del VoiceXML.<br />

public static Engine newEngine()<br />

Crea un nuovo motore le cui caratteristiche saranno definite run-time.<br />

public static Engine newEngine(boolean validate, EngineListener listener, String filename, int<br />

debugLevel)<br />

Crea un nuovo motore con le seguenti caratteristiche:<br />

il documento risulta validato dal DTD del VoiceXML, l’engine ha associato il listener<br />

<strong>per</strong> la notifica degli eventi, utilizzo <strong>di</strong> filename <strong>per</strong> memorizzare i messaggi <strong>di</strong><br />

debugging che hanno livello <strong>di</strong> priorità non su<strong>per</strong>iore a debuglevel. Metodo<br />

<strong>di</strong>sponibile se e solo se l’API è stata costruita <strong>per</strong> supportare la modalità <strong>di</strong> debugging.<br />

public static Engine new Engine(Boolean validate, String filename, into debug Level)<br />

Crea un nuovo motore con le seguenti caratteristiche:<br />

il documento risulta validato dal DTD del VoiceXML, utilizzo <strong>di</strong> filename <strong>per</strong><br />

memorizzare i messaggi <strong>di</strong> debugging che hanno livello <strong>di</strong> priorità non su<strong>per</strong>iore a<br />

debuglevel. Metodo <strong>di</strong>sponibile se e solo se l’API è stata costruita <strong>per</strong> supportare la<br />

modalità <strong>di</strong> debugging.<br />

2.2. Esempio <strong>di</strong> VoiceXML Interpreter Context<br />

V<strong>ed</strong>iamo un esempio <strong>di</strong> co<strong>di</strong>ce in Java <strong>per</strong> creare un VoiceXML Interpreter Context.<br />

import vxmlInterpreter.*;<br />

import java.util.Hashtable;<br />

...<br />

public class VoiceXML_Intrepreter_Context extends ... implements EngineListener {<br />

...<br />

Engine engine;<br />

Recogniser recogniser;<br />

Synthesiser synthesiser;<br />

Telephone telephone;<br />

24


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Hashtable gramLoad<strong>ed</strong>;<br />

/** Creates new VoiceXML_Intrepreter_Context */<br />

public VoiceXML_Intrepreter_Context (...) {<br />

...<br />

engine = EngineFactory.newEngine(validate, this, filename_DEBUG, level_DEBUG);<br />

recogniser = new Recogniser(...);<br />

synthesiser = new Synthesiser(...);<br />

telephone = new Telephone(...);<br />

grmLoad<strong>ed</strong> = new Hashtable();<br />

}<br />

protect<strong>ed</strong> void finalize() {<br />

...<br />

recogniser.close();<br />

synthesiser.close ();<br />

telephone.close ();<br />

}<br />

/*<br />

* Implementazione dei meto<strong>di</strong> dell’EngineListener<br />

*/<br />

public void asrGrammar(EngineEvent e) {<br />

short type = e.getType();<br />

String data = e.getData();<br />

ASR_Grammar gram;<br />

if (type == EngineEvent.ASR_GRAMMAR_LOAD_EXTERNAL) {<br />

// Caricamento in ASR <strong>di</strong> una grammatica specificata da un’URI.<br />

// Si <strong>di</strong>stingue il protocollo utilizzato <strong>per</strong> l’URI.<br />

if (data.startsWith("file:"))<br />

gram = recogniser.loadFILE(data.substring(5));<br />

else if (data.startsWith("http:"))<br />

gram = recogniser.loadHTTP(data.substring(5));<br />

if (gram != null)<br />

gramLoad<strong>ed</strong>(data, gram);<br />

else<br />

engine.setEvent(Engine.ERROR_BADFETCH);<br />

System.out.println("ASR_GRAMMAR_LOAD_EXTERNAL ");<br />

} else if (type == EngineEvent.ASR_GRAMMAR_LOAD_INLINE) {<br />

// Caricamento in ASR <strong>di</strong> una grammatica specificata da un’URI.<br />

gram = recogniser.loadInLine(data);<br />

if (gram != null)<br />

gramLoad<strong>ed</strong>(data, gram);<br />

else<br />

engine.setEvent(Engine.ERROR_BADFETCH);<br />

System.out.println("ASR_GRAMMAR_LOAD_INLINE ");<br />

} else if (type == EngineEvent.ASR_GRAMMAR_UNLOAD) {<br />

// Scaricamento in ASR <strong>di</strong> una grammatica specificata da un’URI.<br />

if ((gram = (ASR_Grammar)gramLoad<strong>ed</strong>.remove(data)) != null)<br />

recogniser.unloadGRAM(gram);<br />

else<br />

engine.setEvent(Engine.ERROR_BADFETCH);<br />

System.out.println("ASR_GRAMMAR_UNLOAD ");<br />

25


} else if (type == EngineEvent.ASR_GRAMMAR_ACTIVE) {<br />

// Attivazione in ASR <strong>di</strong> una grammatica specificata da un’URI.<br />

if ((gram = (ASR_Grammar)gramLoad<strong>ed</strong>.get(data)) != null)<br />

gram.setActive(true);<br />

else<br />

engine.setEvent(Engine.ERROR_BADFETCH);<br />

System.out.println("ASR_GRAMMAR_ACTIVE ");<br />

} else if (type == EngineEvent.ASR_GRAMMAR_DEACTIVE) {<br />

// Disattivazione in ASR <strong>di</strong> una grammatica specificata da un’URI.<br />

if ((gram = (ASR_Grammar)gramLoad<strong>ed</strong>.get(data)) != null)<br />

gram.setActive(false);<br />

else<br />

engine.setEvent(Engine.ERROR_BADFETCH);<br />

Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

}<br />

System.out.println("ASR_GRAMMAR_DEACTIVE ");<br />

} else {<br />

// E’ impossibile che l’esecuzione arrivi in questo punto!!!<br />

}<br />

public void dtmfGrammar(EngineEvent e) {<br />

short type = e.getType();<br />

String data = e.getData();<br />

DTMF_Grammar gram;<br />

if (type == EngineEvent.DTMF_GRAMMAR_LOAD_EXTERNAL) {<br />

// Caricamento in TELEPHONE <strong>di</strong> una grammatica specificata da un’URI.<br />

// Si <strong>di</strong>stingue il protocollo utilizzato <strong>per</strong> l’URI.<br />

if (data.startsWith("file:"))<br />

gram = telephone.loadFILE(data.substring(5));<br />

else if (data.startsWith("http:"))<br />

gram = telephone.loadHTTP(data.substring(5));<br />

if (gram != null)<br />

gramLoad<strong>ed</strong>(data, gram);<br />

else<br />

engine.setEvent(Engine.ERROR_BADFETCH);<br />

System.out.println("DTMF_GRAMMAR_LOAD_EXTERNAL ");<br />

} else if (type == EngineEvent.DTMF_GRAMMAR_LOAD_INLINE) {<br />

// Caricamento in TELEPHONE <strong>di</strong> una grammatica specificata da un’URI.<br />

gram = telephone.loadInLine(data);<br />

if (gram != null)<br />

gramLoad<strong>ed</strong>(data, gram);<br />

else<br />

engine.setEvent(Engine.ERROR_BADFETCH);<br />

System.out.println("DTMF_GRAMMAR_LOAD_INLINE ");<br />

} else if (type == EngineEvent.DTMF_GRAMMAR_UNLOAD) {<br />

// Scaricamento in TELEPHONE <strong>di</strong> una grammatica specificata da un’URI.<br />

if ((gram = (DTMF_Grammar)gramLoad<strong>ed</strong>.remove(data)) != null)<br />

telephone.unloadGRAM(gram);<br />

else<br />

engine.setEvent(Engine.ERROR_BADFETCH);<br />

System.out.println("DTMF_GRAMMAR_UNLOAD ");<br />

} else if (type == EngineEvent.DTMF_GRAMMAR_ACTIVE) {<br />

// Attivazione in TELEPHONE <strong>di</strong> una grammatica specificata da un’URI.<br />

if ((gram = (DTMF_Grammar)gramLoad<strong>ed</strong>.get(data)) != null)<br />

26


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

gram.setActive(true);<br />

else<br />

engine.setEvent(Engine.ERROR_BADFETCH);<br />

System.out.println("DTMF _GRAMMAR_ACTIVE ");<br />

} else if (type == EngineEvent. DTMF _GRAMMAR_DEACTIVE) {<br />

// Disattivazione in TELEPHONE <strong>di</strong> una grammatica specificata da un’URI.<br />

if ((gram = (DTMF_Grammar)gramLoad<strong>ed</strong>.get(data)) != null)<br />

gram.setActive(false);<br />

else<br />

engine.setEvent(Engine.ERROR_BADFETCH);<br />

}<br />

System.out.println("DTMF _GRAMMAR_DEACTIVE ");<br />

} else {<br />

// E’ impossibile che l’esecuzione arrivi in questo punto!!!<br />

}<br />

public void prompt(EngineEvent e) {<br />

short type = e.getType();<br />

String data = e.getData();<br />

Pro<strong>per</strong>ties prop = ((Engine)e.getSource()).getPro<strong>per</strong>ties();<br />

telephone.setBargeIN(Boolean.valueOf(prop.getPro<strong>per</strong>ty("bargein")).booleanValue());<br />

telephone.setTimeout(Integer.parseInt(prop.getPro<strong>per</strong>ty("timeout")));<br />

}<br />

if (type == EngineEvent.PROMPT) {<br />

// Sintesi <strong>di</strong> un prompt vocale utilizzando il telefono come destinazione au<strong>di</strong>o.<br />

// N.M.B.: data contiene anche i tags relativi alla proso<strong>di</strong>a... deve essere controllata.<br />

telephone.play(synthesiser.speak(data));<br />

System.out.println("PROMPT ");<br />

} else if (type == EngineEvent.AUDIO) {<br />

// Riproduzione au<strong>di</strong>o utilizzando il telefono come destinazione au<strong>di</strong>o.<br />

// N.M.B.: data contiene un nome <strong>di</strong> un file.<br />

telephone.play(data);<br />

System.out.println("AUDIO ");<br />

} else {<br />

// E’ impossibile che l’esecuzione arrivi in questo punto!!!<br />

}<br />

public void exit(EngineEvent e) {<br />

String data = e.getData();<br />

}<br />

telephone.<strong>di</strong>sconnect();<br />

System.out.println("EXIT "+data);<br />

public void <strong>di</strong>sconnect(EngineEvent e) {<br />

String data = e.getData();<br />

}<br />

// Non viene controllata la granularita’ dell’evento DISCONNECT.<br />

telephone.<strong>di</strong>sconnect();<br />

System.out.println("DISCONNECT "+data);<br />

public void error(EngineEvent e) {<br />

String data = e.getData();<br />

System.out.println("ERROR "+data);<br />

27


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

}<br />

System.exit(0);<br />

public void document(EngineEvent e) {<br />

String data = e.getData();<br />

}<br />

if (e.getType() == EngineEvent.DOCUMENT_LANG) {<br />

if (data.equals("en")) {<br />

// Il documento in esecuzione è in inglese, cambio dei parametri del motore.<br />

engine.setAu<strong>di</strong>oNoMatch("I <strong>di</strong>d not understand what you said.", false);<br />

engine.setAu<strong>di</strong>oHelp("No help available...", false);<br />

engine.setHelpGrammar("file:platform_grammar/english/help.grm", true, true);<br />

engine.setBooleanGrammar("file:platform_grammar/english/boolean.grm", true, true);<br />

engine.setDigitsGrammar("file:platform_grammar/english/<strong>di</strong>gits.grm", true, true);<br />

...<br />

} else {<br />

// Il documento in esecuzione è in italiano (notare che è il valore <strong>di</strong> default),<br />

// opportuna mo<strong>di</strong>fica dei parametri del motore.<br />

engine.setAu<strong>di</strong>oNoMatch("Non ho capito... ripeta <strong>per</strong> favore", false);<br />

engine.setAu<strong>di</strong>oHelp("Nessun aiuto <strong>di</strong>sponibile...", false);<br />

engine.setHelpGrammar("file:platform_grammar/italiano/help.grm", true, true);<br />

engine.setBooleanGrammar("file:platform_grammar/italiano/boolean.grm", true, true);<br />

engine.setDigitsGrammar("file:platform_grammar/italiano/<strong>di</strong>gits.grm", true, true);<br />

...<br />

}<br />

} else if (e.getType() == EngineEvent.DOCUMENT_BASE) {<br />

} else if (e.getType() == EngineEvent.DOCUMENT_URI) {<br />

System.out.println("URI: "+data);<br />

} else {<br />

// E’ impossibile che l’esecuzione arrivi in questo punto!!!<br />

}<br />

/***********/<br />

/* main */<br />

/***********/<br />

public static void main (String args[]) {<br />

// Inizializzazione del VoiceXML Interpreter Context<br />

VoiceXML_Interpreter_Context vic = new VoiceXML_Intrepreter_Context(...);<br />

// Inizializzazione dell’interprete<br />

Engine engine = vic.getEngine();<br />

Telephone telephone = vic.getTelephone();<br />

for ( ; ;) {<br />

// Pr<strong>ed</strong>isposizione dell’application root document<br />

engine.setDocument(document_URI);<br />

// Attesa <strong>di</strong> una chiamata<br />

telephone.waitcall();<br />

// Sollevamento cornetta<br />

telephone.connect();<br />

// Inizio dell’interpretazione<br />

engine.start();<br />

28


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

}<br />

}<br />

// Abbassamento cornetta<br />

telephone.<strong>di</strong>sconnect();<br />

} // for<br />

Supponendo <strong>di</strong> utilizzare un approccio verso i motori ASR e TTS <strong>di</strong> tipo Java Speech,<br />

v<strong>ed</strong>iamo il GrammarListener delegato a notificare gli eventi relativi al riconoscimento del<br />

segnale vocale:<br />

public class GrammarListener_VoiceXML_Intrepreter_Context extends GrammarAdapter {<br />

...<br />

Engine engine;<br />

public GrammarListener_VoiceXML_Intrepreter_Context (VoiceXML_Intrepreter_Context vic, ...) {<br />

...<br />

engine = vic.getEngine();<br />

}<br />

public void grammarActivat<strong>ed</strong>(GrammarEvent e) {<br />

...<br />

}<br />

public void grammarLoad<strong>ed</strong>(GrammarEvent e) {<br />

...<br />

}<br />

public void accept<strong>ed</strong>Result(ResultEvent e) {<br />

...<br />

engine.setInput(e.getUtterance(), e.getGrammarName(), e.getConfidenceLevel(),<br />

Engine.VOICE);<br />

}<br />

}<br />

public void reject<strong>ed</strong>Result(ResultEvent e) {<br />

...<br />

engine.setEvent(Engine.NOMATCH);<br />

}<br />

29


3. Un’applicazione vocale su pagine Web (GST)<br />

Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Il presente capitolo descrive un servizio automatico <strong>di</strong> accesso vocale ad informazioni<br />

<strong>di</strong>sponibili su pagine Web realizzato attraverso l’uso <strong>di</strong> Voice Markup Language.<br />

3.1. Introduzione<br />

Terminologia<br />

Caller<br />

Chiamante <strong>di</strong> un servizio telefonico.<br />

CGI<br />

Common Gateway Interface (CGI) metodo standard <strong>di</strong> comunicazione fra web server e processi <strong>di</strong> back-end.<br />

Questi processi <strong>di</strong> back-end possono anche generare dei markup come risposta.<br />

ECMAScript<br />

European Computer Manufacturers Association.<br />

Iniziativa mista <strong>di</strong> conversazione.<br />

Permette al caller <strong>di</strong> condurre l’andamento della conversazione con applicazione vocale. Un esempio è dato<br />

dalle numerose informazioni che si ottengono in risposta ad una query al sistema.<br />

Piattaforma<br />

Un computer che accetta chiamate da un telefono o altra <strong>per</strong>iferica vocale. Gestisce <strong>ed</strong> esegue determinati<br />

processi in funzione della chiamata.<br />

Server (Document Server)<br />

Un computer sul quale è in esecuzione un server http, presso il quale possono essere recu<strong>per</strong>ati i documenti<br />

VoiceXML<br />

TTS<br />

Text-to-speech (TTS) è un processo che converte il testo in au<strong>di</strong>o.<br />

Architettura<br />

Figura 1 Architettura<br />

30


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

L'architettura <strong>di</strong> un’applicazione vocale che utilizza il linguaggio <strong>di</strong> MarkUp VoiceXML è <strong>di</strong> tipo client-server.<br />

Il modello è costituito da un Document Server, da un Interpreter Context e un'Implementation Platform (v<strong>ed</strong>i<br />

Figura 1). Il Document Server, contenitore <strong>di</strong> documenti web, processa le richieste, anche simultanee,<br />

dell'Interpreter Context, in altre parole dell'applicazione client, e risponde producendo dei documenti<br />

VoiceXML letti da un traduttore che può essere lo stesso da cui sono partite le richieste. L'Implementation<br />

Platform gioca un ruolo fondamentale, poiché è responsabile della generazione degli eventi in risposta delle<br />

azioni del visitatore del sito e ad essa sono demandati gli eventi <strong>di</strong> sistema. Su <strong>di</strong> lei si basa l'intero processo <strong>di</strong><br />

co<strong>di</strong>fica-deco<strong>di</strong>fica del parlato in entrata e in uscita e quin<strong>di</strong> deve sod<strong>di</strong>sfare specifici requisiti hardware e<br />

software. Nel momento dell'acquisizione <strong>di</strong> una richiesta o <strong>di</strong> un evento esterno, l'Interpreter Context deve<br />

sottoporla all'interprete VoiceXML affinché quest'ultimo possa entrare in azione. L’ Implementation Platform<br />

deve poi provv<strong>ed</strong>ere a fornire file au<strong>di</strong>o preregistrati o l'interpretazione vocale del testo o del parlato. Deve<br />

quin<strong>di</strong> acquisire i documenti provenienti in formato testuale o vocale dal browser o dall'intero contesto<br />

d'interpretazione e fornire, dopo opportune o<strong>per</strong>azioni hardware-software, una risposta vocale al visitatore.<br />

Goals del VoiceXML<br />

• Minimizzare la comunicazione tra client e server specificando <strong>di</strong>verse interazioni <strong>per</strong> documento.<br />

• Proteggere gli autori <strong>di</strong> applicazioni dai particolari <strong>di</strong> low-level e dai dettagli specifici della<br />

piattaforma.<br />

• Separare il co<strong>di</strong>ce <strong>di</strong> interazione (in VoiceXML) dalla logica <strong>di</strong> servizio (es.: CGI scripts).<br />

• Promuovere la portabilità dei servizi attraverso l’implementazione sulla specifica piattaforma.<br />

VoiceXML é un linguaggio comune <strong>per</strong> content providers, tool providers, e platform providers.<br />

• Facilitare l’uso sia <strong>di</strong> semplici interazioni vocali che, attraverso le caratteristiche del linguaggio, il<br />

supporto a <strong>di</strong>aloghi complessi.<br />

Capacita’ del VoiceXML<br />

• Output: synthesiz<strong>ed</strong> speech (text-to-speech) e au<strong>di</strong>o files.<br />

• Input: riconoscimento del parlato e <strong>di</strong> toni DTMF.<br />

• Registrazione <strong>di</strong> speech in input.<br />

• Capacità telefoniche (call transfer e <strong>di</strong>sconnect).<br />

31


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

• Utilizzo dei link ad altri documenti attraverso gli Universal Resource Identifiers (URI).<br />

Principi <strong>di</strong> progetto<br />

• VoiceXML é un XML schema.<br />

• Portabilità dei servizi.<br />

• Adattabilità ai formati proprietari (<strong>per</strong>ò gli standards sono vivamente raccomandati).<br />

• Facilità nello sviluppo <strong>di</strong> interazioni comuni a <strong>di</strong>versi documenti.<br />

• Semanticamente ben definito, ciò previene gli intenti dell’autore dal comportamento dell’utente.<br />

• Meccanismi <strong>di</strong> controllo del flusso del programma.<br />

• Separazione della logica <strong>di</strong> servizio dall’interazione.<br />

• Basso costo computazionale, le risorse <strong>di</strong> accesso a database, riconoscimento, sintesi, generazione del<br />

<strong>di</strong>alogo, ecc. sono esterne all’interpretazione del documento.<br />

• Possibilità <strong>di</strong> navigazione <strong>di</strong> <strong>di</strong>versi documenti usando gli URI.<br />

• Identificazione del tipo <strong>di</strong> dato che deve essere sottomesso al server, attraverso i meto<strong>di</strong> HTTP “get e<br />

post”.<br />

• L’allocazione delle risorse così come la gestione dei processi concorrenti é demandato<br />

all’implementazione della piattaforma<br />

Caratteristiche hw/sw della Piattaforma<br />

• Acquisizione del Documento. Il VoiceXML Interpreter Context deve acquisire il documento <strong>per</strong> il<br />

VoiceXML Interpreter. In alcuni casi é l’interprete stesso che richi<strong>ed</strong>e il documento da acquisire,<br />

generalmente tale richiesta avviene a fronte <strong>di</strong> un preciso evento da sod<strong>di</strong>sfare (es. arrivo <strong>di</strong> una<br />

telefonata).<br />

• Au<strong>di</strong>o output. L’Implementation Platform può fornire au<strong>di</strong>o output usando au<strong>di</strong>o files e/o text-tospeech<br />

(TTS). Au<strong>di</strong>o files sono riferiti attraverso URI. Il linguaggio non specifica il set <strong>di</strong> formati au<strong>di</strong>o<br />

supportabili dalla piattaforma.<br />

• Au<strong>di</strong>o input. La piattaforma deve acquisire toni DTMF e/o parlato simultaneamente e controllare la<br />

durata <strong>di</strong> tale fase <strong>di</strong> acquisizione secondo quanto specificato dal documento.<br />

o DTMF: gestione dei toni inseriti da tastiera attraverso grammatiche d<strong>ed</strong>icate.<br />

o Riconoscitore vocale: gestione <strong>di</strong>namica e/o statica delle grammatiche. Alcuni tags prev<strong>ed</strong>ono<br />

<strong>di</strong> specificare le grammatiche in modo <strong>di</strong>namico, altri attraverso URI.<br />

o Registrazione <strong>di</strong> file au<strong>di</strong>o ricevuto dall’utente.<br />

Grammatiche<br />

Una o più grammatiche (ASR, DTMF) possono essere associate ad un <strong>di</strong>alog.<br />

Attivazione/<strong>di</strong>sattivazione delle grammatiche del <strong>di</strong>alog:<br />

in applicazioni machine <strong>di</strong>rect<strong>ed</strong>, sono attive finché l’utente é nel <strong>di</strong>alog;<br />

in applicazioni mix<strong>ed</strong> initiative, possono rimanere attive anche al <strong>di</strong> fuori del <strong>di</strong>alog nella stessa application.<br />

Quando l’utente inserisce un valore definito in un altro <strong>di</strong>alog l’esecuzione viene passata a quest’ultimo.<br />

Grammatiche ASR/DTMF <strong>di</strong> default: boolean, date, <strong>di</strong>gits, currency, number, phone, time.<br />

Sessions<br />

Una session inizia quando l’utente comincia ad interagire con il VoiceXML interpreter context, continua con il<br />

caricamento e l’esecuzione <strong>di</strong> uno o più documenti e termina quando l’utente ha ottenuto quanto richiesto.<br />

32


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Applications<br />

Un application é un insieme <strong>di</strong> documents con<strong>di</strong>visi dallo stesso application root document.<br />

L’application root document viene caricato quando l’utente inizia ad interagire con un documento<br />

dell’application; finche’ l’application root document rimane in memoria le sue variabili sono <strong>di</strong>sponibili <strong>per</strong><br />

tutti i documenti dell’applicazione e le sue grammatiche rimangono attive <strong>per</strong> tutta la durata dell’applicazione;<br />

L’application root document rimane in memoria finché l’utente naviga nei documenti della stessa applicazione,<br />

viene scaricato altrimenti.<br />

Perché usare VoiceXML?<br />

• Linguaggio <strong>di</strong> programmazione <strong>di</strong> alto livello.<br />

• Supporta applicazioni vocali semplici (menu) e complesse (iniziativa mista).<br />

• Controllo delle risorse vocali (ASR, TTS) e telefoniche in modo uniforme.<br />

Alto livello <strong>di</strong> astrazione delle caratteristiche e/o capacità della piattaforma.<br />

• Protezione degli sviluppatori dai dettagli implementativi.<br />

Non occorre conoscere le API dei motori ASR, TTS e telefonici.<br />

• Portabilità.<br />

• Standard.<br />

3.2. Architettura specifica dell’applicazione<br />

Nella figura <strong>di</strong> seguito riportata è mostrata l’architettura del servizio realizzato nell’ambito del progetto. E’ stata<br />

sud<strong>di</strong>visa in tre parti:<br />

a) l’interfaccia con l’utente: tramite il microfono il segnale vocale viene <strong>di</strong>rezionato alla sch<strong>ed</strong>a au<strong>di</strong>o, la<br />

risposta au<strong>di</strong>o viene inviata alle casse.<br />

b) la sch<strong>ed</strong>a au<strong>di</strong>o è parte integrante della piattaforma, il VoiceXML Context Interpreter attraverso le API <strong>di</strong><br />

Spinet si interfaccia con il riconoscitore, genera le richieste <strong>di</strong> pagine VoiceXML al server http, l’interprete<br />

VoiceXML le elabora e genera gli eventi <strong>per</strong> la richiesta <strong>di</strong> input dall’utente e <strong>di</strong> output au<strong>di</strong>o che si ottengono<br />

con il sintetizzatore TTS <strong>di</strong> IBM.<br />

c) server http che gestisce le richieste fatte dell’Application VoiceXML è Tomcat Jakarta Project , il server ha<br />

come supporto <strong>per</strong> la gestione dei dati un database Access fornito dalla coo<strong>per</strong>ativa Han<strong>di</strong>crea.<br />

Server <strong>di</strong> Spinet è il motore <strong>di</strong> riconoscimento che comunica attraverso le API Spinet con il VoiceXML Context<br />

e elabora il segnale campionato dalla sch<strong>ed</strong>a au<strong>di</strong>o e fornisce l’informazione al VoiceXML Context.<br />

33


microfono<br />

casse<br />

Sampler<br />

TTS<br />

Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Server<br />

vxml<br />

VoiceXML<br />

Context<br />

Interpreter<br />

vxml<br />

application<br />

VoiceXML<br />

Interpreter<br />

SPINET<br />

API<br />

Server<br />

ASR<br />

3.3. Descrizione del <strong>di</strong>alogo<br />

Il servizio fornisce informazioni sui luoghi <strong>di</strong> pubblico esercizio presenti nel comune <strong>di</strong> Trento. Le informazioni<br />

fornite ricoprono sia informazioni <strong>di</strong> carattere generale e informazioni sulle barriere architettoniche dei servizi<br />

pubblici.<br />

Il web server Tomcat <strong>di</strong> Apache Project è stato utilizzato <strong>per</strong> la gestione delle pagine <strong>di</strong>namiche jsp, tramite le<br />

quali venivano fatte le richieste al database Access in funzione dell’input dell’utente.Il ciclo è il seguente: la<br />

VoiceXML Application rimane in attesa <strong>di</strong> una chiamata telefonica in questo caso simulata dalla pressione <strong>di</strong> un<br />

bottone, a pressione avvenuta il VoiceXML<br />

Context Interpreter si incaricava <strong>di</strong> richi<strong>ed</strong>ere la pagina VoiceXML al web browser, il web browser fornisce la<br />

risorsa richiesta; la pagina VoiceXML viene interpretata dall’interprete VoiceXML, l’interprete interagisce con<br />

il contesto, attraverso le api <strong>di</strong> Spinet si interfaccia al motore <strong>di</strong> riconoscimento <strong>per</strong> risalire all’input dell’utente<br />

tali informazioni vengono gestite dall’interprete, l’output viene passato al contesto che gestisce tale o<strong>per</strong>azione,<br />

in<strong>di</strong>rizzando, attraverso le API <strong>di</strong> IBM al motore TTS, il quale <strong>per</strong>mette <strong>di</strong> avere una risposta sintetizzata della<br />

voce.<br />

L’applicazione che gestisce il contesto è stata scritta nel linguaggio JAVA, i compiti principali <strong>di</strong> tale<br />

applicazione sono:<br />

Impostazione dei valori <strong>di</strong> default specifici richiesti dalle specifiche VoiceXML, la definizione delle<br />

grammatiche <strong>di</strong> default, i messaggi <strong>di</strong> default ad esempio quando viene richiesto l’aiuto, l’attivazione del motore<br />

<strong>di</strong> riconoscimento ROS Spinet, la pr<strong>ed</strong>isposizione del motore <strong>di</strong> TTS <strong>di</strong> IBM, la gestione delle grammatiche dei<br />

vari file VoiceXML, la generazione <strong>di</strong> un file <strong>di</strong> log <strong>per</strong> mantenere traccia delle varie fasi, quando il sistema<br />

viene settato viene attivato l’interprete, il quale continua ad elaborare le pagine VoiceXML, interagisce con il<br />

contesto <strong>per</strong> gestire l’attivazione o <strong>di</strong>sattivazione delle grammatiche, <strong>per</strong> richi<strong>ed</strong>ere i dati al motore <strong>di</strong><br />

riconoscimento, <strong>per</strong> la generazione dell’output con il motore TTS.<br />

34


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

3.4. L’architettura delle pagine VoiceXML.<br />

Il primo documento VoiceXML gestisce la funzione <strong>di</strong> benvenuto al servizio con un messaggio, dopo la<br />

presentazione viene richiamato un altro file che contiene una scelta a menù fra tre opzioni, le opzioni sono tre e<br />

l’utente può scegliere fra la ricerca <strong>di</strong> informazioni <strong>per</strong> il nome della via, <strong>per</strong> il nome dell’esercizio pubblico,<br />

oppure attraverso il nome della categoria d’appartenenza dell’esercizio pubblico ad esempio cinema.<br />

In base alla scelta che viene fatta viene richiamato un determinato file jsp al web server, tale richiesta viene<br />

sod<strong>di</strong>sfatta con la risposta <strong>di</strong> un file VoiceXML generato in tempo reale in funzione della scelta. L’utente ora<br />

avrà la possibilità a seconda della scelta prec<strong>ed</strong>ente <strong>di</strong> <strong>di</strong>re il nome della via, il nome dell’esercizio, o il nome<br />

della categoria. Dopo che l’utente ha espresso la sua scelta, viene richiamata una pagina jsp, la quale viene<br />

elaborata dal web server con delle connessioni al database <strong>per</strong> fare le varie query e viene generata una nuova<br />

pagina VoiceXML che sarà interpretata che conterrà informazioni riguardanti la richiesta fatta.<br />

Ad esempio se la richiesta è il nome della categoria, il web server ricercherà nel database ad esempio i cinema<br />

presenti, genererà una pagina VoiceXML secondo le specifiche della pagine jsp e all’utente verrà presentata la<br />

lista dei cinema presenti e verrà richiesto il nome del cinema sui cui desidera avere informazioni, quin<strong>di</strong> viene<br />

richiamato un altro file jsp che ricercherà nel database il nome del cinema, la pagina generata fornisce delle<br />

informazioni generali sull’esercizio pubblico richiesto, inoltre viene fatta una richiesta se l’utente vuole<br />

informazioni specifiche riguardo alle barrire architettoniche se la risposta è affermativa viene presentato un<br />

menù <strong>di</strong> scelta con una decina <strong>di</strong> opzioni in base all’opzione scelta viene generata una nuova pagina VoiceXML<br />

che fornirà le informazioni richieste, l’utente può richi<strong>ed</strong>ere altre informazioni specifiche oppure fare una nuova<br />

ricerca oppure lasciare il servizio. Le altre possibilità sono la ricerca <strong>per</strong> nome esercizio, nel seguente caso le<br />

fasi sono come le prec<strong>ed</strong>enti, se viene fatta una ricerca <strong>per</strong> via, viene fatta un ulteriore richiesta <strong>di</strong> informazione,<br />

il nome dell’esercizio oppure la categoria, se viene richiesto il nome dell’esercizio si ritorna nell’esempio<br />

prec<strong>ed</strong>ente nel caso sui richi<strong>ed</strong>a la categoria viene richiamata una specifica pagina jsp che ricerca attraverso una<br />

determinata query la via e la categoria scelta e genera una pagina VoiceXML che contiene tutti i pubblici<br />

esercizi appartenenti a tale categoria che sono nella via prescelta, <strong>di</strong> seguito dopo che l’utente ha visto la lista<br />

potrà scegliere il nome dell’esercizio e risalire alle informazioni desiderate come nel primo passaggio.<br />

L’utente ha sempre la possibilità <strong>di</strong> richi<strong>ed</strong>ere un aiuto al sistema, i messaggi sono co<strong>di</strong>ficati ma si possono<br />

<strong>per</strong>sonalizzare.<br />

35


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Figura 2. Interfaccia grafica che simula la chiamata telefonica<br />

36


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Figura 3. Interfaccia grafica Dialog Manager<br />

37


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Figura 4. Pressione del bottone Call<br />

38


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Figura 5 Grammatiche caricate <strong>ed</strong> eventi segnalati<br />

39


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

3.5. Osservazioni e test effettuati<br />

L’applicazione vocale ha sfruttato la potenzialità offerte da Spinet nella gestione delle grammatiche che<br />

<strong>per</strong>mette <strong>di</strong> <strong>per</strong>sonalizzare la riposta del riconoscitore, precisamente <strong>per</strong>mette <strong>di</strong> marcare con delle specifiche<br />

etichette la stringa <strong>di</strong> uscita del riconoscitore vocale inoltre <strong>per</strong>mette <strong>di</strong> gestione in Runtime: soglia <strong>di</strong> beam<br />

search <strong>di</strong>stinta <strong>per</strong> i modelli acustici e <strong>per</strong> le grammatiche,<br />

peso del modello del linguaggio, normalizzazione delle probabilità <strong>di</strong> transizione,<br />

insieme <strong>di</strong> modelli acustici da utilizzare, tipo <strong>di</strong> elaborazione acustica da eseguire. La creazione delle<br />

grammatiche è molto flessibile mette ha <strong>di</strong>sposizione un numero elevato <strong>di</strong> gra<strong>di</strong> <strong>di</strong> libertà si adatta molto <strong>per</strong><br />

questo tipo <strong>di</strong> applicazioni, dà la possibilità <strong>di</strong> creare delle grammatiche semplici dove non sono altro che una<br />

sequenza <strong>di</strong> coman<strong>di</strong> oppure <strong>di</strong> grammatiche molto complesse. La gestione delle grammatiche <strong>di</strong> ViaVoice IBM<br />

è più ad alto livello quin<strong>di</strong> ha meno gra<strong>di</strong> <strong>di</strong> libertà e si presta meno <strong>per</strong> la creazione <strong>di</strong> applicazioni vocali.<br />

L’interprete VoiceXML creato dall’IRST gestisce buona parte dei tag della specifica 1.0, mancano alcuni tag ma<br />

<strong>per</strong> creare applicazioni che non richi<strong>ed</strong>ano la gestione <strong>di</strong> trasferimenti <strong>di</strong> chiamate è un ottimo prodotto, qualche<br />

miglioramento potrebbe essere ottenuto con l’inserimento del tag . Se lo confrontiamo con<br />

l’interprete VoiceXML <strong>di</strong> IBM WebSphere abbiamo che quest’ultimo copre un maggior numero <strong>di</strong> tag, pecca<br />

che la versione <strong>di</strong>sponibile al momento della realizzazione dell’applicazione vocale supporta vari linguaggi ma<br />

non l’italiano.<br />

Dal punto <strong>di</strong> vista del motore TTS text-to-speech, avendo a <strong>di</strong>sposizione l’SDK <strong>di</strong> IBM (API Java) ha <strong>per</strong>messo<br />

<strong>di</strong> ottenere una sintesi vocale anche se le qualità non sono del tutto apprezzabili rispetto alla concorrenza.<br />

L’applicazione creata utilizza delle grammatiche create in modo statico, gli strumenti <strong>per</strong>mettono la creazione <strong>di</strong><br />

grammatiche in tempo reale, utili ad esempio quando il <strong>di</strong>alogo è a iniziativa mista. Le grammatiche <strong>per</strong> il<br />

riconoscimento possono essere <strong>di</strong> due tipi: in formato sorgente o compilate. Le grammatiche in formato sorgente<br />

sono descritte da file ASCII, con estensione grm e contengono una serie <strong>di</strong> <strong>di</strong>chiarazioni. Le grammatiche<br />

compilate vengono salvate in un file con estensione fsn.<br />

Esempio <strong>di</strong> grammatica creata con un <strong>ed</strong>itor <strong>di</strong> testi.<br />

# liste <strong>di</strong> parole singole, che verranno compilate ad albero.<br />

# tutti gli item nelle liste sono considerate parole, senza<br />

# bisogno dell'usuale formalismo [lire]//lire<br />

#list init<br />

via<br />

categoria<br />

nome esercizio<br />

#endlist<br />

Questo è un esempio <strong>di</strong> una semplice grammatica, utilizzata nell’applicazione vocale, il motore <strong>di</strong><br />

riconoscimento quando è abilitata questa grammatica ha <strong>per</strong> esempio una risposta che può essere la seguente se<br />

l’utente ha detto la parola ‘categoria’.<br />

@BG (init( categoria )init) @BG<br />

Abbiamo come parte iniziale e finale due simboli @BG che in<strong>di</strong>cano <strong>per</strong> convenzione del riconoscitore una<br />

pausa, la stringa è poi composta da una tag <strong>di</strong> a<strong>per</strong>tura in questo esempio (init( il quale si riconosce <strong>per</strong>ché è<br />

prec<strong>ed</strong>uto da una parentesi tonda e seguito da una parentesi tonda e come notiamo è il nome dato alla lista nel<br />

file grm. La parola che c’è dopo il tag separata da uno spazio è l’informazione che ha catturato il motore <strong>di</strong><br />

seguito ritroviamo il tag prec<strong>ed</strong>ente con le parentesi tonde nell’altro senso tag <strong>di</strong> chisusura )init).<br />

3.6. Conclusioni<br />

VoiceXML (Voice eXtensible Markup Language) è il nuovo linguaggio standard <strong>per</strong> la creazione <strong>di</strong> servizi<br />

vocali nel mondo web e rappresenta un elemento fondamentale. La definizione <strong>di</strong> uno standard riconosciuto,<br />

tanto dal consorzio W3C quanto dalla maggioranza delle imprese o<strong>per</strong>anti nel settore ITC, consente <strong>di</strong> <strong>di</strong>sporre<br />

40


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

<strong>di</strong> un linguaggio e degli strumenti <strong>di</strong> sviluppo "orientati al web". I tempi <strong>di</strong> sviluppo e le competenze necessarie<br />

<strong>per</strong> o<strong>per</strong>are con il VoiceXML sono quelli tipici delle applicazioni web, in quanto la derivazione da XML, rende<br />

il VoiceXML uno strumento con caratteristiche comuni a numerosi linguaggi web e la programmazione, la<br />

mo<strong>di</strong>fica <strong>ed</strong> il controllo <strong>di</strong> correttezza delle pagine VoiceXML possono quin<strong>di</strong> essere effettuati utilizzando degli<br />

<strong>ed</strong>itor XML standard. I servizi vocali realizzati possono essere trasportati sulle <strong>di</strong>fferenti piattaforme <strong>per</strong> la<br />

navigazione in voce, come accade nei siti web <strong>di</strong> ultima generazione, è possibile creare "pagine vocali"<br />

<strong>di</strong>namiche e <strong>per</strong>sonalizzate con un linguaggio in grado <strong>di</strong> generare pagine <strong>di</strong>namiche lato server (JSP, ASP,<br />

PERL). Tale standard <strong>per</strong>mette la massima libertà nella progettazione del sito vocale: è possibile creare siti con<br />

una struttura complessa., senza dover rinunciare alla semplicità <strong>di</strong> navigazione vocale:<br />

- sono presenti coman<strong>di</strong> specifici <strong>per</strong> ottimizzare l'intonazione delle voci sintetizzate, così come è possibile<br />

includere, all'interno dello stesso <strong>di</strong>alogo, file au<strong>di</strong>o, file musicali e brani <strong>di</strong> sintesi vocale.<br />

- il trasferimento <strong>di</strong> chiamata, la registrazione <strong>di</strong> file au<strong>di</strong>o, il riconoscimento dei toni DTMF e tutte le più<br />

comuni forme <strong>di</strong> interazione che possono risultare utili <strong>per</strong> lo sviluppo dei servizi vocali.<br />

41


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

4. Un front-end <strong>per</strong> la piattaforma VoxNauta <strong>di</strong> Loquendo<br />

(COMPUTER-SHARING)<br />

4.1. Introduzione<br />

Il presente documento descrive l’utilizzo dell’applicativo Visual Telephone Case (<strong>di</strong> seguito in<strong>di</strong>cato come<br />

VTC) come Front-End del VoxNauta Core Platform della piattaforma VoxNauta <strong>di</strong> Loquendo. Prima <strong>di</strong> passare<br />

alle specifiche tecniche relative all’integrazione tra Visual Telephone Case e VoxNauta, verrà descritto<br />

brevemente il funzionamento e l’utilizzo dell’applicativo.<br />

4.2. Visual Telephone C.A.S.E.<br />

Visual Telephone C.A.S.E. ® è lo strumento che consente, senza conoscere <strong>ed</strong> utilizzare linguaggi <strong>di</strong><br />

programmazione, <strong>di</strong> realizzare con facilità e imm<strong>ed</strong>iatezza applicazioni vocali in ambiente Windows, <strong>per</strong><br />

raccogliere e/o <strong>di</strong>ffondere informazioni <strong>di</strong> qualunque tipo da un <strong>per</strong>sonal computer <strong>per</strong> mezzo <strong>di</strong> un semplice<br />

telefono.<br />

Fig. 1 - La finestra principale dell’applicazione<br />

Visual Telephone C.A.S.E. offre una serie <strong>di</strong> coman<strong>di</strong> e funzioni (figura 1) che, <strong>di</strong>sposti in sequenza, <strong>per</strong>mettono<br />

<strong>di</strong> definire il flusso logico della telefonata. E' possibile interagire con archivi <strong>di</strong> dati <strong>di</strong> qualunque tipo e<br />

<strong>di</strong>mensione: database aziendali (clienti, fornitori, or<strong>di</strong>ni, prodotti,....), elenchi telefonici (linee <strong>di</strong>rette,<br />

interni,.....), archivi <strong>di</strong> messaggi vocali <strong>ed</strong> altri ancora. E’ possibile notare, sempre in fig. 1, il nuovo set <strong>di</strong><br />

coman<strong>di</strong> necessario <strong>per</strong> utilizzare alcune delle funzioni principali messe a <strong>di</strong>sposizione dallo Speech Server <strong>di</strong><br />

VoxNauta.<br />

42


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Visual Telephone C.A.S.E. <strong>per</strong>mette <strong>di</strong> realizzare la tua applicazione telefonica con il semplice uso del mouse<br />

(drag and drop), senza scrivere una riga <strong>di</strong> co<strong>di</strong>ce!<br />

Ricezione automatizzata <strong>di</strong> or<strong>di</strong>ni e/o prenotazioni, servizi <strong>di</strong> <strong>di</strong>ffusione informazioni, "fax on demand", sistemi<br />

<strong>di</strong> controllo or<strong>di</strong>ni e consegne, segreterie e centralini intelligenti, 24 ore su 24 e senza l'ausilio <strong>di</strong> alcun<br />

o<strong>per</strong>atore: sono solo alcuni esempi <strong>di</strong> ciò che è possibile realizzare con il Visual Telephone C.A.S.E.<br />

Visual telephone C.A.S.E. è <strong>di</strong>sponibile in tre <strong>di</strong>fferenti pacchetti:<br />

a) ENTRY<br />

mono linea e mono applicazione, <strong>per</strong> il privato, lo stu<strong>di</strong>o professionale o <strong>per</strong> l'impresa <strong>di</strong> piccole<br />

<strong>di</strong>mensioni che vogliono realizzare in proprio, ad esempio, un centralino "intelligente" <strong>per</strong> selezionare<br />

le chiamate in arrivo e fornire informazioni sulla propria attività;<br />

b) STANDARD<br />

multi linea e mono applicazione <strong>per</strong> la m<strong>ed</strong>ia-grande azienda che vuole creare un sistema telefonico in<br />

grado, ad esempio, <strong>di</strong> raccogliere or<strong>di</strong>ni prodotto, richieste <strong>di</strong> assistenza, gestire "fax on demand" con i<br />

propri listini, in contemporanea su un elevato numero <strong>di</strong> linee <strong>ed</strong> anche in lingue <strong>di</strong>fferenti, senza<br />

ricorrere a costose consulenze esterne;<br />

c) PROFESSIONAL<br />

multi linea e multi applicazione <strong>per</strong> la software house o il consulente che vogliono sviluppare<br />

applicazioni <strong>per</strong>sonalizzate riven<strong>di</strong>bili alla propria clientela, grazie ad un RUN-TIME dal costo<br />

estremamente contenuto.<br />

Ogni versione contiene esempi significativi e funzionanti <strong>per</strong> <strong>di</strong>verse aree <strong>di</strong> utilizzo (ricezione automatica <strong>di</strong><br />

or<strong>di</strong>ni, gestione <strong>di</strong> caselle vocali, “fax on demand”, “phone banking”, …..); si tratta <strong>di</strong> vere e proprie<br />

applicazioni-tipo in forma sorgente, che l’utente potrà <strong>per</strong>sonalizzare <strong>ed</strong> eventualmente integrare <strong>per</strong> realizzare il<br />

proprio sistema vocale senza dover ricorrere a costose consulenze esterne.<br />

4.3. Il sistema I.V.R.<br />

Visual Telephone C.A.S.E. ® è l’ambiente <strong>di</strong> sviluppo prodotto e commercializzato da Computer Sharing S.p.A.<br />

<strong>per</strong> la realizzazione <strong>di</strong> sistemi <strong>di</strong> Interactive Voice Response (I.V.R.).<br />

L’IVR è il sistema <strong>di</strong> risposta automatica che <strong>per</strong>mette <strong>di</strong> far interagire una macchina con una <strong>per</strong>sona che<br />

necessita d’informazioni. Questa macchina può proporre messaggi preregistrati, registrare messaggi, riconoscere<br />

i tasti <strong>di</strong>gitati sulla tastiera dal chiamante, riconoscere parole pr<strong>ed</strong>efinite, leggere con voce sintetica testo scritto,<br />

anche in più lingue, comporre interni, comunicare con la centrale telefonica tramite delle linee telefoniche<br />

analogiche (BCA) <strong>ed</strong> il Link CTI. Oltre a tutte le funzionalità telefoniche che può utilizzare un o<strong>per</strong>atore umano,<br />

è possibile utilizzare le classiche o<strong>per</strong>azioni informatiche: acc<strong>ed</strong>ere ad un database su mainframe o PC,<br />

interrogare o mo<strong>di</strong>ficare i dati, mandare e ricevere Fax, e-mail, eseguire applicazioni in automatico su richiesta<br />

del chiamante, ecc…<br />

Il sistema <strong>di</strong> risposta automatica si basa su un Personal Computer (Server I.V.R.) dotato <strong>di</strong><br />

una o più sch<strong>ed</strong>e Dialogic <strong>per</strong> la gestione <strong>di</strong> n linee analogiche derivate dalla centrale<br />

43


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

telefonica. Se in un successivo momento si vorrà incrementare il numero <strong>di</strong> linee I.V.R., sarà<br />

necessario inserire nel Server I.V.R. un'ulteriore sch<strong>ed</strong>a Dialogic.<br />

Il Server I.V.R. dovrà inoltre essere collegato alla rete locale, <strong>per</strong> l'eventuale accesso al Sistema Informativo<br />

dell'Azienda.<br />

Un sistema IVR è rappresentato da un albero che potrà avere un numero illimitato <strong>di</strong> sottomenu, strutturati su<br />

255 livelli, con un numero illimitato <strong>di</strong> messaggi <strong>di</strong> informazione; all’inizio del colloquio o in qualunque punto<br />

dell’albero <strong>di</strong> risposta, l’utente potrà richi<strong>ed</strong>ere il passaggio ad un o<strong>per</strong>atore, in ogni caso è garantito che, sia le<br />

telefonate in ingresso che quelle in ricaduta sul centralino, ricevano comunque una risposta dal primo o<strong>per</strong>atore<br />

libero; l’albero è abilitato alla gestione dei toni DTMF.<br />

Il sistema IVR potrà essere, eventualmente a seconda delle necessità, dotato delle funzioni <strong>di</strong><br />

sintesi e riconoscimento vocale, integrate nell’ambiente Visual Telephone C.A.S.E. Questo<br />

consente <strong>di</strong> rendere il sistema ancora più flessibile e <strong>di</strong> facile utilizzo, sia da parte dell’utente<br />

che <strong>per</strong> gli amministratori del sistema.<br />

L’albero informativo deve essere costruito in base alle specifiche esigenze che lo implementa: potrà essere<br />

realizzato autonomamente dal Personale oppure con il supporto dello staff tecnico <strong>di</strong> Computer Sharing SpA<br />

Architettura del Sistema I.V.R.<br />

4.4. Il sistema CTI: Call Center Kit<br />

Call Center Kit è il modulo <strong>di</strong> Visual Telephone C..A.S.E. che <strong>per</strong>mette <strong>di</strong> estendere le funzionalità IVR <strong>per</strong><br />

realizzare una soluzione CTI (Computer Telephony Integration). Rappresenta la scatola <strong>di</strong> montaggio <strong>per</strong><br />

costituire la Vostra soluzione <strong>di</strong> Call Center.<br />

44


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

• Componenti standard già pronti all’uso<br />

• Visual telephone CASE <strong>per</strong> <strong>per</strong>sonalizzare l’accoglimento delle chiamate<br />

• Integrazione dello screen-pop nelle applicazioni della vostra azienda (su LAN o Mainframe)<br />

Il Call Center creato con Visual Telephone C.A.S.E., comprende tutta la gestione delle comunicazioni<br />

telefoniche, in ingresso/uscita e verso gli o<strong>per</strong>atori, gestione delle code (ACD <strong>Software</strong>), la gestione degli<br />

Screen Pop (notifica da parte del Call Center dell’arrivo delle chiamate), collegamento alle applicazioni Desktop<br />

<strong>ed</strong> il relativo passaggio delle telefonate.<br />

L’o<strong>per</strong>atore potrà utilizzare qualsiasi sistema o<strong>per</strong>ativo, infatti la comunicazione tra Server e Client avviene<br />

tramite TCP/IP. In ambiente Windows il colloquio con l’applicazione Desktop potrà avvenire m<strong>ed</strong>iante<br />

un’interfaccia COM, appositamente creata, che mette a <strong>di</strong>sposizione tutte le funzionalità Call Center.<br />

L’applicazione dell’o<strong>per</strong>atore potrà essere creata utilizzando i più comuni ambienti <strong>di</strong> sviluppo. Visual Basic;<br />

Delphi; Access; HTML; Power Builder, ecc.<br />

I Call Center creati con Visual Telephone C.A.S.E. possono essere collegati a qualsiasi centrale telefonica.<br />

Questa architettura garantisce la scalabilità del sistema. Infatti i sistemi IVR e CTI, basati sulla tecnologia Visual<br />

Telephone C.A.S.E. <strong>di</strong> Computer Sharing, forniscono un’infrastruttura ben collaudata, estremamente leggera e<br />

flessibile che consente <strong>di</strong> incrementare il numero <strong>di</strong> linee IVR, <strong>di</strong> o<strong>per</strong>atori, etc., senza rischi <strong>di</strong> saturazione.<br />

45


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

4.5. Le funzionalità del Call Center KIT<br />

Il Call Center Kit consente <strong>di</strong> definire gruppi <strong>di</strong> attività ai quali è possibile assegnare risorse, siano esse umane,<br />

o<strong>per</strong>atori automatici, fax, linee in ingresso, ecc.<br />

Su ogni attività possono essere definite le seguenti funzionalità:<br />

• Tipo <strong>di</strong> attività (Inbound, Outbound od entrambe)<br />

• Assegnazione in “real-time” <strong>di</strong> o<strong>per</strong>atori e linee<br />

• Gestione della coda <strong>di</strong> chiamata (profon<strong>di</strong>tà e durata)<br />

• Criteri <strong>di</strong> <strong>di</strong>stribuzione delle chiamate<br />

• Pop-up <strong>di</strong> applicazioni<br />

• In postazione dei parametri <strong>per</strong> “Power <strong>di</strong>aling” e “Pr<strong>ed</strong>ictive <strong>di</strong>aling” (se Outbound)<br />

• Definizione <strong>di</strong> VoiceMail<br />

• Impostazione <strong>di</strong> IVR<br />

• Definizione dei messaggi <strong>per</strong> attesa in coda<br />

Il sistema consente inoltre <strong>di</strong>:<br />

• Eseguire funzioni <strong>di</strong> su<strong>per</strong>visione <strong>per</strong> l’assegnazione del tipo <strong>di</strong> attività degli o<strong>per</strong>atori<br />

• Monitorare l’andamento delle code, dei flussi <strong>di</strong> chiamata, dell’impegno degli o<strong>per</strong>atori<br />

• Effettuare statistiche sul traffico<br />

• Interfacciare il sistema con i più <strong>di</strong>ffusi database <strong>per</strong> l’estrazione delle liste <strong>di</strong> chiamata (Outbound)<br />

• Assegnare lo stesso o<strong>per</strong>atore a <strong>di</strong>verse attività<br />

4.6. Esempio <strong>di</strong> Flusso<br />

In fig. 2 è mostrato un esempio <strong>di</strong> flusso <strong>di</strong> applicazione, che implementa un semplice sistema IVR, utilizzando<br />

la funzione AskSentence. In questo esempio, all’arrivo <strong>di</strong> una telefonata, viene dapprima eseguito un comando<br />

VTC <strong>di</strong> Play <strong>per</strong> la riproduzione <strong>di</strong> un messaggio <strong>di</strong> benvenuto, successivamente viene eseguito un comando <strong>di</strong><br />

Start <strong>per</strong> lo Speech Server relativamente al comando AskSentence, e in seguito al risultato della funzione viene<br />

eseguita una ricerca sulla base dati.<br />

46


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Ogni funzione/comando ha un parametro <strong>di</strong> ritorno che sta ad in<strong>di</strong>care la riuscita o meno del comando. In caso<br />

<strong>di</strong> errore viene eseguita una proc<strong>ed</strong>ura <strong>di</strong> Logout con messaggio <strong>di</strong> saluto più l’esecuzione del comando<br />

Appen<strong>di</strong>Linea in modo da rendere libera la risorsa telefonica <strong>per</strong> la successiva chiamata sulla linea<br />

prec<strong>ed</strong>entemente impegnata.<br />

Fig. 2 – Esempio <strong>di</strong> flusso<br />

Dopo aver progettato il flusso, è sempre possibile mo<strong>di</strong>ficare ciascun comando; ad es. se si desidera cambiare i<br />

parametri <strong>di</strong> input della funzionalità <strong>di</strong> AskSentence, basterà cliccare a Design Time sulla riga relativa al<br />

comando. La fig. 3 mostra il form che viene visualizzato in caso <strong>di</strong> utilizzo del comando AskSentence, nel quale<br />

bisogna specificare o mo<strong>di</strong>ficare i parametri <strong>di</strong> input.<br />

47


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Fig. 3 – Comando AskSentence<br />

I suddetti parametri <strong>di</strong> input possono essere valorizzati anche attraverso l’utilizzo <strong>di</strong> variabili interne<br />

all’applicazione, come mostrato ad esempio nel flusso <strong>di</strong> figura 2.<br />

Al termine dell’o<strong>per</strong>azione, a seconda del valore restituito dallo Speech Server contenuto in Result si<br />

prenderanno in considerazione i parametri <strong>di</strong> Output. In caso <strong>di</strong> errore, una descrizione breve della tipologia <strong>di</strong><br />

errore sarà visualizzata sulla schermata principale dell’applicazione.<br />

Di seguito è descritta la traduzione del flusso relativo alla figura 2:<br />

LEGENDA<br />

testo sottolineato :<br />

TESTO MAIUSCOLO :<br />

Testo in corsivo :<br />

messaggio vocale registrato<br />

azione del programma sul data base<br />

azione dell’utente<br />

a) Messaggio <strong>di</strong> Benvenuto<br />

b) Messaggio sintetizzato da VoxNauta<br />

c) Digitazione co<strong>di</strong>ce ID<br />

d) CONTROLLO ESISTENZA ID<br />

se il co<strong>di</strong>ce ID è <strong>di</strong>sabilitato : messaggio <strong>di</strong> fine e appende.<br />

se non esiste e num.errori < 4 : messaggio <strong>di</strong> errore ID e torna al punto b).<br />

se non esiste e num. errori = 4 : messaggio <strong>di</strong> fine e appende.<br />

e) LETTURA ORDINE PER ID<br />

f) Messaggio FINE CONVERSAZIONE<br />

4.7. Statistiche<br />

Di seguito sono riportate le statistiche riguardo l’utilizzo e la commercializzazione <strong>di</strong> Visual Telephone C.A.S.E.<br />

48


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

• Progetti realizzati con Visual Telephone C.A.S.E.<br />

6%<br />

65%<br />

29%<br />

IVR informativi<br />

Call Center<br />

Interrogazioni base dati<br />

• Call Center<br />

20%<br />

20%<br />

Settore Televisivo<br />

Settore Assistenza Sw<br />

Logistica<br />

60%<br />

• Interrogazione Base Dati<br />

49


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

9%<br />

9%<br />

Accademie militari<br />

46%<br />

36%<br />

Università<br />

Aziende multiservizi<br />

municipali<br />

Camere <strong>di</strong> Commercio<br />

4.8. Esempio <strong>di</strong> Analisi statistiche<br />

Riportiamo <strong>di</strong> seguito le statistiche <strong>di</strong> luglio 1999 - giugno 2000 <strong>di</strong> una Camera <strong>di</strong> Commercio che utilizza<br />

Visual Telephone C.A.S.E.<br />

Il sistema elabora alcune tabelle e grafici che mettono in evidenza i risultati complessivi<br />

dell'utilizzo del sistema in un determinato <strong>per</strong>iodo. In particolare vengono evidenziati:<br />

• I contatti telefonici complessivi evasi (v. grafici nn. 1 e 1/a)<br />

• Le richieste <strong>di</strong> informazioni su casella vocale (v. grafici nn. 3)<br />

• Le richieste <strong>di</strong> informazioni via fax (v. grafico n. 4)<br />

TABELLA 1<br />

chiamate chiamate <strong>di</strong> cui <strong>di</strong> cui<br />

mese totali evase abbandonate <strong>di</strong> servizio<br />

lug-99 657 403 195 59<br />

ago-99 304 193 81 30<br />

set-99 556 375 148 33<br />

ott-99 603 411 155 37<br />

nov-99 615 460 123 32<br />

<strong>di</strong>c-99 453 340 85 28<br />

gen-00 500 337 145 18<br />

feb-00 655 422 208 25<br />

mar-00 572 405 133 34<br />

apr-00 657 452 172 33<br />

mag-00 693 476 180 37<br />

giu-00 579 414 138 27<br />

totale 6844 4688 1763 393<br />

(*) Nota: Le chiamate <strong>di</strong> servizio sono gli<br />

accessi al numero verde effettuati dal <strong>per</strong>sonale<br />

d’ufficio <strong>per</strong> interventi relativi a immissioni <strong>di</strong><br />

messaggi e verifiche <strong>di</strong> prova.<br />

L'in<strong>di</strong>ce <strong>di</strong> abbandono <strong>di</strong>pende da un<br />

ripensamento dell’utente, da un eccessivo<br />

tempo <strong>di</strong> attesa e dall'efficacia del servizio<br />

nell’agevolare la comunicazione con il<br />

citta<strong>di</strong>no.<br />

50


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

800<br />

Grafico n. 1 - Andamento mensile delle chiamate totali<br />

700<br />

600<br />

500<br />

400<br />

300<br />

657<br />

304<br />

556<br />

603 615<br />

453<br />

500<br />

655<br />

572<br />

657<br />

693<br />

579<br />

chiamate<br />

totali<br />

trend<br />

200<br />

TABELLA DI COMPARAZIONE<br />

100<br />

0<br />

1999/2000 1998/1999<br />

lug-99 657 495<br />

lug-99 ago-99 set-99 ott-99 nov-99 <strong>di</strong>c-99 gen-00 feb-00 mar-00 apr-00 mag-00 giu-00<br />

Ago-99 304 195<br />

Set-99 556 605<br />

Ott-99 603 411<br />

Nov-99 615 449<br />

Dic-99 453 285<br />

Gen-00 500 296<br />

Feb-00 655 393<br />

Mar-00 572 537<br />

Apr-00 657 498<br />

Mag-00 693 820<br />

Giu-00 579 793<br />

TOTALE 6844 5777<br />

La tabella <strong>di</strong> com<br />

confrontare il gr<br />

servizio in mesi<br />

prec<strong>ed</strong>ente.<br />

I dati della tabella s<br />

(grafico 1/a), in mo<br />

tendenza nel flusso<br />

Nell'esempio riport<br />

crescente. Rispetto<br />

infatti realizzato un<br />

Grafico n. 1/a: comparazione chiamate complessive<br />

900<br />

800<br />

700<br />

600<br />

500<br />

400<br />

300<br />

200<br />

657<br />

495<br />

304<br />

195<br />

605<br />

603<br />

556<br />

615<br />

411<br />

449<br />

453<br />

500<br />

285 296<br />

655<br />

393<br />

572<br />

537<br />

657<br />

498<br />

693<br />

820<br />

579<br />

793<br />

lug 99 - giu 2000<br />

stesso mese<br />

anno prec<strong>ed</strong>ente<br />

100<br />

0<br />

lug-<br />

99<br />

ago-<br />

99<br />

set-<br />

99<br />

ott-99 nov-<br />

99<br />

<strong>di</strong>c-<br />

99<br />

gen-<br />

00<br />

feb-<br />

00<br />

mar-<br />

00<br />

apr-<br />

00<br />

mag-<br />

00<br />

giu-<br />

00<br />

51


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

4.9. Tipologia delle richieste<br />

I dati rappresentati nel grafico e nella tabella n. 2, relativi al <strong>per</strong>iodo luglio 1999 - giugno 2000, mostrano la<br />

frequenza delle chiamate su ogni singola tipologia.<br />

Grafico n. 2 - Tipologie delle richieste<br />

2072<br />

2000<br />

voci<br />

TABELLA 2<br />

<strong>per</strong>iodo<br />

lug '99 - <strong>per</strong>iodo<br />

giu 2000 prec<strong>ed</strong>.<br />

1 - s<strong>ed</strong>e e<br />

a<strong>per</strong>tura 632 545<br />

2 - R.I.<br />

informazioni<br />

anagrafiche 1067 765<br />

3 -<br />

statistiche f<br />

Protesti<br />

cambiarie 168 143<br />

4 -<br />

informazioni 1058 842<br />

5 -<br />

visure via 2072 575<br />

6 -<br />

informazioni 716 217<br />

totale(*) 5713 3087<br />

1500<br />

1000<br />

500<br />

0<br />

632<br />

1067<br />

168<br />

1058<br />

716<br />

• La casella vocale <strong>per</strong> richiesta informazioni.<br />

TABELLA 3<br />

mese<br />

messaggi<br />

gestiti<br />

contatti<br />

sulla voce 6<br />

lug-99 29 61<br />

ago-99 8 59<br />

set-99 34 56<br />

ott-99 36 101<br />

nov-99 30 73<br />

<strong>di</strong>c-99 29 60<br />

gen-00 59 64<br />

feb-00 35 19<br />

mar-00 26 57<br />

apr-00 49 67<br />

mag-00 37 53<br />

giu-00 34 46<br />

totale 406 716<br />

La Voce 6 - Richiesta informazioni del sistema IVR - Numero<br />

Verde consente all’utente <strong>di</strong> lasciare messaggi su una casella<br />

vocale d<strong>ed</strong>icata, nel caso l’utente non trovasse l’informazione<br />

desiderata nel menu. Alle richieste <strong>di</strong> informazioni l’URP, con la<br />

collaborazione dei vari uffici interessati, dovrebbe garantire<br />

all’utenza una risposta entro la giornata successiva a quella <strong>di</strong><br />

richiesta, richiamando l’utente al recapito telefonico dallo stesso<br />

in<strong>di</strong>cato.<br />

Nell'esempio riportato l’URP ha coor<strong>di</strong>nato nel <strong>per</strong>iodo luglio<br />

1999 - giugno 2000 n. 406 messaggi registrati sulla segreteria<br />

(grafico n. 3) con un incremento dell'87%.<br />

52


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

70<br />

Grafico n. 3- Messaggi gestiti sul n. verde<br />

60<br />

50<br />

59<br />

49<br />

40<br />

30<br />

29<br />

34<br />

36<br />

30 29<br />

35<br />

26<br />

37<br />

34<br />

20<br />

10<br />

8<br />

messaggi<br />

gestiti<br />

trend<br />

0<br />

lug-99<br />

ago-99<br />

set-99<br />

ott-99<br />

nov-99<br />

<strong>di</strong>c-99<br />

gen-00<br />

feb-00<br />

mar-00<br />

apr-00<br />

mag-00<br />

giu-00<br />

• Trasmissione via fax delle informazioni richieste<br />

TABELLA 4<br />

n. fax<br />

inviati con stesso<br />

mese<br />

esito<br />

positivo<br />

mese anno<br />

prec.<br />

lug-99 62 12<br />

ago-99 27 3<br />

set-99 62 36<br />

ott-99 99 20<br />

nov-99 86 16<br />

<strong>di</strong>c-99 139 4<br />

gen-00 46 10<br />

feb-00 79 7<br />

mar-00 117 30<br />

apr-00 89 34<br />

mag-00 104 98<br />

giu-00 93 95<br />

totale 1003 365<br />

Il testo dei messaggi preregistrati, oltre che ascoltato, può anche<br />

essere richiesto via fax. L’utenza è ricorre spesso allo strumento del<br />

telefax <strong>per</strong> ottenere informazioni: nell'esempio, n. 365 fax risultano<br />

inviati con esito positivo nel 1° semestre 1999 (grafico n. 4) con un<br />

incremento del 174% sull'anno prec<strong>ed</strong>ente. Gli utenti che entrano<br />

nella voce 4 “Altre informazioni”, <strong>per</strong> esempio, recu<strong>per</strong>ano il testo<br />

integrale dei ban<strong>di</strong> <strong>di</strong> concorso e il modulo previsto <strong>per</strong> la<br />

presentazione della domanda, evitando così <strong>di</strong> ritirarli presso la s<strong>ed</strong>e<br />

dell’ente. Sono state inserite le sch<strong>ed</strong>e <strong>di</strong> istruzioni inerenti alcune<br />

funzioni della camera <strong>di</strong> commercio come quelle del deposito<br />

bilancio, il pagamento del <strong>di</strong>ritto annuale, il Mud. <strong>di</strong>ritti <strong>di</strong> segreteria,<br />

vi<strong>di</strong>mazioni, ecc.<br />

53


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Grafico n. 4 - Richieste <strong>di</strong> informazioni via fax<br />

160<br />

140<br />

139<br />

120<br />

100<br />

80<br />

60<br />

40<br />

20<br />

0<br />

lug-99<br />

62<br />

12<br />

ago-99<br />

27<br />

3<br />

set-99<br />

62<br />

36<br />

ott-99<br />

117 104<br />

99<br />

95<br />

86 89 93<br />

79<br />

98<br />

46<br />

30<br />

34<br />

20 16 10<br />

4<br />

7<br />

nov-99<br />

<strong>di</strong>c-99<br />

gen-00<br />

feb-00<br />

mar-00<br />

apr-00<br />

mag-00<br />

giu-00<br />

n. fax<br />

stesso mese<br />

anno prec.<br />

trend<br />

54


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

4.10. Vantaggi<br />

A fronte delle statistiche raccolte sull’utilizzo <strong>di</strong> Visual Telephone C.A.S.E. con l’integrazione delle tecnologie<br />

vocali della piattaforma VoxNauta in campo <strong>di</strong> servizi automatici <strong>di</strong> accesso vocale ad informazioni con utenti<br />

telefonici reali possiamo, infine, affermare che i vantaggi <strong>ed</strong> i benefici che ne sono derivati hanno avuto un<br />

impatto notevole in termini <strong>di</strong> qualità <strong>ed</strong> efficienza e riguardano in particolar modo:<br />

• usabilità del prodotto<br />

grazie alla semplice e flessibile interfaccia e relativo protocollo <strong>di</strong> comunicazione tra Front End e Speech<br />

Server;<br />

• tempi <strong>di</strong> sviluppo dell’applicazione<br />

inferiori <strong>di</strong> almeno il 50%;<br />

• livello <strong>di</strong> avanguar<strong>di</strong>a tecnologica, in particolare sull’interazione con l’utente in linguaggio naturale<br />

alto, considerando le statistiche descritte ai paragrafi prec<strong>ed</strong>enti nonché l’interazione tra uomo e macchina<br />

sfruttando appunto le tecnologie realizzate in ambito <strong>di</strong> sintesi e riconoscimento;<br />

• maggiore manutenibilità dell’applicazione<br />

naturale conseguenza del primo punto<br />

• migliore documentazione prodotta<br />

55


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

4.11. Testing<br />

I test eseguiti nell’ambito dell’integrazione tra Visual Telephone C.A.S.E. e VoxNauta hanno riguardato la<br />

comunicazione del Front End e lo Speech Server attraverso le due interfacce <strong>di</strong> comunicazione, vale a <strong>di</strong>re<br />

l’interfaccia IM, che avviene tra il CTI Service <strong>di</strong> Visual Telephone C.A.S.E. e lo Speech Server Service <strong>di</strong> Vox<br />

Nauta, e l’interfaccia I1, tra il CTI Agent (Server agent) <strong>di</strong> Visual Telephone C.A.S.E. e lo Speech Server MCR<br />

<strong>di</strong> VoxNauta.<br />

Nell’elenco che segue, <strong>per</strong> interfaccia, viene riportato il tipo <strong>di</strong> test, che può rappresentare un singolo<br />

evento/messaggio o uno scenario completo, seguito dall’esito che può essere OK oppure NEGATIOVO.<br />

Per i dettagli tecnici sugli scenari o messaggi scambiati si faccia riferimento al documento [2].<br />

4.12. Interfaccia IM<br />

Test eseguito<br />

Esito<br />

CREATESESSION<br />

ENDSESSION<br />

OK<br />

OK<br />

4.13. Interfaccia I1<br />

OPEN_PHONE_CHAN<br />

CLOSE_PHONE_CHAN<br />

WAIT_PHONE_CALL<br />

CLOSE_PHONE_CALL<br />

PLAY<br />

RECORD<br />

PLAY_AND_RECORD<br />

STOP_RECORD<br />

STOP_PLAY<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

56


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

4.14. Scenari<br />

LOGIN<br />

Ricezione <strong>di</strong> un obiettivo (START)<br />

PLAY <strong>di</strong> un messaggio<br />

PLAY TIMEOUT<br />

STOP PLAY su Play Non Interrompibile<br />

STOP PLAY su Play Interrompibile<br />

STOP PLAY prima dell’EOS<br />

STOP PLAY dopo l’EOS<br />

Inter<strong>di</strong>git Timeout con StopPlay a False<br />

Inter<strong>di</strong>git Timeout con StopPlay a True<br />

MAX DIGIT<br />

NOT_ENOUGH_DTMF_DETECTED<br />

DTMF_DETECTION<br />

Timeout Session su Fine Play<br />

Timeout Session su Fine Record<br />

RECORD_TIMEOUT<br />

PLAY_AND_RECORD con Bargein Attivo<br />

PLAY_AND_RECORD con Bargein Non Attivo<br />

DTMF durante PLAY_AND_RECORD<br />

Funzione AskSentence<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

NEGATIVO<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

Bibliografia<br />

[ 1] VoxNauta – Voice Portal Platform – Product description<br />

[ 2] Specifiche Interfaccia IM e Interfaccia I1<br />

57


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

5. Un servizio automatico ad accesso vocale (INTERACTIVE-<br />

MEDIA)<br />

5.1. Introduzione<br />

In questo documento descriviamo i risultati ottenuti mettendo a frutto la conoscenza acquisita<br />

fino ad ora sui riconoscitori <strong>di</strong> parlato <strong>per</strong> creare un applicazione, utilizzante un sistema <strong>di</strong><br />

ASR , al fine <strong>di</strong> realizzare un servizio automatico telefonico. Tale applicazione <strong>per</strong>mette <strong>di</strong><br />

far interagire un utente reale con un sistema e <strong>di</strong> valutarne i risultati. Partendo dalla scelta e<br />

l’analisi dell’applicazione, dando uno sguardo particolare alle strategie <strong>di</strong> recu<strong>per</strong>o dell’errore<br />

(recovery); vengono descritti i parametri scelti sui quali sono state effettuate le statistiche;<br />

infine sono mostrati i risultati statistici e le conclusioni che se ne possono trarre. Va subito<br />

premesso che il nostro intento sarà <strong>di</strong> valutare l’applicazione in termini <strong>di</strong> successi riportati<br />

dal servizio automatico (l’utente è riuscito o no ad ottenere ciò che voleva), con particolare<br />

attenzione alla recovery degli errori.<br />

5.2. L’applicazione<br />

5.2.1. Problematiche e scelta dell’applicazione<br />

La tecnologia <strong>di</strong> riconoscimento vocale utilizzata supporta il parlato continuo. Come<br />

applicazione si è pensato <strong>di</strong> simulare un centralino telefonico <strong>per</strong> lo smistamento delle<br />

chiamate all’interno <strong>di</strong> un’ azienda. Il servizio nella sua essenza svolge le seguenti funzioni:<br />

risponde ad una chiamata entrante, tramite una voce sintetizzata chi<strong>ed</strong>e al chiamante con chi<br />

vuole parlare, mette in contatto telefonico l’utente con la <strong>per</strong>sona desiderata. Apparentemente<br />

il servizio è molto semplice, tuttavia <strong>di</strong>verse sono le <strong>di</strong>fficoltà che si presentano:<br />

1. Come impostare il <strong>di</strong>alogo con l’utente:<br />

<strong>per</strong> ottenere i migliori risultati nell’interazione tra uomo e macchina è necessario che<br />

quest’ultimo si senta a suo agio, che le domande siano comprensibili, che non siano<br />

troppo lunghe da spazientire l’utente, che lo in<strong>di</strong>rizzino verso il corretto utilizzo del<br />

servizio quando necessario. Tutte queste necessità contestuali ci hanno obbligato ad una<br />

lunga selezione delle domande che vengono poste durante il servizio e che verranno<br />

trattate dettagliatamente in seguito<br />

2. Il modo con cui viene pronunciato il nome della <strong>per</strong>sona:<br />

potrebbe sembrare banale che alla domanda: “con chi vuole parlare?” un utente risponda<br />

col nome e cognome della <strong>per</strong>sona desiderata, ma non è così. Spesso il sentirsi rispondere<br />

da una voce sintetizzata causa un certo stato <strong>di</strong> incertezza (quello che io chiamo ansia da<br />

segreteria telefonica) che provoca indecisioni nel parlare; inoltre viene pronunciato solo il<br />

cognome, a volte prima il cognome e poi il nome, altre il cognome anteposto ad un titolo<br />

(dottore, ingegnere, etc...). Tutto questo deve essere previsto se si vogliono ottenere buoni<br />

risultati del servizio.<br />

58


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

3. Come essere sicuri che quanto compreso dal riconoscitore corrisponda effettivamente al<br />

nome pronunciato dall’utente:<br />

Gran parte dei problemi riguardanti gli errori <strong>di</strong> riconoscimento e le relative recovery<br />

derivano dal non poter essere certi dei risultati ottenuti. Gli ASR forniscono un parametro<br />

( la confidenza ) che in<strong>di</strong>ca, in un certo qual modo, il livello <strong>di</strong> sicurezza della macchina<br />

nei confronti <strong>di</strong> un risultato ottenuto: come a <strong>di</strong>re, ad esempio, che una confidenza del<br />

90% in<strong>di</strong>ca che la risposta è sicura al 90% ( in effetti non è esattamente così <strong>per</strong>ché non è<br />

molto chiaro il modo con cui viene calcolata la confidenza, tuttavia in<strong>di</strong>cativamente e <strong>per</strong><br />

i nostri scopi la considereremo così ). In genere si sceglie un determinato livello <strong>di</strong><br />

confidenza come soglia <strong>per</strong> decidere se accettare o rifiutare un risultato: si comprende<br />

bene come, una soglia bassa può portare a considerare buono un risultato errato, mentrer<br />

una alta a scartare riconoscimenti vali<strong>di</strong>. In pratica la soglia viene scelta in base al<br />

vocabolario su cui si basa il riconoscimento: cresce all’aumentare del numero e della<br />

somiglianza delle parole da cui è costituito. Valori accettabili si aggirano intorno all’<br />

80%.<br />

4. Come risolvere le situazioni <strong>di</strong> errore:<br />

E’ un problema molto critico <strong>per</strong>chè deve conciliare bene due necessità: quella <strong>di</strong><br />

rim<strong>ed</strong>iare agli errori commessi, e <strong>di</strong> non rendere pesante il <strong>di</strong>alogo. Quello che si cerca <strong>di</strong><br />

fare in realtà è <strong>di</strong> effettuare quel minimo <strong>di</strong> recovery che consenta <strong>di</strong> migliorare<br />

sensibilmente le prestazioni senza esagerare. Dando <strong>per</strong> scontato che è impossibile ridurre<br />

a zero gli errori (dato anche la non prev<strong>ed</strong>ibilità <strong>di</strong> alcuni utenti) si stabilisce il livello <strong>di</strong><br />

correttezza che si vuole tentare <strong>di</strong> ottenere, se tale livello non è raggiungibile <strong>di</strong>rettamente<br />

si escogitano delle recovery <strong>per</strong> avvicinarvisi tenendo presente che piccoli miglioramenti<br />

dei risultati non sempre giustificano il tempo necessario <strong>per</strong> raggiungerli!<br />

59


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

5.2.2. Descrizione dell’applicazione<br />

Prima <strong>di</strong> descrivere nel dettaglio l’applicazione è bene rendere note alcune scelte fatte nei<br />

riguar<strong>di</strong> dei problemi enunciati nel prec<strong>ed</strong>ente paragrafo:<br />

• I vocabolari:<br />

Per lasciare una certa libertà agli utenti e <strong>per</strong> rendere più interessante l’applicazione si è<br />

pensato <strong>di</strong> consentire come richieste possibili sia quelle <strong>per</strong> parlare con una <strong>per</strong>sona<br />

specifica che <strong>per</strong> mettersi incontatto con un settore: è possibile chi<strong>ed</strong>ere <strong>di</strong> parlare con una<br />

<strong>per</strong>sona pronunciando il solo cognome, il nome e cognome o anche il cognome seguito<br />

dal nome; i settori da 1 a 6 possono essere richiesti sia con l’or<strong>di</strong>nale che il car<strong>di</strong>nale,<br />

‘l’amministrazione’ anche con la parola ‘amministrativo’ e la ‘<strong>di</strong>rigenza’ anche con<br />

‘<strong>di</strong>rettivo’ e ‘<strong>di</strong>rezionale’; inoltre sono state aggiunte anche le parole ‘centralino’ <strong>ed</strong><br />

‘o<strong>per</strong>atore’ <strong>per</strong> chi non sa bene con chi parlare. E’ stato creato un apposito contesto.<br />

Poiché le recovery si basano essenzialmente su conferme, l’apposito vocabolario yes/no<br />

accetta le parole: ‘si’, ‘accetto’, ‘d’accordo’, ‘va bene’, ‘no’ e ‘rifiuto’. Per recu<strong>per</strong>are<br />

tutti quei casi in cui oltre il nome o il settore l’utente pronuncia altre parole, il<br />

riconoscimento viene impostato come ricerca <strong>di</strong> parole chiave all’interno <strong>di</strong> una sequenza<br />

<strong>di</strong> parlato.<br />

• La soglia <strong>di</strong> confidenza:<br />

Nell’esecuzione del test sui nomi (circa 420) si è riscontrato che i riconoscimenti con<br />

successo avevano quasi tutti un livello <strong>di</strong> confidenza su<strong>per</strong>iore all’ 85%. Poiché il<br />

contesto è basato su circa 400 parole si è pensato <strong>di</strong> scegliere come valore <strong>di</strong> soglia<br />

proprio 85%.<br />

• Le strategie <strong>di</strong> recovery:<br />

nell’applicazione vengono attuate due tipologie <strong>di</strong> recovery: la ripetizione del messaggio<br />

e la conferma a seconda del risultato ottenuto da un riconoscimento. Supponiamo che<br />

l’utente ( a seguito <strong>di</strong> una richiesta da parte della macchina ) abbia pronunciato il nome<br />

della <strong>per</strong>sona desiderata; il risultato del riconoscimento può essere un rifiuto (nel<br />

significato specificato nel paragrafo 3.6.3) oppure un nome con una certa confidenza: nel<br />

caso <strong>di</strong> rifiuto o confidenza al <strong>di</strong> sotto del 60% non viene preso in considerazione il<br />

risultato e viene riproposta <strong>per</strong> intero la domanda cercando <strong>di</strong> chiarire ciò che ci si aspetta<br />

venga detto dall’utente, nel caso <strong>di</strong> confidenza tra il 60% e 85% viene chiesta conferma<br />

sul nome che è stato compreso e le risposte possibili sono del tipo ‘si’ o ‘no’, infine con<br />

confidenza su<strong>per</strong>iore all’ 85% il risultato viene preso <strong>per</strong> buono e non c’è necessità <strong>di</strong><br />

recovery.<br />

Tutti questi punti saranno, comunque, meglio chiariti spiegando più in dettaglio l’applicazione.<br />

5.2.3. Il <strong>di</strong>agramma <strong>di</strong> flusso<br />

Per capire bene come è strutturata l’applicazione sviluppata riportiamo <strong>di</strong> seguito il<br />

<strong>di</strong>agramma <strong>di</strong> flusso comprendente tutti gli stati in cui interagiscono uomo e macchina (su<br />

richiesta della macchina l’utente produce una sequenza vocale che dovrà essere riconosciuta)<br />

e che, a seconda dell’esito del riconoscimento, determinano il proseguimento del flusso. E’<br />

ovvio che si tratta <strong>di</strong> una versione notevolmente semplificata ai fini della descrizione in cui<br />

ognuno degli stati rappresentati ne condensa in se <strong>di</strong>versi e che molti altri non vengono<br />

riportati <strong>per</strong>ché poco importanti ai fini della descrizione:<br />

60


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

BENVENUTO<br />

DOMANDA 1<br />

CONFERMA 1<br />

DOMANDA 2<br />

CONFERMA 1B<br />

CONFERMA 2<br />

DOMANDA 6<br />

CONFERMA 2B<br />

DOMANDA 3 DOMANDA 4<br />

CONFERMA 3<br />

DOMANDA 5<br />

CONFERMA 3B<br />

CONNESSIONE<br />

OPERATORE<br />

END<br />

61


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Gli stati<br />

La spiegazione dei vari stati comincia sempre con il prompt, ovvero la domanda che viene<br />

posta all’utente tramite voce sintetizzata, seguono poi le caratteristiche dello stato.<br />

− BENVENUTO: “Benvenuto in Interactive M<strong>ed</strong>ia”.<br />

Apre il <strong>di</strong>alogo con l’utente.<br />

− DOMANDA 1: “con chi desidera parlare ?”<br />

L’utente è tenuto a rispondere dopo il segnale acustico. La risposta viene analizzata dal<br />

riconoscitore <strong>ed</strong> in base al risultato si possono avere i seguenti casi:<br />

1. L’utente non parla, il risultato del riconoscimento è un rifiuto oppure la confidenza è<br />

al <strong>di</strong> sotto del 60%. In questi casi il flusso prosegue verso DOMANDA 3.<br />

2. La confidenza sta tra il 60% e l’ 85%. Il flusso prosegue verso CONFERMA 1.<br />

3. La confidenza su<strong>per</strong>a l’ 85%. Il flusso prosegue verso CONNESSIONE.<br />

4. Il risultato ottenuto è ambiguo. Il flusso prosegue verso DOMANDA 4. Poiché sono<br />

accettati anche i soli cognomi delle <strong>per</strong>sone, può capitare che ad uno <strong>di</strong> essi<br />

corrispondano più <strong>di</strong> una <strong>per</strong>sona (caso che effettivamente si verifica nella<br />

Fondazione <strong>per</strong> due cognomi). Questi casi vengono gestiti <strong>di</strong>versamente dagli altri.<br />

La domanda che viene posta è abbastanza breve e volutamente generica: <strong>per</strong> un utente che<br />

affronti il servizio <strong>per</strong> la prima volta, probabilmente una domanda più specifica<br />

renderebbe il compito più facile, allo stesso tempo <strong>per</strong>ò rischierebbe <strong>di</strong> far spazientire (<strong>per</strong><br />

il maggior tempo <strong>di</strong> attesa) chi già conosce il sistema. La nostra strategia è quin<strong>di</strong> <strong>di</strong><br />

aumentare la specificità delle domande solo in caso <strong>di</strong> <strong>di</strong>fficolta dell’utente a farsi capire<br />

dalla macchina.<br />

− CONFERMA 1: “Vuole parlare con Franco Rossi ?”.<br />

Una domanda prec<strong>ed</strong>entemente posta ha sortito un risultato con confidenza tra il 60% e l’<br />

85% <strong>per</strong>tanto viene chiesta conferma che il nome riconosciuto sia effettivamente quello<br />

pronunciato dall’utente. Si presentano i seguenti casi:<br />

1. L’utente non parla o il risultato del riconoscimento è un rifiuto il flusso prosegue<br />

verso CONFERMA 1B.<br />

2. Il risultato è ‘no’ o ‘rifiuto’ il flusso prosegue verso DOMANDA 2.<br />

3. Il risultato è ‘si’, ‘d’accordo’, ‘va bene’ o ‘accetto’ il flusso prosegue verso<br />

CONNESSIONE.<br />

62


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Anche in questo caso viene lasciata una certa libertà sulla parola che conferma oppure no<br />

la scelta.<br />

− CONFERMA 1B: “<strong>per</strong> favore risponda con accetto o rifiuto dopo il segnale acustico.<br />

Vuole parlare con Franco Rossi ?”.<br />

CONFERMA 1 ha dato un risultato non chiaro.<br />

1. L’utente non parla o il risultato del riconoscimento è un rifiuto il flusso prosegue<br />

verso OPERATORE. Poichè dopo una domanda e due conferme non si è riusciti ad<br />

ottenere una soluzione si decide <strong>di</strong> far parlare l’utente con un o<strong>per</strong>atore.<br />

2. Il risultato è ‘no’ o ‘rifiuto’ il flusso prosegue verso DOMANDA 2.<br />

3. Il risultato è ‘si’, ‘d’accordo’, ‘va bene’ o ‘accetto’ il flusso prosegue verso<br />

CONNESSIONE.<br />

Poichè la prec<strong>ed</strong>ente conferma non ha avuto un esito chiaro, viene riproposta la conferma<br />

specificando le parole da utilizzare e <strong>di</strong> parlare dopo il segnale acustico. Pur essendo<br />

ammesse anche altre parole viene forzato l’utente a pronunciare quelle più <strong>di</strong>stinguibili<br />

dalla macchina, <strong>per</strong> evitare che il problema derivi dal riconoscimento.<br />

– DOMANDA 2: “mi scusi, ripeta il nome della <strong>per</strong>sona o il settore con cui desidera<br />

parlare.”<br />

Si è verificato un caso <strong>di</strong> confusione: è stata chiesta conferma su un nome o un settore che<br />

non era quello desiderato dall’utente. Viene posta, allora, una domanda più specifica delle<br />

prima domanda. Si possono avere i seguenti casi:<br />

1. L’utente non parla, il flusso prosegue verso OPERATORE.<br />

2. il risultato del riconoscimento è un rifiuto oppure la confidenza è al <strong>di</strong> sotto del 60%.<br />

In questi casi il flusso prosegue verso DOMANDA 3.<br />

3. La confidenza sta tra il 60% e l’ 85%. Il flusso prosegue verso CONFERMA 2.<br />

4. La confidenza su<strong>per</strong>a l’ 85%. Il flusso prosegue verso CONNESSIONE.<br />

5. Il risultato ottenuto è ambiguo. Il flusso prosegue verso DOMANDA 4.<br />

Il flusso, con cui prosegue l’applicazione, è uguale allo stato DOMANDA 1, l’unica<br />

<strong>di</strong>fferenza è che nel caso l’utente non parli viene messo in contatto con un o<strong>per</strong>atore:<br />

probabilmente l’utente non sa con chi parlare, deve chi<strong>ed</strong>ere delle informazioni, non<br />

riesce o non desidera interagire con una macchina.<br />

– CONFERMA 2 e CONFERMA 2B sono sostanzialmente identiche alle prec<strong>ed</strong>enti<br />

conferme.<br />

– DOMANDA 6 è identica a DOMANDA 2.<br />

63


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

– DOMANDA 3: “Mi <strong>di</strong>spiace, non ho capito. Per favore ripeta il nome della <strong>per</strong>sona o il<br />

settore con cui desidera parlare”.<br />

In una domanda prec<strong>ed</strong>ente c’è stato un rifiuto o un livello <strong>di</strong> confidenza inferiore al 60%,<br />

<strong>per</strong>tanto viene riproposta la domanda specificando meglio le modalità della risposta. Il<br />

flusso prosegue come in DOMANDA 2.<br />

– CONFERMA 3 e CONFERMA 3B sono uguali alle altre conferme, l’unica <strong>di</strong>fferenza è<br />

che nel caso <strong>di</strong> confusione (l’utente ha risposto ‘no’ o ‘rifiuto’ alla conferma) non viene<br />

effettuata un’altra domanda ma si passa un o<strong>per</strong>atore.<br />

– DOMANDA 4: “Vuole parlare con Mario Rossi o con Alberto Rossi ?”.<br />

In una domanda prec<strong>ed</strong>ente, probabilmente, l’utente ha pronunciato il cognome della<br />

<strong>per</strong>sona desiderata senza sa<strong>per</strong>e che esistono più <strong>per</strong>sone con lo stesso cognome. La<br />

domanda allora chiarisce l’utente rendendo noti i nomi e consentendogli <strong>di</strong> fare una scelta<br />

più specifica. In questo stato è possibile pronunciare anche soltanto il nome <strong>di</strong> una delle<br />

<strong>per</strong>sone. Si possono verificare i seguenti casi:<br />

1. L’utente non parla, il risultato del riconoscimento è un rifiuto oppure la confidenza è<br />

al <strong>di</strong> sotto del 60%. In questi casi il flusso prosegue verso DOMANDA 3.<br />

2. La confidenza sta tra il 60% e l’ 85%. Il flusso prosegue verso CONFERMA 1.<br />

3. La confidenza su<strong>per</strong>a l’ 85%. Il flusso prosegue verso CONNESSIONE.<br />

4. Il risultato ottenuto è ambiguo. Il flusso prosegue verso DOMANDA 5.<br />

– DOMANDA 5: “Per favore specifichi il nome e cognome della <strong>per</strong>sona desiderate. Vuole<br />

parlare con Mario Rossi o con Alberto Rossi ?”.<br />

Viene informato l’utente su come effettuare la richiesta <strong>ed</strong> inoltre vengono ripetute le<br />

possibilità nel caso fossero state <strong>di</strong>menticate. Il flusso prosegue come nella domanda 4<br />

con la <strong>di</strong>fferenza che nel caso l’utente non parli viene passato un o<strong>per</strong>atore.<br />

– OPERATORE : “Cr<strong>ed</strong>o sia meglio passarle un o<strong>per</strong>atore. Attenda in linea <strong>per</strong> favore”.<br />

L’utente viene informato che sarà connesso telefonicamente con un o<strong>per</strong>atore. Questo<br />

stato viene raggiunto soltanto quando tra l’utente <strong>ed</strong> il sistema non c’è comprensione e<br />

ovviamente non può essere considerata un successo. Quando viene espressamente<br />

richiesto <strong>di</strong> parlare con un o<strong>per</strong>atore o con il centralino si ottiene il m<strong>ed</strong>esimo risultato ma<br />

attraverso lo stato CONNESSIONE e la chiamata è con successo.<br />

– CONNESSIONE: “Lei verrà messa in contatto telefonico con ... Chi devo annunciare ?....<br />

attenda in linea <strong>per</strong> favore.”<br />

64


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Questo stato ha due funzioni:<br />

1. Viene avvisato l’utente sulla <strong>per</strong>sona o il settore con cui verrà messo in contatto: c’è<br />

una probabilità non nulla che la macchina possa riconoscere un nome o un settore, con<br />

confidenza su<strong>per</strong>iore all’ 85%, quando ne era stato pronunciato uno <strong>di</strong>verso. Questo<br />

causa la connessione dell’utente con una <strong>per</strong>sona errata, <strong>per</strong>ò all’utente viene reso<br />

noto l’errore.<br />

2. Viene richiesto all’utente <strong>di</strong> qualificarsi: consente alla <strong>per</strong>sona chiamata <strong>di</strong> sa<strong>per</strong>e chi<br />

è l’utente (tramite l’aggiunta <strong>di</strong> opportuni stati che non abbiamo considerato nella<br />

simulazione) oppure consentono all’utente <strong>di</strong> notificare l’eventuale errore <strong>di</strong> cui al<br />

punto prec<strong>ed</strong>ente.<br />

Le telefonate che giungono in questo stato, e non presentano errore <strong>di</strong> <strong>per</strong>sona, vengono<br />

considerate come un successo.<br />

− END: “Termina qui questa simulazione <strong>di</strong> segreteria telefonica. Grazie <strong>per</strong> aver<br />

chiamato.”<br />

Il compito del chiamante è terminato, <strong>per</strong> dare l’idea <strong>di</strong> esere usciti dalla simulazione la<br />

voce non è più sintetizzata ma reale (quella del sottoscritto).<br />

65


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

5.2.4. I parametri da monitorare<br />

Scelta e nomenclatura<br />

In questo paragrafo spiegheremo quali parametri sono stati scelti <strong>per</strong> effettuare la valutazione<br />

dandone una motivazione.<br />

Una prima <strong>di</strong>stinzione si ha tra parametri relativi al servizio e parametri relativi al<br />

riconoscimento: i primi costituiscono quella classe <strong>di</strong> parametri utili <strong>per</strong> la valutazione del<br />

servizio automatico, mentre i secon<strong>di</strong> alla valutazione del riconoscimento effettuato<br />

all’interno del servizio. Tra i primi si <strong>di</strong>stinguono poi, parametri globali (relativi al servizio in<br />

generale) e parametri specifici (relativi ad una particolare domanda o conferma); tra i secon<strong>di</strong><br />

si <strong>di</strong>stinguono invece, parametri relativi al riconoscimento effettuato a seguito <strong>di</strong> una<br />

domanda (contesto Azienda) e quelli a seguito <strong>di</strong> una conferma (contesto yes/no). Adesso<br />

v<strong>ed</strong>remo più nel dettaglio i vari parametri.<br />

• Parametri relativi al servizio automatico.<br />

− Esito del servizio:<br />

sono stati scelti quattro possibili esiti riguardanti l’utilizzo del servizio: successo,<br />

connessione con o<strong>per</strong>atore, connessione con <strong>per</strong>sona o settore errato, chiamata non<br />

terminata. Per ognuno <strong>di</strong> essi vengono definiti i seguenti parametri:<br />

1. N C : numero <strong>di</strong> successi: l’utente ha terminato la chiamata <strong>ed</strong> è riuscito a mettersi<br />

in contatto con chi desiderava.<br />

2. N O : numero <strong>di</strong> insuccessi: l’utente ha terminato la chiamata ma è stato messo in<br />

contatto con un o<strong>per</strong>atore.<br />

3. N E : numero <strong>di</strong> errori: l’utente ha terminato la chiamata ma si è messo in contatto<br />

con una <strong>per</strong>sona <strong>di</strong>versa da quella desiderata.<br />

4. N N : numero <strong>di</strong> compiti non terminati: la telefonata è stata interrotta prima della sua<br />

terminazione.<br />

Questi parametri sono utili a verificare le prestazioni del servizio e, in particolare<br />

l’ultimo, ad evidenziare le <strong>di</strong>fficoltà <strong>di</strong> interazione tra l’utente e la macchina.<br />

− Durata del servizio:<br />

viene calcolata la durata L <strong>di</strong> ogni chiamata, queste sono poi <strong>di</strong>vise in base all’esito<br />

(L C ,L O ,L E ,L N ), calcolate le m<strong>ed</strong>ie e la deviazione standard. La lunghezza <strong>di</strong> un<br />

servizio è un parametro interessante <strong>per</strong> l’usabilità del servizio: spesso ottenere un<br />

risultato buono in un tempo lungo non è accettabile <strong>per</strong> un servizio automatico.<br />

• Parametri relativi al riconoscimento.<br />

− Esito delle domande e conferme:<br />

<strong>per</strong> ogni domanda e conferma effettuata nel servizio vengono considerati:<br />

1. N : numero totale delle volte che gli utenti hanno affrontato quella domanda o<br />

quella conferma.<br />

2. N C : numero <strong>di</strong> riconoscimenti corretti: la risposta dell’utente è stata riconosciuta<br />

correttamente.<br />

3. C : <strong>per</strong>centuale <strong>di</strong> riconoscimenti corretti (C = N C /N).<br />

66


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

4. N S : numero <strong>di</strong> riconoscimenti errati (sostituzione): la risposta dell’utente è stata<br />

riconosciuta erroneamente.<br />

5. S : <strong>per</strong>centuale <strong>di</strong> riconoscimenti errati.<br />

6. N C50% : numero <strong>di</strong> riconoscimenti parzialmente corretti: la risposta dell’utente è<br />

stata scambiata con una <strong>di</strong>versa che tuttavia non porta ad un errore ai fini del<br />

servizio (ad esempio se Marco Rossi viene riconosciuto come Rossi Marco è un<br />

errore ai fini del riconoscimento ma non ai fini dell’esito del servizio).<br />

7. C 50% : <strong>per</strong>centuale <strong>di</strong> riconoscimenti corretti al 50%.<br />

8. N I : numero <strong>di</strong> insersioni: l’utente non ha pronunciato una sequenza possibile che<br />

invece è stata riconosciuta.<br />

9. I : <strong>per</strong>centuale <strong>di</strong> insersioni.<br />

10. N D : numero <strong>di</strong> cancellazioni: c’é stato un rifiuto in risposta ad una sequenza<br />

valida dell’utente.<br />

11. D : <strong>per</strong>centuale <strong>di</strong> cancellazioni.<br />

La raccolta <strong>di</strong> questi parametri <strong>di</strong>visi <strong>per</strong> ciascuna domanda e conferma evidenziano da<br />

una parte l’efficacia della formulazione delle stesse e dall’altra quanto l’utente si<br />

impratichisce con il sistema passando da una domanda alla successiva.<br />

− Contesto:<br />

le sequenze ammesse sono state <strong>di</strong>vise in quattro categorie:<br />

1. I cognomi: COGN<br />

2. I nome e cognome: NMCG<br />

3. I cognome e nome: CGNM<br />

4. Le denominazioni dei settori: SETT<br />

Per ognuna <strong>di</strong> queste categorie vengono considerati gli stessi parametri visti nel<br />

prec<strong>ed</strong>ente punto (esito delle domande e conferme).<br />

− Contesto yes/no:<br />

<strong>per</strong> ogni parola ammessa e non viene considerata la parola riconosciuta e creata una<br />

matrice <strong>di</strong> confusione.<br />

Questi parametri consentono <strong>di</strong> effettuare una valutazione del riconoscitore in una<br />

situazione reale <strong>ed</strong> evidenziare la <strong>di</strong>fferenza con il test del capitolo prec<strong>ed</strong>ente.<br />

La raccolta<br />

Per ricavare dall’applicazione tutti i parametri <strong>di</strong> cui avevamo bisogno è stato necessario<br />

registrare i dati statistici relativi ad ogni telefonata.<br />

− I file dbf:<br />

l’applicativo Meltemi provv<strong>ed</strong>e già alla creazione <strong>di</strong> file dbf che registrano l’andamento<br />

<strong>di</strong> ogni chiamata e che servono alla generazione delle statistiche. Per sfruttare al meglio<br />

questa possibilità è stato necessario comprendere nella statistica tutti e soli quegli stati<br />

dell’applicazione che intendevamo monitorare, in particolare quelli relativi alle domande<br />

67


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

<strong>ed</strong> alle conferme: fortunatamente il generatore delle applicazioni consente <strong>di</strong> fare ciò<br />

semplicemente settando un parametro dello stato.<br />

− I file au<strong>di</strong>o:<br />

<strong>per</strong> confrontare quanto detto da ogni utente con l’esito del riconoscimento era necessario<br />

salvare il parlato in un file au<strong>di</strong>o. Questo è stato fatto <strong>di</strong>stinguendoli <strong>per</strong> chiamata e <strong>per</strong><br />

domanda o conferma.<br />

− I log file:<br />

i risultati <strong>di</strong> ogni riconoscimento sono salvati nei cosiddetti log file anch’essi <strong>di</strong>visi <strong>per</strong><br />

chiamata e domanda o conferma come i prec<strong>ed</strong>enti.<br />

– La tabella delle chiamate:<br />

I dati raccolti nei file appena in<strong>di</strong>cati non erano veloci da consultare. Per questo è stata<br />

creata una tabella Excel che raggruppa tutti i dati in un unico foglio. Ogni riga della<br />

tabella contiene tutti i dati relativi ad una chiamata: data, ora, esito e durata della<br />

chiamata, inoltre, <strong>per</strong> ogni domanda e conferma effettuata, viene riportato ciò che è stato<br />

detto dall’utente e la sequenza riconosciuta. In questo modo è stato più facile osservare i<br />

risultati, or<strong>di</strong>narli in funzione <strong>di</strong> campi <strong>di</strong>versi (ad esempio <strong>per</strong> esito della chiamata, <strong>per</strong><br />

durata, etc.), e ottenere delle statistiche tramite le query <strong>ed</strong> altre funzioni fornite da<br />

Microsoft Excel.<br />

5.3. L’analisi statistica<br />

− Il numero delle prove e degli utenti:<br />

Il numero <strong>di</strong> chiamate necessario è stato in<strong>di</strong>viduato con l’intento <strong>di</strong> ottenere una certa<br />

vali<strong>di</strong>tà statistica rispetto al parametro esito del servizio. Considerandolo come una<br />

variabile binaria (successo o insuccesso, comprendendo in quest’ultimo caso anche la non<br />

terminazione) e ipotizzando come possibile (in base ai test effettuati sul riconoscimento <strong>di</strong><br />

nomi) una <strong>per</strong>centuale <strong>di</strong> successo dell’ 81% vogliamo ottenere un livello <strong>di</strong> confidenza<br />

dell’85% <strong>ed</strong> una potenza della prova del 90% <strong>di</strong> poter rivelare uno scostamento del 10%<br />

dal valore ottenuto. Inserendo questi parametri si ottiene:<br />

( 1.96 + 1.28)<br />

⎛ 0.81•<br />

0.19<br />

N = ⎜<br />

⎝ 0.1•<br />

0.81<br />

<strong>per</strong>tanto è stato scelto N=250.<br />

⎞<br />

⎟<br />

⎠<br />

2<br />

= 246,24<br />

5.3.1. Il servizio automatico<br />

Riguardo ai parametri relativi il servizio automatico abbiamo raccolto le statistiche secondo<br />

l’esito delle chiamate, la durata delle chiamate e il numero <strong>di</strong> domande e conferme. Le<br />

considerazioni sui risultati vengono fatte alla fine <strong>per</strong> poterli confrontare meglio.<br />

68


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Le tabelle<br />

• Esito delle chiamate:<br />

come già detto nel paragrafo sulla scelta e nomenclatura dei parametri, <strong>per</strong> ogni chiamata<br />

si possono verificare quattro possibili esiti:<br />

1. Successo: l’utente è riuscito a mettersi in contatto con la <strong>per</strong>sona o il settore<br />

desiderato.<br />

2. O<strong>per</strong>atore: l’utente non è riuscito a mettersi in contatto con la <strong>per</strong>sona o il settore<br />

desiderato <strong>ed</strong> è stato passato ad un o<strong>per</strong>atore.<br />

3. Errore: <strong>per</strong> un errore <strong>di</strong> riconoscimento l’utente è stato messo in contatto con una<br />

<strong>per</strong>sona o settore <strong>di</strong>verso da quello richiesto.<br />

4. Non terminato: l’utente ha riagganciato prima <strong>di</strong> terminare la chiamata.<br />

La tabella che segue riporta la statistica sulle occorrenze <strong>di</strong> ciascuno <strong>di</strong> questi esiti in<br />

termine <strong>di</strong> numero e <strong>per</strong>centuale, l’errore standard e l’intervallo <strong>di</strong> confidenza al 95% che<br />

si ottengono con la nostra numerosità campionaria (254).<br />

NUMERO PERCENT. DEVSTRD ERRSTRD INT. CONF 95%<br />

SUCCESSI 204 80.3% 0.40 0.02 75,8% - 83,6%<br />

OPERATORE 40 15.7% 0.36 0.02 12,1% - 19,1%<br />

ERRORI 9 3.5% 0.18 0.01 1,9% - 5,1%<br />

NON TERMINATI 1 0.4% 0.06 0.004 0,14% - 1,17%<br />

Tabella 0.1: statistica sull’esito delle chiamate.<br />

• Durata del servizio:<br />

nella tabella che segue vengono riportate le statistiche riguardanti la durata delle<br />

chiamate. Queste sono sempre <strong>di</strong>vise rispetto l’esito<br />

mentre l’ultima riga riporta il totale su tutte le chiamate in<strong>di</strong>stintamente. L’intervallo <strong>di</strong><br />

confidenza va inteso come scarto in secon<strong>di</strong> sul valore m<strong>ed</strong>io.<br />

MIN MAX MEDIA DEVSTD ERRSTD CONF 95%<br />

SUCCESSI 14 56 25.4 9.1 0.64 1.3<br />

OPERATORE 26 68 36.7 9.0 1.42 2.8<br />

ERRORI 16 42 27.2 10.1 3.36 6.6<br />

NON TERMINATI 37 37 37.0 0.0 0.00 0.0<br />

TOTALE 14 68 27.3 10.0 0.63 1.2<br />

Tabella 0.2: statistica sulla durata delle chiamate, i tempi sono espressi in secon<strong>di</strong>.<br />

69


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

• Numero <strong>di</strong> domande e conferme affrontate nel servizio:<br />

in questa tabella viene fatta una statistica in base al numero <strong>di</strong> domande e <strong>di</strong> conferme<br />

sostenute in ogni chiamata, sempre mantenendo la <strong>di</strong>stinzione rispetto l’esito della<br />

chiamata. Una chiamata può risolversi, secondo l’esito del riconoscimento, con una sola<br />

domanda, con una domanda <strong>ed</strong> una conferma, due domande <strong>ed</strong> una conferma, e così via;<br />

in questa tabella vengono appunto raggruppate tutte le chiamate che hanno dovuto<br />

affrontare una sola domanda,..., e <strong>di</strong>stinte tra quelle il cui esito è stato un successo,<br />

o<strong>per</strong>atore, errore o non terminate. Nell’ultima colonna viene riportata la durata m<strong>ed</strong>ia<br />

in<strong>di</strong>pendentemente dall’esito su ogni gruppo <strong>di</strong> chiamate.<br />

SUCCESSI<br />

OPERATORE<br />

ERRORI<br />

NON<br />

TERMINATI<br />

TOTALE<br />

DURATA<br />

MEDIA<br />

1 DOMANDA<br />

115<br />

56,4%<br />

0<br />

4<br />

44,4%<br />

0<br />

119<br />

46,9%<br />

18.9<br />

1 DOM+1 CONF<br />

15<br />

7,4%<br />

0 0 0<br />

15<br />

5,9%<br />

23.1<br />

1 DOM+2 CONF<br />

7<br />

3,4%<br />

1<br />

2,5%<br />

0 0<br />

8<br />

3,1%<br />

36.8<br />

2 DOMANDE<br />

40<br />

19,6%<br />

21<br />

52,5%<br />

4<br />

44,4%<br />

1<br />

100%<br />

66<br />

26%<br />

32.7<br />

2 DOM+1 CONF<br />

21<br />

10,3%<br />

11<br />

27,5%<br />

1<br />

11,1%<br />

0<br />

33<br />

13%<br />

37.4<br />

2 DOM+2 CONF<br />

4<br />

2%<br />

5<br />

12,5%<br />

0 0<br />

9<br />

3,5%<br />

44.3<br />

RESTO<br />

2<br />

1%<br />

2<br />

5%<br />

0 0<br />

4<br />

1,6%<br />

61.0<br />

Tabella 0.3: statistica delle chiamate in base al numero <strong>di</strong> domande e conferme sostenute.<br />

70


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

5.3.2. Considerazioni sui risultati<br />

dalla tabella 1.1 si v<strong>ed</strong>e che: solo un utente non ha terminato il compito, prova che il servizio<br />

non ha creato particolari <strong>di</strong>fficoltà tali da scoraggiare le <strong>per</strong>sone.<br />

Gli errori sono limitati ad un 3,5% : come detto prec<strong>ed</strong>entemente, nel paragrafo riguardante<br />

gli stati dell’applicazione, gli errori sono strettamente legati a quel valore <strong>di</strong> soglia del livello<br />

<strong>di</strong> confidenza che fa’ decidere se accettare oppure no il risultato <strong>di</strong> un riconoscimento. Nel<br />

nostro caso il valore è fissato all’ 85%, ovviamente se fosse più alto si riscontrerebbero meno<br />

errori, ma aumenterebbe la necessità <strong>di</strong> chi<strong>ed</strong>ere conferme alle domande facendo aumentare<br />

la durata m<strong>ed</strong>ia delle chiamate. Osservando la tabella 1.3 si nota che le chiamate con errore<br />

hanno affrontato, in pari <strong>per</strong>centuale, una o due domande e solo in <strong>per</strong>centuale minore due<br />

domande <strong>ed</strong> una conferma, prova che tal errore è causato proprio da un falso riconoscimento<br />

nelle domande più che nelle conferme. In questi casi l’utente è lo stesso avvisato dell’errore<br />

prima <strong>di</strong> essere connesso telefonicamente.<br />

Le chiamate deviate ad un o<strong>per</strong>atore rappresentano il 15,7% del totale: anche questa è<br />

influenzata dalla nostra politica, già descritta nel paragrafo d<strong>ed</strong>icata agli stati, <strong>di</strong> limitare il<br />

numero delle domande proposte in una chiamata; aumentando questo limite si otterrebbero,<br />

probabilmente, più successi e meno deviazioni verso l’o<strong>per</strong>atore, ma questo aumenterebbe la<br />

durata m<strong>ed</strong>ia delle chiamate; dalla tabella 1.2 si v<strong>ed</strong>e infatti che le telefonate connesse ad un<br />

o<strong>per</strong>atore hanno una durata m<strong>ed</strong>ia su<strong>per</strong>iore <strong>di</strong> circa il 50% rispetto a quelle con successo.<br />

Le chiamate che riportano un successo sono circa l’ 80%, ovviamente vale il <strong>di</strong>scorso fatto<br />

prec<strong>ed</strong>entemente: i risultati potrebbero essere migliorati a scapito della durata m<strong>ed</strong>ia delle<br />

chiamate. dalla tabella 1.3 si v<strong>ed</strong>e che il 56% <strong>di</strong> queste riscontrano un successo <strong>di</strong>retto (alla<br />

prima domanda) il restante 44% necessita <strong>di</strong> recovery: il 19,6% necessita <strong>di</strong> una seconda<br />

domanda, il 7,4% <strong>di</strong> una conferma, il 3,4% <strong>di</strong> due conferme, il 10,3% <strong>di</strong> una domanda <strong>ed</strong> una<br />

conferma, solo il 3% <strong>di</strong> livelli maggiori. Dalla tabella 1.2 si v<strong>ed</strong>e che il tempo m<strong>ed</strong>io delle<br />

chiamate con successo è <strong>di</strong> poco su<strong>per</strong>iore a quello necessario <strong>per</strong> effettuare una domanda <strong>ed</strong><br />

una conferma (tabella 1.3).<br />

71


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

6. Esempio <strong>di</strong> un servizio sviluppato con l’SCE Phoenix (NECSY)<br />

Fig.1<br />

L’immagine <strong>di</strong> Fig.1 riporta una videata dell’ambiente si sviluppo delle applicazioni (SCE) del sistema Phoenix<br />

(Jade). I <strong>di</strong>agramma <strong>di</strong> flusso della Fig. 1 descrive la fase <strong>di</strong> acquisizione della data <strong>di</strong> nascita <strong>di</strong> un utente<br />

utilizzando la funzionalita’ ASR. La SIB che definisce le modalita’ dell’ASR e’ quella con il titolo<br />

“DataDiNascita”(Fig.2 ); il blocchetto prec<strong>ed</strong>ente all’ASR e’ una emissione <strong>di</strong> fonia (prompt <strong>per</strong> il<br />

riconoscimento) mentre in quello successivo vengono elaborati i risultati del riconoscimento. Infine si puo’<br />

notare nel blocco <strong>di</strong> decisione “P8_Decision” la scelta <strong>di</strong> <strong>di</strong>versi rami del servizio in funzione del punteggio <strong>di</strong><br />

riconoscimento (su<strong>per</strong>iore o no alla soglia Th2) della data (giorno/mese) e dell’anno.<br />

72


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Fig. 2<br />

6.1. Architettura del sistema installato<br />

La descrizione fa’ riferimento ad una installazione presso un importante o<strong>per</strong>atore della telefonia mobile.<br />

• Il sistema Phoenix viene installato su un PC industriale con Sistema O<strong>per</strong>ativo Windows 2000.<br />

• Supporta le sch<strong>ed</strong>e telefoniche Dialogic e Aculab conformi allo standard H100<br />

• Il Middleware <strong>di</strong> comunicazione e’ CTM<strong>ed</strong>ia 2.0<br />

• Le interfacce telefoniche sono linee anologiche, E1.<br />

• Le risorse telefoniche sono conformi allo standard ECTF S300<br />

6.2. Statistiche sulla <strong>per</strong>centuale <strong>di</strong> automazione raggiunta<br />

I dati sulle statistiche dell’applicazione che ci sono <strong>per</strong>venuti non sono ancore completi; comunque dai dati in<br />

nostro possesso si puo’ stimare una <strong>per</strong>centuale <strong>di</strong> riconoscimento dell’ASR del 95% , mentre la <strong>per</strong>centuale <strong>di</strong><br />

utenti che completano con successo le proc<strong>ed</strong>ure <strong>di</strong> acquisizione automatica e’ 80-85 %.<br />

6.3. Considerazioni sui risultati<br />

L’utilizzo delle tecnologie vocali integrate nel sistema Phoenix nell’ambito del progetto SI-TAL sono<br />

effettivamente in grado <strong>di</strong> semplificare la complessita’ <strong>di</strong> una applicazione, riducendone quin<strong>di</strong> sensibilmente i<br />

tempi <strong>di</strong> sviluppo e <strong>di</strong> manutenzione e quin<strong>di</strong> anche i costi fino anche al 50%.<br />

Basti infatti pensare alla <strong>di</strong>fficolta’ <strong>di</strong> dover continuamente registrare delle fonie variabili (notizie, informazioni<br />

meteo, oroscopo, ecc.) che una applicazione come un portale vocale necessita. L’ utilizzo <strong>di</strong> una risorsa TTS<br />

puo’ invece rendere imm<strong>ed</strong>iatamente <strong>di</strong>sponibili questo tipo <strong>di</strong> messaggi. La semplicita’ e la praticita’ <strong>di</strong> un<br />

TTS va confrontata con la piu’ complessa (e piu’ costosa) proc<strong>ed</strong>ura <strong>di</strong> fare registrare ad uno speaker<br />

professionista le fonie da aggiornare.<br />

In modo analogo una risorsa ASR, (e in misura maggiore un gestore completo del <strong>di</strong>alogo), e’ in grado <strong>di</strong><br />

semplificare e <strong>di</strong> rendere piu’ naturale l’iterazione tra un utente telefonico e una applicazione automatica.<br />

73


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

6.4. Descrizione del sistema<br />

L'interazione con i sistemi telefonici automatici è resa più semplice e naturale con l'utilizzo dei portali<br />

vocali. Si tratta <strong>di</strong> rispon<strong>di</strong>tori con i quali, grazie alle più evolute tecnologie <strong>di</strong> riconoscimento del parlato,<br />

è possibile interagire usando il mezzo più semplice: la voce.<br />

E' possibile, utilizzando parole chiave che vengono suggerite dal sistema automatico con una<br />

voce guida, navigare un albero <strong>di</strong> menu fino a raggiungere le informazioni volute.<br />

Questa modalità <strong>di</strong> consultazione delle notizie è sempre più <strong>di</strong>ffusa <strong>per</strong> gli ottimi risultati che la<br />

tecnologia ha raggiunto e anche <strong>per</strong>ché nel caso <strong>di</strong> scelta tra lunghe liste <strong>di</strong> voci non è possibile<br />

utilizzare la classica modalità delle cifre DTMF sulla tastiera telefonica.<br />

Un importante o<strong>per</strong>atore <strong>di</strong> telefonia mobile ha attivato all'inizio dell'estate 2001 un servizio<br />

informativo telefonico basato su Portale Vocale realizzato con tecnologia Necsy; l'accesso al servizio<br />

avviene sia da rete mobile - <strong>per</strong> i clienti <strong>di</strong> tale o<strong>per</strong>atore - che da rete fissa, e ri<strong>per</strong>corre la stessa<br />

struttura anche nel portale Internet dell'azienda.<br />

Vengono date notizie <strong>di</strong> attualità e dal mondo dello sport, previsioni del tempo, oroscopo,<br />

informazioni sull'andamento della borsa e dei mercati. Le notizie possono essere fornite con messaggi<br />

preregistrati da o<strong>per</strong>atore umano oppure con sintesi <strong>di</strong> testo (Text-To-Speech), nel caso in cui si<br />

debba enunciare nomi o azioni che variano frequentemente.<br />

Con un afflusso <strong>di</strong> migliaia <strong>di</strong> chiamate al giorno il sistema è attivo 24 ore su 24 senza interruzioni<br />

anche nei transitori quando avvengono gli aggiornamenti delle notizie o viene mo<strong>di</strong>ficato l'albero dei<br />

menu.<br />

La <strong>per</strong>centuale <strong>di</strong> riconoscimento delle parole è m<strong>ed</strong>iamente su<strong>per</strong>iore al 94% <strong>ed</strong> in caso <strong>di</strong> errata<br />

comprensione dopo tre tentativi si commuta sulla selezione tramite <strong>di</strong>gitazione <strong>di</strong> cifre DTMF sulla<br />

tastiera telefonica.<br />

6.5. La realizzazione<br />

Necsy o<strong>per</strong>a nel settore del voice processing e delle tecnologie vocali da più <strong>di</strong> vent’anni e si propone<br />

sia come fornitore <strong>di</strong> tecnologia che come integratore <strong>di</strong> sistemi; questo rende Necsy in grado <strong>di</strong> offrire<br />

ai propri clienti sia ambienti <strong>per</strong> lo sviluppo <strong>di</strong> applicazioni vocali che soluzioni chiavi in mano.<br />

Il sistema Phoenix proposto da Necsy è la piattaforma ideale <strong>per</strong> costruire portali vocali <strong>di</strong> qualsiasi<br />

complessità. Un potente tool grafico visuale <strong>di</strong> sviluppo - Jade - <strong>per</strong>mette <strong>di</strong> descrivere alberi articolati<br />

senza limiti teorici al numero <strong>di</strong> livelli e <strong>di</strong> foglie.<br />

Jade <strong>per</strong>mette inoltre una comoda organizzazione del flow chart a pagine e l'inserimento <strong>di</strong> tutte le<br />

funzionalità telefoniche che l’interazione con il cliente può richi<strong>ed</strong>ere.<br />

Le applicazioni <strong>di</strong> riconoscimento vocale sono completamente integrate nell’ambiente IVR <strong>di</strong> Phoenix,<br />

dal quale è possibile selezionare i vocabolari e scegliere la lingua; nel caso specifico il vocabolario più<br />

grosso è quello relativo alle informazioni <strong>di</strong> borsa che consiste <strong>di</strong> oltre 500 parole.<br />

Grazie alla flessibilità e alla facilità d’uso <strong>di</strong> Phoenix il progetto è stato sviluppato in tempi<br />

estremamente ridotti (i primi tre servizi erano pronti in un mese) e l’applicazione si è adattata in<br />

maniera molto flessibile alle evoluzioni richieste dal cliente. Una caratteristica interessante <strong>di</strong> Jade è<br />

74


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

la possibilità <strong>di</strong> costruire l’applicazione in maniera modulare, che <strong>per</strong>mette <strong>di</strong> attivare e/o <strong>di</strong>sattivare un<br />

servizio senza impattare sugli altri.<br />

L’accesso ai database con le notizie avviene <strong>di</strong>rettamente dal sistema Phoenix, con un meccanismo<br />

<strong>di</strong> interrogazione a intervalli temporali gestito <strong>di</strong>rettamente dall’applicazione.<br />

La manutenzione del portale è estremamente semplice, essendo Phoenix un ambiente “all-in-one”<br />

dove l’amministrazione delle applicazioni e delle linee vengono fatte da un’unica console con un<br />

linguaggio omogeneo.<br />

Il sistema è estremamente scalabile, con prospettive <strong>di</strong> crescita notevole <strong>per</strong> il prossimo anno, con<br />

l’aggiunta <strong>di</strong> nuovi servizi – anche interattivi.<br />

Phoenix gestisce senza soluzione <strong>di</strong> continuità un aumento delle linee, l’inserimento <strong>di</strong> nuove<br />

applicazioni e la mo<strong>di</strong>fica delle pre-esistenti, la riconfigurazione run-time.<br />

6.6. Un esempio <strong>di</strong> <strong>di</strong>alogo<br />

‣ Portale Vocale: "Benvenuti nel portale vocale <strong>di</strong> XYZ.<br />

Per acc<strong>ed</strong>ere alle notizie <strong>di</strong> attualità aggiornate all'ultima ora <strong>di</strong>ca: notizie.<br />

Per avere il vostro oroscopo <strong>per</strong>sonalizzato giornaliero <strong>di</strong>ca: oroscopo.<br />

Per le previsioni del tempo <strong>di</strong> domani <strong>di</strong>ca: meteo.<br />

Per le notizie dai mercati e dalla finanza <strong>di</strong>ca: borsa."<br />

• Utente: "Oroscopo"<br />

‣ P.V.: "Dica il suo giorno <strong>di</strong> nascita"<br />

• U.: "Do<strong>di</strong>ci"<br />

‣ P.V.: "Dica il suo mese <strong>di</strong> nascita"<br />

• U.: "Novembre"<br />

‣ P.V.: "Felicità: la giornata sarà alquanto positiva, sia in amore che nel lavoro. Attenzione ai<br />

raffr<strong>ed</strong>dori."<br />

75


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

6.7. Testing<br />

I test eseguiti nell’ambito dell’integrazione tra il sistema Phoenix e VoxNauta hanno riguardato la<br />

comunicazione del Front End e lo Speech Server attraverso le due interfacce <strong>di</strong> comunicazione, vale a <strong>di</strong>re<br />

l’interfaccia IM tra il CTI Service <strong>di</strong> Phoenix e lo Speech Server Service <strong>di</strong> Vox Nauta, e l’interfaccia I1, tra il<br />

CTI Agent <strong>di</strong> Phoenix e lo Speech Server MCR <strong>di</strong> VoxNauta.<br />

Nell’elenco che segue, <strong>per</strong> interfaccia, viene riportato il tipo <strong>di</strong> test, che può rappresentare un singolo<br />

evento/messaggio o uno scenario completo, seguito dall’esito che può essere OK oppure NEGATIVO.<br />

Per i dettagli tecnici sugli scenari o messaggi scambiati si faccia riferimento al documento [1].<br />

6.7.1. Interfaccia IM<br />

Test eseguito<br />

Esito<br />

CREATESESSION<br />

ENDSESSION<br />

OK<br />

OK<br />

6.7.2. Interfaccia I1<br />

OPEN_PHONE_CHAN<br />

CLOSE_PHONE_CHAN<br />

WAIT_PHONE_CALL<br />

CLOSE_PHONE_CALL<br />

PLAY<br />

RECORD<br />

PLAY_AND_RECORD<br />

STOP_RECORD<br />

STOP_PLAY<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

76


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

6.7.3. Scenari<br />

LOGIN<br />

Ricezione <strong>di</strong> un obiettivo (START)<br />

PLAY <strong>di</strong> un messaggio<br />

PLAY TIMEOUT<br />

STOP PLAY su Play Non Interrompibile<br />

STOP PLAY su Play Interrompibile<br />

STOP PLAY prima dell’EOS<br />

STOP PLAY dopo l’EOS<br />

Inter<strong>di</strong>git Timeout con StopPlay a False<br />

Inter<strong>di</strong>git Timeout con StopPlay a True<br />

MAX DIGIT<br />

NOT_ENOUGH_DTMF_DETECTED<br />

DTMF_DETECTION<br />

Timeout Session su Fine Play<br />

Timeout Session su Fine Record<br />

RECORD_TIMEOUT<br />

PLAY_AND_RECORD con Bargein Attivo<br />

PLAY_AND_RECORD con Bargein Non Attivo<br />

DTMF durante PLAY_AND_RECORD<br />

Funzione AskSentence<br />

OK<br />

OK<br />

OK<br />

NEGATIVO<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

OK<br />

77


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

7. SCE Infovox - Piano dei test e validazione interna (ALCEO)<br />

Il presente capitolo descrive il piano dei test e la validazione interna degli ambienti <strong>di</strong> sviluppo <strong>di</strong> applicazioni<br />

vocali e <strong>di</strong>alogo naturale. I moduli software che concorrono al funzionamento del SCE e del RTP Infovox,<br />

relativamente alle funzionalita’ <strong>di</strong> “Riconoscimento vocale ROS/Spinet” e “Gestione Dialogo Naturale<br />

ITC/IRST” sono stati sottoposti a proc<strong>ed</strong>ure <strong>di</strong> test incrementali. Tali fasi sono state volte a verificare la<br />

correttezza delle implementazioni, il funzionamento delle singole parti, <strong>ed</strong> infine il funzionamento dell’intero<br />

sistema.<br />

Segue la descrizione delle varie fasi <strong>di</strong> test, ognuna con il relativo risultato.<br />

7.1. Verifica del corretto funzionamento del SCE<br />

Il primo modulo che e’ stato sottoposto a test e validazione e’ stato quello relativo alla interfaccia grafica <strong>di</strong><br />

definizione del servizio. Gli aspetti considerati sono due:<br />

<br />

<br />

correttezza del funzionamento dell’interfaccia grafica e della acquisizione <strong>di</strong> parametri<br />

correttezza della lettura/scrittura <strong>di</strong> file <strong>di</strong> progetto contenenti le suddette SIB<br />

SIB <strong>di</strong> riconoscimento vocale ROS (ITC/IRST)<br />

Entrambi gli aspetti <strong>di</strong> funzionamento sono stati verificati con successo da <strong>per</strong>sonale interno.<br />

SIB <strong>di</strong> gestione <strong>di</strong>alogo naturale ITC/IRST<br />

Entrambi gli aspetti <strong>di</strong> funzionamento sono stati verificati con successo da <strong>per</strong>sonale interno.<br />

7.2. Verifica del corretto funzionamento del RTP<br />

Una volta appurata la correttezza delle SIB, e la correttezza delle informazioni che esse concorrono a generare,<br />

e’ stato costruito il servizio definitivo, secondo la struttura decisa in fase <strong>di</strong> specifica.<br />

Per quanto riguarda la definizione degli aspetti relativi alla gestione del <strong>di</strong>alogo naturale in una particolare<br />

applicazione, é stata utilizzata l’applicazione “ferrovie”, sviluppata da ITC/IRST come esempio <strong>di</strong> utilizzo del<br />

motore <strong>di</strong> <strong>di</strong>alogo da essi sviluppato.<br />

SIB <strong>di</strong> riconoscimento vocale ROS (ITC/IRST)<br />

Il funzionamento della SIB <strong>di</strong> riconoscimento vocale ROS è stato verificato attraverso una proc<strong>ed</strong>ura<br />

incrementale, volta ad isolare a priori gli ambiti <strong>di</strong> eventuale localizzazione <strong>di</strong> problemi software.<br />

Le fasi <strong>di</strong> test/validazione sono state:<br />

verifica correttezza gestione della con<strong>di</strong>visione <strong>di</strong> risorse <strong>di</strong> riconoscimento vocale<br />

verifica correttezza dello start-end point detector<br />

verifica modalita’ <strong>di</strong> invio coman<strong>di</strong> <strong>di</strong> selezione/impostazione grammatiche al riconoscitore<br />

verifica modalita’ <strong>di</strong> invio campioni al riconoscitore<br />

verifica correttezza del para<strong>di</strong>gma <strong>di</strong> acquisizione dell’esito <strong>di</strong> un riconoscimento, in ambiente <strong>di</strong><br />

risorse con<strong>di</strong>vise<br />

verifica funzionale relativa al riconoscitore vocale dal RTP, attraverso servizi che facessero uso <strong>di</strong><br />

riconoscimento <strong>di</strong> parole isolate o semplici frasi<br />

Tutti i test hanno avuto esito positivo.<br />

SIB <strong>di</strong> gestione <strong>di</strong>alogo naturale ITC/IRST<br />

Il funzionamento della SIB DM ICT/IRST è stato verificato attraverso una proc<strong>ed</strong>ura incrementale, volta ad<br />

isolare a priori gli ambiti <strong>di</strong> eventuale localizzazione <strong>di</strong> problemi software.<br />

Le fasi <strong>di</strong> test/validazione sono state:<br />

verifica correttezza gestione <strong>di</strong> ambienti <strong>di</strong> <strong>di</strong>alogo concorrenti<br />

verifica funzionamento della gestione parametri<br />

test con parti <strong>di</strong> <strong>di</strong>alogo generate automaticamente<br />

Tutti i test hanno avuto esito positivo.<br />

78


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

7.3. Test <strong>di</strong> validazione finale<br />

In seguito agli scrupolosi test effettuati sul RTP, il sistema è stato reso <strong>di</strong>sponibile <strong>per</strong> qualche tempo ad uso dei<br />

<strong>di</strong>pendenti Alceo.<br />

Il servizio vocale e l’applicazione <strong>di</strong> <strong>di</strong>alogo sono quelli già citati, cioè il servizio vocale generico, che segue il<br />

para<strong>di</strong>gma <strong>di</strong> integrazione descritto nel paragrafo 5.1.1.5 come “secondo scenario”; l’applicazione <strong>di</strong> <strong>di</strong>alogo è<br />

la m<strong>ed</strong>esima “ferrovie” implementata da ITC/IRST.<br />

A scopo esemplificativo, si allega un file <strong>di</strong> log generato dal RTP a seguito <strong>di</strong> un <strong>di</strong>alogo reale avvenuto <strong>per</strong><br />

telefono sul sistema funzionante. Le parti in corsivo sono le frasi effettivamente pronunciate dall’interlocutore.<br />

Synth: Buongiorno, servizio automatico <strong>di</strong> informazioni su orari ferroviari \\p500 .<br />

Synth: Puo` rispondere alle domande una <strong>per</strong> una, oppure esprimere una richiesta con una frase complessa.<br />

Synth: <strong>di</strong>ca quando e dove vuole andare\\p0.<br />

Gramm: starting_city-it<br />

Ciao, vorrei andare da Napoli a Verona Porta Nuova, il 18 marzo con un treno Intercity.<br />

Synth: vuole partire da napoli-centrale il giorno domenica 18 marzo e arrivare a verona-porta-nuova e usare un treno<br />

intercity \\p0 ?<br />

Gramm: confirmation-it<br />

Si, <strong>per</strong>o’ vorrei sa<strong>per</strong>e quanto fa 17 <strong>di</strong>viso 2.<br />

Synth: 17 <strong>di</strong>viso 2 fa 8.5<br />

DBQuery: STARTCITY napoli-centrale::STARTDAY domenica 18 marzo::ARRCITY verona-porta-nuova::TRAINTYPE<br />

intercity::<br />

Synth: Sono stati selezionati 3 treni intercity da napoli-centrale a verona-porta-nuova con partenza domenica 18 marzo<br />

\\p0.<br />

Synth: Le leggo i dati principali \\p0.<br />

Synth: treno 1 : partenza alle 6 e 30 , arrivo alle 8 e 56 \\p0.<br />

Synth: treno 2 : partenza alle 9 e 45 , arrivo alle 11 e 6 \\p0.<br />

Synth: treno 3 : partenza alle 19 e 30 , arrivo alle 21 e 6 \\p0.<br />

Synth: quali treni vuole selezionare\\p0 ?<br />

USR Gramm: choice-it<br />

<br />

Synth: Buongiorno, servizio automatico <strong>di</strong> informazioni su orari ferroviari \\p500 .<br />

Synth: Puo` rispondere alle domande una <strong>per</strong> una, oppure esprimere una richiesta con una frase complessa.<br />

Synth: <strong>di</strong>ca quando e dove vuole andare\\p0.<br />

Gramm: starting_city-it<br />

… rumore …<br />

Synth: non ho capito\\p0.<br />

Synth: <strong>di</strong>ca quando e dove vuole andare\\p0.<br />

Gramm: starting_city-it<br />

Voglio andare a Venezia.<br />

Synth: vuole arrivare a venezia-santa-lucia \\p0 ?<br />

Gramm: confirmation-it<br />

Si.<br />

Synth: <strong>di</strong>ca la stazione <strong>di</strong> partenza\\p0.<br />

Gramm: starting_city-it<br />

… rumore, parole <strong>di</strong> sottofondo …<br />

Synth: vuole partire da bari-centrale verso le 6 e 9 \\p0 ?<br />

Gramm: confirmation-it<br />

79


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

No, voglio partire da Caltanissetta<br />

Synth: vuole partire da caltanissetta-xirbi verso le 6 e 9 \\p0 ?<br />

Gramm: confirmation-it<br />

Synth: vuole partire dopo le ore 6 \\p0 ?<br />

Gramm: confirmation-it<br />

Si.<br />

Synth: <strong>di</strong>ca che giorno vuole partire\\p0.<br />

Gramm: starting_day-it<br />

Voglio partire fra 47 giorni.<br />

Synth: vuole partire il giorno mercol<strong>ed</strong>i' 11 aprile \\p0 ?<br />

Gramm: confirmation-it<br />

Certo!<br />

DBQuery: STARTCITY caltanissetta-xirbi::STARTHOURS dopo le ore 6::STARTDAY mercol<strong>ed</strong>i' 11 aprile::ARRCITY<br />

venezia-santa-lucia::<br />

Synth: Sono stati selezionati 2 treni da caltanissetta-xirbi a venezia-santa-lucia con partenza mercol<strong>ed</strong>i' 11 aprile dopo le<br />

ore 6 \\p0.<br />

Synth: treno 1 : treno intercity numero 2335 con servizio bar , partenza alle 6 e 30 , arrivo alle 8 e 56 \\p0.<br />

Synth: treno 2 : treno intercity numero 1362 con servizio cuccette , partenza alle 9 e 45 , arrivo alle 11 e 6 \\p0.<br />

Synth: posso fare altro <strong>per</strong> lei\\p0 ?<br />

Gramm: end-it<br />

Synth: <strong>per</strong> favore <strong>di</strong>ca qualcosa\\p0.<br />

Synth: Puo` chi<strong>ed</strong>ere un\'altra connessione, selezionare altri treni, o uscire\\p0.<br />

Synth: posso fare altro <strong>per</strong> lei\\p0 ?<br />

Gramm: end-it<br />

Voglio uscire.<br />

Synth: Grazie <strong>per</strong> aver usato questo servizio \\p300 . A risentirci \\p0 .<br />

Cmd: onhook<br />

80


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

7.4. Considerazioni finali<br />

I test <strong>di</strong> validazione sono stati su<strong>per</strong>ati con successo, quin<strong>di</strong> non vi sono ragionevoli dubbi relativi ad errori nel<br />

co<strong>di</strong>ce o nei suoi presupposti.<br />

Il <strong>per</strong>iodo <strong>di</strong> prova ha evidenziato il buon funzionamento del sistema e della proc<strong>ed</strong>ura <strong>di</strong> <strong>di</strong>alogo implementata,<br />

in grado <strong>di</strong> far fronte anche a domande complesse, variegate, e relative anche a contesti non <strong>di</strong>rettamente<br />

collegati con lo scopo iniziale (ad esempio la calcolatrice).<br />

Si è notato inoltre che la qualità del riconoscimento vocale è conforme alle aspettative, e questo esclude<br />

ulteriormente la possibilità <strong>di</strong> errori nel software, soprattutto nelle proc<strong>ed</strong>ure <strong>di</strong> conversione <strong>di</strong> formato au<strong>di</strong>o.<br />

Oltretutto, il fatto che praticamente ogni interlocutore è stato in grado <strong>di</strong> portare a termine con successo il<br />

<strong>di</strong>alogo con la macchina è inoltre una conferma del fatto che, malgrado l’intera implementazione sia<br />

caratterizzata da un altissimo livello <strong>di</strong> “avanguar<strong>di</strong>a tecnologica”, il progetto è stato portato a termine con pieno<br />

successo.<br />

In aggiunta alle sopra esposte considerazioni sul corretto funzionamento del sistema e sul grado <strong>di</strong> innovatività<br />

<strong>di</strong> un tale tipo <strong>di</strong> interazione con i chiamanti, basato su <strong>di</strong>alogo naturale, è comunque doveroso ricordare che<br />

queste tecnologie <strong>di</strong> <strong>di</strong>alogo naturale e riconoscimento vocale non sono state considerate a sé stanti, ma sono<br />

state integrate in un completo SCE.<br />

Questo riba<strong>di</strong>sce il fatto che le tecnologie sono state inserite in un rodato <strong>ed</strong> avanzato sistema <strong>di</strong> creazione <strong>di</strong><br />

servizi vocali, unendo alla potenza delle tecniche <strong>di</strong> riconoscimento vocale e <strong>di</strong>alogo naturale tutti quelli che<br />

tra<strong>di</strong>zionalmente sono i vantaggi <strong>di</strong> un SCE correttamente impostato, fra cui:<br />

• tempi <strong>di</strong> sviluppo dell'applicazione inferiori <strong>di</strong> almeno il 50%<br />

• maggiore manutenibilità dell'applicazione<br />

• migliore documentazione prodotta.<br />

81


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

8. Statistiche <strong>di</strong> un servizio automatico telefonico <strong>di</strong> accesso<br />

vocale (DELCO)<br />

8.1. Introduzione<br />

Lo scopo è quello <strong>di</strong> verificare la qualità oggettiva e <strong>per</strong>cepita dagli utenti finali, utilizzatori del sistema <strong>di</strong><br />

riconoscitore vocale.<br />

Per ottenere questi dati sono stati implementati ambienti <strong>di</strong> statistiche oggettive sul corretto funzionamento dei<br />

processi software legati al riconoscitore vocale.<br />

Per quanto riguarda la qualità <strong>per</strong>cepita dall’utente si è proc<strong>ed</strong>uto ad un test <strong>di</strong> campionamento realizzato con<br />

<strong>per</strong>sone esterne che meglio potevano giu<strong>di</strong>care il risultato con la stessa <strong>per</strong>cezione della clientela reale.<br />

Si è utilizzata la tecnologia vocale <strong>di</strong> LOQUENDO S.p.A. <strong>per</strong> il riconoscimento (Flexus), la gestione del <strong>di</strong>alogo<br />

(Dialogos), la sintesi (Actor) <strong>ed</strong> il rispon<strong>di</strong>tore automatico (ATA).<br />

8.2. Ambiente Hardware<br />

ARCHITETTURA Hardware<br />

Primario ISDN<br />

ACD DELCO<br />

SATI<br />

ACD<br />

Server<br />

RACK<br />

COM.DO<br />

RACK<br />

RACK<br />

RACK<br />

IVR<br />

MEM<br />

MAS<br />

WEB<br />

Server<br />

DB<br />

Server<br />

Motore<br />

Orario<br />

DB<br />

MESS.<br />

Server<br />

IVR<br />

(ATA)<br />

Connessione dati<br />

Connessione fonia<br />

Postazioni<br />

o<strong>per</strong>atore<br />

82


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

L’ambiente Hardware è costituito da un ACD Delco che interfaccia la rete pubblica<br />

con un flusso ISDN.<br />

La gestione dell’ACD è interna ( master in ambiente LINUX ) mentre esterna è la<br />

gestione del CTI Server , anche questo proprietario Delco, che assicura il passaggio<br />

d’informazioni tra moduli automatici e umani.<br />

Le postazioni d’o<strong>per</strong>atore sono realizzate con una postazione telefonica specifica<br />

(Posto o<strong>per</strong>atore ) e da un PC su cui viene attivata un’applicazione client che si<br />

connette al server WEB residente sulla parte centrale.<br />

Il Rack centrale è quello rappresentato <strong>di</strong> seguito:<br />

Rack Comando Centrale<br />

Rack 12 slot<br />

(Bus a 4 Gbs, , Bus PCI/AT, BUS H100, …)<br />

Pen 850MHz<br />

Pen 850MHz<br />

HDU Module<br />

Pen 850MHz<br />

AT/IO Module<br />

Pen 850MHz<br />

AT/IO Module<br />

Pen 850MHz<br />

AT/IO Module<br />

Clock generetor module<br />

Empty slot<br />

Empty slot<br />

Power supply Power supply<br />

Empty slot<br />

Power supply<br />

Cold Back up<br />

1 GB SDRAM<br />

CD reader<br />

Sch<strong>ed</strong>a<br />

Dialogic (4ch)<br />

Parallela<br />

interna<br />

12 GB<br />

HDU<br />

15 GB<br />

HDU<br />

Sulla sinistra si evidenzia il server principale ( la CPU è prevista in configurazione ridondata<br />

in riserva fr<strong>ed</strong>da ).<br />

I processi <strong>di</strong> riconoscimento vocale e <strong>di</strong> TTS risultano invece attivi sulle coppie <strong>di</strong><br />

sch<strong>ed</strong>e Pen850+AT/IO<br />

83


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

8.3. Ambiente <strong>Software</strong><br />

ARCHITETTURA <strong>Software</strong><br />

CTI<br />

VRU<br />

SERVER<br />

IVR<br />

(ATA)<br />

Modulo<br />

O<strong>per</strong>atore<br />

(Browser)<br />

Modulo<br />

Application<br />

Server<br />

Motore<br />

Orario<br />

DB<br />

MESS.<br />

Modulo<br />

Gest. Mess.<br />

(Browser)<br />

•Il server IVR viene attivato dall’ACD (che lo mette anche in comunicazione fonia con il<br />

cliente) <strong>per</strong> il servizio “Agente Telefonico Automatico” o <strong>per</strong> il servizio <strong>di</strong> solo “Lettore”<br />

•Il Modulo Application Server è l’interfaccia software che uniforma gli accessi dell’ATA e<br />

del Modulo O<strong>per</strong>atore alle due fonti <strong>di</strong> informazioni del sistema, attraverso una DLL che<br />

consente:<br />

•l’a<strong>per</strong>tura/chiusura della connessione;<br />

•la verifica <strong>di</strong>sponibilità dei dati e loro re<strong>per</strong>imento (query)<br />

•l’integrazione dei dati<br />

•Le chiamate alle DLL sono <strong>di</strong> tipo asincrono <strong>per</strong> poter continuare il <strong>di</strong>alogo durante<br />

l’accesso alla base dati<br />

84


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Riguardo ai servizi il flow è il seguente:<br />

IL FLUSSO DELLA CHIAMATA<br />

CTI<br />

Automatico<br />

Modulo<br />

Application<br />

Server<br />

Errore<br />

Dialogo<br />

Andata<br />

Lettore<br />

Vuole<br />

ritorno?<br />

Lettura da<br />

MOU (I°)<br />

Lettura da<br />

MOU (II°)<br />

Errore<br />

Dialogo<br />

Ritorno<br />

Lettore<br />

Lettore<br />

Vuole<br />

o<strong>per</strong>atore?<br />

Lettore<br />

Trasf. . a o<strong>per</strong>atore Fine chiamata<br />

CTI<br />

L’AGENTE TELEFONICO AUTOMATICO<br />

L’ATA è una componente software che assolve a due funzioni:<br />

• realizzare tutto il <strong>di</strong>alogo automatico con l’utente (comprensione e acquisizioni<br />

elementi <strong>per</strong> il viaggio, lettura soluzioni <strong>di</strong> viaggio, ricerca eventuale ritorno e<br />

successiva lettura)<br />

• realizzare la sola lettura delle soluzioni <strong>di</strong> viaggio<br />

Ogni modulo ATA gestisce una chiamata <strong>per</strong> volta <strong>ed</strong> si articola nelle seguenti componenti:<br />

• modulo <strong>per</strong> il controllo della risorsa ATA, la prenotazione, l’avvio e l’arresto, con<br />

l’invio <strong>di</strong> parametri, e passaggio degli stream vocali da/a canale au<strong>di</strong>o a/da TCP/IP<br />

(ATAManager);<br />

• modulo <strong>per</strong> la comunicazione con l’ACD via software <strong>per</strong> l’attivazione e l’arresto della<br />

risorsa ATA (ATAManagerDLL);<br />

• sistema ACTOR <strong>per</strong> la sintesi vocale;<br />

• sistema FLEXUS ® <strong>per</strong> il riconoscimento vocale <strong>per</strong> gran<strong>di</strong> vocabolari in grado <strong>di</strong><br />

comprendere il parlato continuo;<br />

• sistema DIALOGOS ® <strong>per</strong> la gestione del <strong>di</strong>alogo in linguaggio naturale con capacità <strong>di</strong><br />

acquisire, confermare o correggere più informazioni in unica interazione con il cliente<br />

• modulo <strong>di</strong> accesso via ODBC a DB interni all’ATA o a DB esterni<br />

85


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

8.4. Test<br />

Nelle pagine successive, sono riportati in chiaro i risultati dei test.<br />

Sono stati previsti due tipologie <strong>di</strong>verse <strong>di</strong> test:<br />

1- Qualità <strong>per</strong>cepita dall’utente chiamante<br />

E’ stata fatta un’indagine statistica su un campione <strong>di</strong> circa 100 <strong>per</strong>sone a cui veniva richiesto <strong>di</strong> paragonare due<br />

ambienti <strong>di</strong> tecnologie <strong>di</strong>verse che realizzavano lo stesso servizio.<br />

La prima era <strong>di</strong> tipo classico quin<strong>di</strong> con domande singole prec<strong>ed</strong>ute dal segnale sonoro “beep” prima <strong>di</strong> ogni<br />

riconoscimento.<br />

La seconda era con il riconoscimento <strong>di</strong> tipo continuo <strong>ed</strong> un TTS <strong>di</strong> ultima generazione.<br />

I risultati dovevano essere riportati su tabelle preparate allo scopo in modo da poter , in un secondo tempo<br />

analizzare i risultati.<br />

La figura successiva riporta i risultati ottenuti:<br />

IL FOCUS GROUP SUL PROTOTIPO<br />

Gradevolezza della voce automatica<br />

Migliore il nuovo<br />

64<br />

Facilità <strong>di</strong> utilizzo<br />

Migliore il vecchio<br />

Eguali<br />

9<br />

26<br />

Migliore il nuovo<br />

55<br />

Non sa<br />

1<br />

Migliore il vecchio<br />

20<br />

Velocità nell’ottenere l’informazione<br />

Eguali<br />

25<br />

Migliore il nuovo<br />

64<br />

Migliore il vecchio<br />

15<br />

Indagine sul nuovo rispon<strong>di</strong>tore<br />

Base: totale intervistati (100 int.)<br />

Eguali<br />

21<br />

86


Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

2- Qualità oggettiva sulla bontà del riconoscitore<br />

Questo secondo test si basa su una statistica implementata ad hoc e che tende a <strong>di</strong>mostrare il corretto<br />

funzionamento della parte automatica in funzione dei dati che vengono passati automaticamente all’applicazione<br />

dell’o<strong>per</strong>atore.<br />

In particolare la parte <strong>di</strong> servizio automatico incamera una serie d’informazioni raccolte nel colloquio con<br />

l’utente chiamante, tutte queste informazioni vengono trasferite tramite l’interfaccia CTI, all’applicazione<br />

d’o<strong>per</strong>atore ( Pop_up automatico ) quando viene chiesto il trasferimento <strong>di</strong> chiamata dall’o<strong>per</strong>atore automatico<br />

all’o<strong>per</strong>atore umano.<br />

Nel data base centrale vengono memorizzate sia l’informazioni raccolte dall’o<strong>per</strong>atore automatico che quelle<br />

eventualmente variate ( se non riconosciute nella fase automatica ) dall’o<strong>per</strong>atore umano.<br />

Esaminando la <strong>per</strong>centuale delle variazioni rispetto alla totalità delle chiamate si ottiene il grado <strong>di</strong> accuratezza<br />

del riconoscimento vocale.<br />

Di seguito i risultati ottenuti:<br />

ALCUNE STATISTICHE<br />

DATI PERCENTUALI<br />

Data ErrSis ErrDB Fallim RiagIm RiagUt Succes Totale<br />

2001-10-22 0.00 0.00 2.67 1.00 10.67 85.67 300<br />

2001-10-23 0.00 0.00 3.26 0.00 7.49 89.25 307<br />

2001-10-24 0.00 0.00 3.79 0.00 7.26 88.96 317<br />

2001-10-25 0.00 0.00 4.15 1.13 4.15 90.57 265<br />

2001-10-26 0.00 0.00 2.95 0.54 6.43 90.08 373<br />

2001-10-27 0.97 0.00 3.87 0.32 7.42 87.42 310<br />

Il significato delle colonne è il seguente<br />

ErrSis: Eventuali errori <strong>di</strong> sistema ( Percentuale )<br />

ErrDB: Eventuali errori <strong>di</strong> sistema nel Data Base centrale ( Percentuale )<br />

Fallim: Mancati funzionamenti importanti tali da essere definiti non recu<strong>per</strong>abili ( Percentuale )<br />

RiagIm: Riagganci imm<strong>ed</strong>iati da parte dell’utente chiamante <strong>per</strong> motivi <strong>di</strong>versi ( Percentuale )<br />

RiagUt: Riagganci da parte dell’utente chiamante <strong>per</strong> problemi su colloquio automatico giu<strong>di</strong>cato non<br />

recu<strong>per</strong>abile ( Percentuale )<br />

Succes: Completo e corretto riconoscimento <strong>di</strong> tutti i parametri richiesti nel servizio ( Percentuale )<br />

87


ACD<br />

RACK<br />

COM.DO MEM MAS WEB<br />

Server DB MESS.<br />

Linea 1.4 <strong>Interfacce</strong> <strong>Vocali</strong><br />

Totale: Numero <strong>di</strong> chiamate gestite<br />

88

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!