AIML全名为Artificial Intelligence Markup Language(人工智能标记措辞),是一种创建自然措辞软件代理的XML措辞,是由RichardS. Wallace 博士和Alicebot开源软件组织于1995-2000年间发明创造的。AIML是一种为了匹配模式和确定相应而进行规则定义的 XML 格式。
AIML的设计目标如下:
AIML应该为大众所易学易会。AIML应该使最小的观点得以编码使之基于L.I.C.E支持一种刺激-相应学科系统组件。AIML应该兼容XML。书写AIML可处理程序文件应该大略便捷。AIML工具应该对人而言具有良好的可读性和清晰度。AIML的设计应该正式而简洁。AIML应该包含对其他措辞的寄托性。关于AIML详细的低级读物,可翻阅Alice Bot's AIML Primer。你同样可以在AIML Wikipedia page理解更多 AIML 的内容以及它能够做什么。借助 Python 的 AIML 包,我们很随意马虎实现人工智能谈天机器人。
1、安装Python aiml库
pip install aiml
2、获取alice资源
Python aiml安装完成后在Python安装目录下的 Lib/site-packages/aiml下会有alice子目录,这个是系统自带的一个大略的语料库。
3、Python下加载alice
取得alice资源之后就可以直策应用Python aiml库加载alice brain了。
上述流程非常的大略,接下来我们要自己从0开始创建自己的机器人。
创建标准启动文件
标准的做法是,创建一个名为std-startup.xml的启动文件,作为加载AIML文件的主入口点。在这个例子中,我们将创建一个根本的文件,它匹配一个模式,并且返回一个相应。我们想要匹配模式load aiml b,然后让它加载我们的aiml大脑作为相应。我们将在一步内创建basic_chat.aiml文件。
创建一个AIML文件
在上面,我们创建的AIML文件只能处理一个模式:load aiml b。当我们向机器人输入那个命令时,它将会考试测验加载basic_chat.aiml。除非我们真的创建了它,否则无效。下面是你可以写进basic_chat.aiml的内容。我们将匹配两个基本的模式和相应。
随机相应
你也可以像下面这样添加随机相应。它将在接管到一个以”One time I”开头的的时候随机相应。是一个匹配任何东西的通配符。
利用已存在的AIML文件
编写你自己的AIML文件是一个很有趣的事,但是它将花费很大的功夫。我以为它须要大概10,000个模式才会开始变得真实起来。幸运的是,ALICE基金会供应了大量免费的AIML文件。在Alice Bot website上浏览AIML文件。
测试新建的机器人
目前为止,所有 XML 格式的 AIML 文件都准备好了。作为机器人大脑的组成部分,它们都很主要,不过目前它们只是信息(information)而已。机器人须要活过来。你可以借助任何措辞定制 AIML。这里还是利用Python。
这是我们可以开始的最大略的程序。它创建了一个aiml工具,学习启动文件,然后加载剩余的aiml文件。然后,它已经准备好谈天了,而我们进入了一个不断提示用户的无限循环。你将须要输入一个机器人认识的模式。这个模式取决于你加载了哪些AIML文件。我们将启动文件作为一个单独的实体创建,这样,我们之后可以向机器人添加更多的aiml文件,而不须要修正任何程序源码。我们可以在启动xml文件中添加更多的可供学习的文件。
加速Brain加载
当你开始拥有很多AIML文件时,它将花费很长的韶光来学习。这便是brain文件从何而来。在机器人学习所有的AIML文件后,它可以直接将它的大脑保存到一个文件中,这个文件将会在后续的运行中动态加速加载韶光。
记住,如果你利用了上面写的brain方法,在运行的时候加载并不会将新增改变保存到brain中。你将须要删除brain文件以便于它不才一次启动的时候重修,或者须要修正代码,使得它在重新加载后的某个韶光点保存brain。
增加Python命令
如果你想要为你的机器人供应一些分外的运行Python函数的命令,那么,你该当为机器人捕获输入,然后在将它发送给mybot.respond()之前处理它。在上面的例子中,我们从raw_input中得到了用户的输入。然而,我们可以从任何地方获取输入。可能是一个TCP socket,或者是一个语音识别源码。在它进入到AIML之前处理这个。你可能想要在某些特定的上跳过AIML处理。
会话与断言
通过指定一个会话,AIML可以为不同的人剪裁不同的会话。例如,如果某个人见告机器人,他的名字是Alice,而另一个人见告机器人他的名字是Bob,机器人可以区分不同的人。为了指定你所利用的会话,将其作为第二个参数传给respond()
这对付为每一个客户端定制个性化的对话是很有帮助的。你将必须以某种形式天生自己的会话ID,并且跟踪它。把稳,保存brain文件不会保存所有的会话值。
在AIML中,我们可以利用模板中的set相应来设置断言
利用上面的AIML,你可以见告机器人:
My dogs name is Max
而机器人会回答你:
That is interesting that you have a dog named Max
然后,如果你问机器人:
What is my dogs name?
机器人将会回答:
Your dog's name is Max.
aiml可以用来实现对话机器人,但是用于中文有以下问题:
中文规则库较少。规则库相称于对话机器人的“大脑”,一样平常来说,规则库越丰富,对话机器人的应对就更像人。目前英文的规则库已经很丰富,涵盖面很广,而且是公开可获取的。但公开的中文规则库就基本没有。AIML阐明器对中文支持不好。实际上,Python下的Pyaiml模块(解析器)已经能比较好的支持中文,但是也存在以下问题:英文单词间一样平常都有空格或标点区分,因此具备一种“自然分词”特性,由于中文输入没有以空格分隔的习气,以上会在实践中造成一些不便。比如要实现有/无空格的输入匹配,就须要在规则库中同时包含这两种模式。办理方案:
自己搭建语料库(比如从字幕文件中获取演习)自己中文分词工具(如jieba)干系开源项目:
https://github.com/leo108/aliceCNhttps://github.com/messense/wechat-bothttps://github.com/Program-O/Program-O
参考资料:
http://www.w3ii.com/aiml/aiml_introduction.htmlhttp://www.devdungeon.com/content/ai-chat-bot-python-aimlhttp://www.alicebot.org/documentation/aiml-reference.html
以上便是本文的全部内容,希望对大家的学习有所帮助,更多干系内容关注小编敬请期待为你带来更优质的干系文章。
结尾末了多说一句,小编是一名python开拓工程师,这里有我自己整理了一套最新的python系统学习教程,包括从根本的python脚本到web开拓、爬虫、数据剖析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“07”即可领取。