人工智能课程论文Word文档下载推荐.docx
- 文档编号:16824445
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:19
- 大小:1.49MB
人工智能课程论文Word文档下载推荐.docx
《人工智能课程论文Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《人工智能课程论文Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
这一部分还会在后面详细介绍。
2.2AIML知识库的结构
AIML知识库由多个以AIML为后缀名的文件组成,每个AIML文件可以代表一个相似领域的可能话题,如关于时间方面的知识条目,我们就可以把它组织到time.aiml文件中,以便于整体知识的分类管理。
一个简单的AIML文件内容如下所示:
?
xmlversion=”1.0”encoding=”ISO-8859-1”?
>
aimlversion=”1.0”>
HOWMANYDAYS*WEEK<
7daysperweek<
…….
HOWMANYSECONDS*YEAR<
Approximately3.14times10totheseventh.
/aiml>
……..
上面这个例子中,主要的话题可能就是时间。
类似的,我们还可以新增的文件,以天气、运动、爱好等为主题。
可以看出AIML就如同一个关于问题和答案的简单数据库,其中模式部分与SQL查询语言相似,但还要简单,由于模板中可能还包含递归调用标记,因此最最输出并不仅仅依赖于死一个匹配上的分类,还与递归调用标记中的内容有关。
3.ALICE内部推理机制
3.1ALICE系统工作流程
ALICE系统在启动时,首先根据配置文件进行系统的初始化操作,并把AIML文件内容以树的结构形式加载到内存当中,形成内存知识树,这样当系统在响应用户输入的问句时,可以直接在内存树中进行推理,提高了响应速度,加载完毕之后,等待用户输入问句。
接收用户输入时进行问句规范化处理,然后将规范化处理后的问句与内存知识树中的模式进行匹配,寻求最佳结果,找到之后读出该匹配模式对应的模板信息,进行模板处理,处理完后返回用户结果,等待用户输入新问句。
系统工作流程图如下:
3.2ALICE推理机制
ALICE的核心推理部分成为Graphmaster,它由一系列称为Nodemapper的节点集组成。
每一个Nodemapper都有若干个从该节点出来的分支,这些分支可能是一个单词,也可能是一个通配符。
每一个分支代表一个模式的第一个单词,第二级分支节点的Nodemapper是模式句子中的第二个单词,它们的子分支指向紧跟在其后的第三个单词或者通配符这样依次类推,直至子节点的分支到了模式句子的为止。
此时,把分类中该模式对应的模板内容存入该节点,这样Graphmaster就构成了一颗内存树,树的叶子节点存有模板信息,叶子节点的数目正好与知识库模式的数目相等。
根据用户的输入查找对应模式的过程就是ALICE的推理过程,假设用户输入的问句以单词X开头,那么首先拿X与Graphmaster中的第一级节点的内容逐个比较。
如下这个例子中,是以“你”开始,可以分支出“好”,再往下继续可以分出“可”和“本”,其中“你好笨”这一分支就此结束;
另一分支继续又出现两条“爱”和“怜”,到此为止,这个例子就结束了,共有三条分支:
“你好笨”“你好可爱”“你好可怜”。
由此可见,这棵树的扩充性很大,可根据不同需求插入所需节点构成新的分支语句。
3.3基本原理
语料库中的pattern是模式的意思,可理解为问题,而相应的template可理解为回答(而这一对问答被包裹在了category标签里面)。
假如你的语料库像上面的xml文件这样简单,那么当你输入“你是谁”,机器人就会在内存中去一个一个的匹配pattern,最后匹配到了,就会回答“我是小龙”,而你输入其他任何语句,机器人就无从匹配了,程序会出现匹配不到的错误,那么怎样避免程序出错呢?
我们修改语料库如下:
上图中的*,是AIML中的通配符,它匹配任何你输入的语句。
当你输入的语句成功匹配,那么返回相应的template后,就不会再去匹配其他的category了。
假如程序没有任何相匹配的,那么*总是可以匹配你的输入,机器人会输出“对不起,主人还没有教我怎么回答这个问题呢?
”当然AIML解析器所支持的xml标签种类远不止这些,上述是最基本的。
AIML所支持的标签种类目测有20种。
4.ALICE在中文处理上的问题
ALICE以词作为其处理的基本单位,在英语、法语、德语等屈折语对话方面取得了空前的成功,但是在处理汉语这样的孤立语言,完全套用原来的构架显然不行。
汉语之间没有明显的分割标记,虚词运用较多,句序比较自由,ALICE绝对严格的词与词匹配对汉语而言并不合适。
因此要设计实现基于ALICE的中文问答机器人,必须针对汉语的特点,作进一步的研究和特定的处理。
这正是我们组在此次人工智能课程项目中完成的部分。
4.1分词和词性标注
ALICE在读取模式构建知识树和读取用户问句进行推理时,都是先把句子分成一个一个的词,再进行下一步处理的。
像英语这样的西方语言是拼音文字,词之间以空格为分割标志,什么是词是明确的,偶尔出现的一些单词缩写和特殊标点符号的处理也比较简单,但是以汉字作为最小单位的汉语句子中,词与词之间没有明显的分割标志,因此要处理汉字,就必须先作出分词处理。
在不破坏其原有的基本推理框架的前提下让ALICE能够支持中文问答,我们所采取的方法是:
当ALICE加载AIML知识时,首先对读出的模式进行分词处理,形成分词以后的模式句子,再交给ALICE的下一个模块继续处理,最终形成以汉语词语为节点的内存知识树。
之后,当用户输入问句时,采取同样的分词策略对问句进行分词处理形成新问句,再到内存知识树中去推理查找对应的答案模块。
为了提高近似句子匹配成功的可能性,我们把词性标注的信息带入系统之中,在进行比较时针对汉语的特点,对于一些非关键的成分,如部分助词、语气助词等,如果没有匹配成功,不是简单地当做匹配失败来处理,而是跳过这些部分,继续余下部分的比较,以提高近似句子推理成功的比例。
4.2同义句处理
即使是一个受限领域穷举可能出现的问句也是比较困难的,因此怎样针对一个已经存在的问句模式,判断出其他句子与它之间的相似性,也就是同义句的判定问题,显得格外重要。
对于英语而言,有以下三种方法能够解决同义句处理问题。
第一是简单地把一部分词做了替换处理,再继续正常处理,第二可以在问句模式中加入通配符,以匹配一个或者一个以上任意多个输入符号串中的词,部分实现关键词匹配的效果,第三,在编写AIML知识条目时,可以做一定的句式变换,利用递归跳转标记,把多个意义相同的句式模块转到同一个模块。
4.3句式变换
中文问话的方式虽然灵活多变,但仍有一定的规律可循,我们可以充分利用AIML中的递归跳转标记,总结常见句抽取共同规则,作一定的句式变换,实现知识体与问句的形式相分离,从而有利于知识的表示和收集,提高系统的推理效率。
5.ALICE支持中文的实现(我组自主实现部分)
5.1项目结构总览
5.2代码实现
ALICE内部有很庞大的语料库,几乎所有用户可能说的话,语料库中都有,而且它用的就是AIML解析器。
然而AIML程序中有一些地方会用正则表达式将除了英文字母和数字外的其他字符全部用空格替代,这就是Aiml解析器不支持中文的重要原因。
这种正则表达式出现在bitoflife.chatterbean.text.Transformations类中
其中fitting为:
//修改正则式使其支持中文
上面的normalization函数是用来对用户输入做规范化处理的,它做了一下工作:
●在原始输入的内容两头加空格。
●把句子中间的任何2个以上连续的空白字符都替换成一个空格。
●并对input进行字符过滤
修改完正则表达式之后,算是成功了一半,那还需要做怎么处理呢?
我们知道AIML当初仅仅是针对English语言开发的,而English单词之间都是有空格的,所以在前期载入语料库阶段,解析器默认xml语料库中的词之间都有空格,然后通过空格将句子分成一个个单词,最后在内存构建一个匹配树,而且在处理用户输入的句子时也是将其进行了规范化处理,如下代码:
//该方法的作用是规范化request
规范化过程:
●在原始输入的内容两头加空格;
●把句子中间的任何2个以上连续的空白字符都替换成一个空格;
●将输入内容按照约定好的句子结束符断句,放到Sentence[]中;
●再将Sentence[i]进行规范化处理。
而为了让它支持中文,一个比较直观的方法是在对用户输入做规范化处理的时候,我们将输入的中文句子中加入空格,比如上述代码的chineseTranslate函数:
//该方法将中文文字之间加上空格
同理,在载入语料库的时候,同样需要写一个类似的函数,功能就是将语料库中的字之间加上空格
5.3界面设计
co.aiml下的Chat.java用来设计用户图形界面.其中chat类里面包含了txtshow和txtwrite两个控件,分别用来展示聊天记录和承接用户输入。
此部分代码的功能是设计界面样式风格、初始化和错误抛出的设置。
界面运行效果如下:
5.4标签的使用与测试
●最基本:
你好<
呵呵<
每一个问题和回答都被包裹在<
标签中
●随机返回功能:
(或者在后面加一个*)
li>
你好呀!
/li>
嘿嘿<
我很好,你呢?
/random>
是library的意思,不是list
当你输入“你好”的时候,机器人会从random里面随机取出一句回答你。
不过默认的都是先取第一句回答。
●输入重定向功能(<
):
/srai>
输入“hello”的时候,会匹配到第二个category,而srai标签的功能是,将“你好”当成用户的输入,并重新到语料库里去匹配,最后就匹配到了第一个category。
换句话说,用户输入“hello”和输入“你好”的效果是一样的。
但是在使用srai标签的时候有可能会形成死循环,所以请慎重。
另外需要注意的是,如果你想要在语料库里面写英文的语料库,那么英文单词都要是大写的,而用户输入的英文可以不用大写。
●*,<
think>
<
get>
star>
的使用:
我叫*<
setname="
name"
star/>
/set>
/think>
hello,<
getname="
/>
.
标签解释:
set和get里面的name相当与参数名,首先在set标签中给name赋值,然后用get标签得到相应参数的值,如果name之前没有被赋值,那么就是空字符串。
指的是pattern标签中*所匹配的内容。
它还能指定index,举个例子:
我叫*呵呵*<
starindex=”2”/>
那么这时star标签就会被pattern中第2个*号所匹配的内容替代。
而<
其实相当与<
starindex=”1”/>
标签可以理解为机器人在思考,它只会在“脑子”里默默的记住一些事情,或者完成一些不会被用户看到的工作。
●Condition标签使用:
你好*<
你好啊!
conditionname="
value="
jack"
怎么又是你?
/condition>
●input标签的用法:
你好啊,<
你刚才说:
“<
inputindex="
2"
”?
input>
标签指的是用户之前的输入,加上一个index,那就是说,用户倒数第几句输入,注意是“倒数”!
index=”1”,就是用户倒数第一句输入的内容,以此类推,当然index是会出现越界错误的。
测试截图:
●date标签的使用:
现在什么时间*<
dateformat="
h:
mma"
.<
今天星期几*<
dateformat=“E”>
Date标签将获得当前的系统时间。
●<
that>
元素:
例如:
聊什么好呢*<
一起聊聊电影好吗?
好<
/that>
那你喜欢什么电影呢?
不好<
那我也不知道聊什么了~<
这个标签还能取前面任意机器人说的话,如果要取前面的前面机器人的话,可以用:
thatindex=”nx,ny”>
thatindex=”2,1”表示取机器人倒数第2句的话,<
thatindex=”2,1”>
也等于<
justbeforethat/>
thatstar>
标签:
计算机的型号是什么<
*<
*的型号是什么<
这个型号是<
thatstar/>
里面
很好的商品<
很流行的商品<
很华丽的商品<
。
●set标签:
<
他做到了<
谁?
谁*<
Oh,whydoyouthink<
他"
did
that?
啊哦~<
测试结果:
测试结果说明set标签不支持中文。
5.5学习能力的实现
WELCOME<
system>
!
--Definesamethodtocreatenewcategoriesfromuserinputatrun-time.-->
importbitoflife.chatterbean.AliceBot;
importbitoflife.chatterbean.Context;
importbitoflife.chatterbean.Graphmaster;
importbitoflife.chatterbean.aiml.Category;
importbitoflife.chatterbean.text.Transformations;
voidlearn(Stringpattern,Stringtemplate)
{
/*The"
match"
variablerepresentsthecurrentmatchingcontext.*/
AliceBotbot=match.getCallback();
Contextcontext=bot.getContext();
Transformationstransformations=context.getTransformations();
pattern=transformations.normalization(pattern);
Categorycategory=newCategory(pattern,newString[]{template});
Graphmasterbrain=bot.getGraphmaster();
brain.append(category);
}
/system>
Hi你好!
--Acategorysettolearnsimpleuser-fedcategories.-->
*我教你*<
ok.Whatwouldbeagoodanswer?
_<
WHATWOULDBEAGOODANSWER<
learn("
3"
"
"
1"
)<
Alright!
哈哈O(∩_∩)O,你可以再问我一次哟~.<
5.6还需改进的地方
●有些标记还不能应用于中文,还需要修改源代码。
●xml语料库的设计还是比较欠缺的。
●界面显得有些简陋,不够人性化。
●未能将数据库集成到聊天机器人去,导致通过学习得到的内容不能保存。
6.参考文献
[1]赵铁军,机器翻译原理[M].哈尔滨工业大学出版社,2000.
[2]人工智能原理及其应用王万森电子工业出版社第三版
[3]中文分词在聊天机器人中的应用研究李鹏中南大学硕士学位论文
[4]ALICE机理分析与应用研究夏天,樊孝忠,刘林计算机应用,第23卷第9期,2003年9月
[5]Codingmylife,
[6]ATutorialForAddingKnowledgetoYourRebot,
[7]http:
//www.alicebot.org/TR/2005/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 人工智能 课程 论文