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

Comments