ALICE源码分析

前言

ALICE(爱丽丝)其实是“人工语言计算机实体”的英文缩写。它曾经在往年(2000年、2001年和2004年)的勒布纳人工智能奖角逐中三次获胜。并在其他年度中也获过骄人的成绩。它是一个开源软件,可以在http://www.alicebot.org/downloads/programs.html下载到多种语言的实现。

这里以java版本为例讲解一下ALICE的聊天原理和代码实现部分。以下提到的实现都是指java版本。

原理

         ALICE聊天的原理还是比较简单,它有一个对话库。当用户问一个问题后,ALICE通过在对话库中查找相同问题的答案作为回答。Java版本支持通配符匹配问题,可以大大减少问答资料库的规模。

         原理很简单,但是如果问答资料库足够丰富的话,还是能让人有些惊艳的感觉。

问答资料库管理

         问答库使用AIML语言来存储。AIML是一种类似HTML的标记语言,xml格式。如下就是AIML语言中的一对问题和答案:

   WHO ARE YOU

当用户输入WHO ARE YOU时,Alice就会回答I am Alice, nice to meet you!就是这么简单。

         ALICE启动时会把对话资料库加载到内存中,实现源码为Graphmaster(GM)。GM其实就是一颗Trie树,只不过节点是一个单词。ALICE把问题(Topic,That)分成单词列表,然后按Trie树的方式存入内存中,当查询时,按照Trie树的方式查询,如果找到匹配的问题,那么拿出对应的答案,返回给用户。以WHO ARE YOU为例,在内存中方式应该如下:

         GM:(WHO)

                   \

         GM:(ARE)

                     \

         GM:(YOU) -->Category{:WHO ARE YOU;