AIML Technology
AIML is rule-based, matching a sequence of words to generate
either a completely canned response or a response involving substitution of
input words into an output template.
A.L.I.C.E. (www.alicebot.org) epitomizes this technology,
having won the Loebner contest in 2000, 2001, and 2004, and placing third in
the 2007 Chatterbox Challenge and sixth in the 2008 one.
Because it is open
source to some degree (including AIML and preexisting collections of rules), it
has also spawned the largest community of progeny (see A.I.Nexus, and Pandorabots).
A.L.I.C.E. data is defined using AIML.
In AIML, each stimulus/response pair is called a category
(calling it a "category" is confusing since it is not what that word
means in English).
An AIML category is a series of tags with data that describe
how to react to a specific input string.
The minimal tags are Pattern
and Template, which describe the input text stimulus and the output text
response. Patterns consist of case insensitive words and the wildcard * which
matches one or more words. The pattern must cover the entire input sequence
with punctuation removed.
A simple pattern might be My name is * and the
template It's good to meet you, * . Thus when it sees input matching the
pattern, whatever follows my name is becomes the * and is filled in as part
of the response. My name is Roger Rabbit becomes It's good to meet
you, Roger Rabbit.
Of course if the user had said My name is Bob,
because I was named after my father, you'd get It's good to meet you,
Bob, because I was named after my father. After all, chatbots are
inherently dumb.
Categories can have tags That and Topic to
control context. The That tag consists of a pattern that must match the
most recent utterance by the chatbox (an attempt to force continuity in
conversation, particularly if the robot's last utterance was a question).
The Topic
tag binds a series of categories into a collection, and you can set the current
topic from inside a response. In doing that, all categories belonging to a
topic that is not current will be excluded during matching. Categories in the
current topic match first, and free-floating topics try second.
The template can have tags, too. The tag SRAI is used
to remap the input (among other things). It basically says to execute the input
processor on what SRAI is given, and use that as output.
It can reduce
complex grammar forms to simpler ones and provide synonyms and spelling or
grammar correction, split input into subparts and combine answers from each
subpart, and handle conditional behavior. An example of reduction is the
pattern DO YOU KNOW WHO * IS with a template <srai> WHO IS
*</srai>.
SRAI is commonly
used to represent synonyms. If a basic category is the pattern HELLO with
the template Hi there!, then additional categories might be -- pattern: HI
template: <srai> HELLO </srai> and pattern: HI THERE
template:<srai> HELLO </srai>. In a similar vein srai can handle spelling
correction of preplanned spelling mistakes.
|
Also associate a probability with the context. If a player asks, "Does George like flying in Airforce one?", this will be parsed to "Does George W Bushlike flying in Airforce one?" (1%) as well as "Does George Washington like flying in Airfoce one?" (2%). However, some context logic will know that George W Bush is associated with airforce one, and have a higher probability for the context (90% context probability for a modern president, with 1% probability for anyone else).
Then, a combination of sentence-parse probabilities and context probabilities (1% x 90% = 0.9% vs. 2% x 1% = 0.02%) can disambiguate the meaning of a statement. This is a common speech recognition trick. (So you might want to learn about speech recognition, Viterbi searches, and Hidden Markov Models.)
I've already implemented this and am using it in my game, http://www.CircumReality.com .
You might find its use of text-to-speech interesting too. You'll find that your AIML tags for responses are completely inadequate, and need to include facial emotions, spoken emotions, and nuanced prosody.
You'll also find that hand-coding millions of responses isn't worth the work. Most of what players want to ask is more procedural, such as "Where is the nearest merchant/guard/toilet?" and "Did you see where Frank went before the murder occured?"
sehr interessant!
you will find more in the http://sglab.cn/blog
Yeah, but your game has dialog like this:
http://www.circumreality.com/ScreenPreRelease4b.jpg
If you send me E-mail, I'll go into detail... but basically, without a mostly menu-driven dialogue system, players don't know what to say and/or get into ye-olde "guess the verb" problems that Zork and other IF often has.