Introduzione all’ AIML cos’è e come si usa
L’AIML [Artificial Intelligence Markup Language] è un derivato di XML [Extensible Markup Language] che consente analisi di contenuto pattern-based, e implementa meccanismi di conoscenza stimolo-risposta. AIML è stato progettato per essere facilmente utilizzabile e consente anche una rapida estensione della rappresentazione di base del linguaggio. Garantisce l’interoperabilità con derivati dell’XML come XHTML. L’interprete AIML è il sistema che implementa il meccanismo di parsing dell’informazione e che la rende fruibile a terzi.
Categorie
Le categorie sono le unità fondamentali di una struttura di conoscenza nell’AIML. Una categoria è formata da almeno due elementi: il pattern e il template. Ecco un esempio di categoria:
<category> <pattern>QUAL È IL TUO NOME</pattern> <template>Il mio nome è Alex.</template> </category>
Quando viene caricata questa categoria, alla domanda “Qual è il tuo nome?” il sistema risponderà “Il mio nome è Alex.“.
Pattern
Un pattern è una stringa di caratteri che rappresenta uno o più input dell’utente. Un tipico pattern è QUAL È IL TUO NOME, che consente però un solo input ovvero : “qual è il tuo nome”. I pattern, però, possono anche contenere wildcard, che possono sostituire una o più parole. Un pattern come ad esempio QUAL È IL TUO * permetterà un infinito numero di input, come ad esempio “qual è il tuo nome”, “qual è il tuo colore preferito”, “qual è il tuo mestiere” ecc. La sintassi dei pattern è molto semplice e meno complessa delle espressioni regolari.
Template
Un template indica la risposta ad un pattern. Un template può contenere testo letterale, come Il mio nome è Alex, ma può anche usare delle variabili, come
Il mio nome è <nome name="nome"/>
che sostituisce il nome generalizzato nella frase ed identificato dal sistema Alex, oppure
Mi hai detto di avere <get name="anni-utente"/> anni.
che sostituisce nella frase l’età dell’utente (se è nota). Gli elementi del template comprendono
- una formattazione di base del testo,
- risposte condizionali
- risposte casuali
- reindirizzamento ad altri pattern
Nel caos del reindirizzamento si usa il tag <srai> che può essere usato per implementare i sinonimi, come nel seguente esempio:
<category> <pattern>QUAL È IL TUO NOME</pattern> <template> Il mio nome è <nome name="nome"/> </template> </category> <category> <pattern>COME TI CHIAMI</pattern> <template> <srai>qual è il tuo nome</srai> </template> </category>
La prima categoria risponde all’input “qual è il tuo nome” fornendo il nome. La seconda categoria invece stabilisce che l’input “come ti chiami” deve essere reindirizzato alla categoria che riguarda l’input “qual è il tuo nome” perché le due frasi sono equivalenti.
Lista TAG AIML
Di seguito riporto una lista di tag documentati e non che potrebbero essere usati nell’implementazione di un bot.
<star index=”N”/> – sostituito con il valore corrispondente di * nel modello
<that index=”M,N”/> – sostituito con il valore corrispondente della risposta precedente del bot
<input index=”N”/> – sostituito con il valore corrispondente dell’input dell’utente
<thatstar index=”N”/> – sostituito con il valore di * in “that”
<topicstar index=”N”/> – sostituito con il valore di * nell’argomento
<get name=”XXX”/> – sostituito dal valore della variabile specifica della conversazione
<bot name=”XXX”/> – sostituito dal valore della variabile specifica del bot
<sr/> – forma abbreviata per <srai><star/> <srai> (sostituito con risposta al valore di * dallo schema)
<person2/> – converte il testo (o <star />) tra la 1a e la 2a persona (Io <-> lui, ecc.)
<person/> – converte il testo (o <star />) tra la prima e la terza persona (Io <-> tu, ecc.)
<gender/> – converte il testo (o <star />) tra maschio e femmina (lui <-> lei)
<date/> – sostituito con la data e l’ora correnti, è supportato anche un attributo “formato”
<size/> – sostituito con la dimensione della memoria del bot
<version/> – sostituito con la versione del motore AI
<uppercase> – converte il testo in maiuscolo
<lowercase> – converte il testo in minuscolo
<formal> – converte tutte le parole nel testo in maiuscolo
<sentence> – converte la prima parola nel testo in maiuscolo
<condition name=”X” value=”Y”> – definisce una condizione “if” in base al confronto del valore di una variabile con un modello
<condition name=”X”> – istruzione case
<condition> – istruzione if / else a più valori
<random> – seleziona uno dei valori <li> nidificati a caso <li name = “X” value = “Y”> – utilizzato nei tag random e condition
<li value=”Y”> – utilizzato nei tag random e condition
<set name=”XXX”> – imposta il valore di una variabile
<gossip> – registra il testo
<srai> -valuta ricorsivamente il testo e lo sostituisce con la risposta
<learn> -carica un file AIML esterno, al momento non è consentito
<system> – esegue un comando OS, al momento non è consentito
<javascript> -esegue il codice JavaScript
Sono amante della tecnologia e delle tante sfumature del mondo IT, ho partecipato, sin dai primi anni di università ad importanti progetti in ambito Internet proseguendo, negli anni, allo startup, sviluppo e direzione di diverse aziende; Nei primi anni di carriera ho lavorato come consulente nel mondo dell’IT italiano, partecipando attivamente a progetti nazionali ed internazionali per realtà quali Ericsson, Telecom, Tin.it, Accenture, Tiscali, CNR. Dal 2010 mi occupo di startup mediante una delle mie società techintouch S.r.l che grazie alla collaborazione con la Digital Magics SpA, di cui sono Partner la Campania, mi occupo di supportare ed accelerare aziende del territorio .
Attualmente ricopro le cariche di :
– CTO MareGroup
– CTO Innoida
– Co-CEO in Techintouch s.r.l.
– Board member in StepFund GP SA
Manager ed imprenditore dal 2000 sono stato,
CEO e founder di Eclettica S.r.l. , Società specializzata in sviluppo software e System Integration
Partner per la Campania di Digital Magics S.p.A.
CTO e co-founder di Nexsoft S.p.A, società specializzata nella Consulenza di Servizi in ambito Informatico e sviluppo di soluzioni di System Integration, CTO della ITsys S.r.l. Società specializzata nella gestione di sistemi IT per la quale ho partecipato attivamente alla fase di startup.
Sognatore da sempre, curioso di novità ed alla ricerca di “nuovi mondi da esplorare“.
Comments