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了。

# -*- coding: utf-8 -*-

import aiml

import sys

import os

def get_module_dir(name):

path = getattr(sys.modules[name], '__file__', None)

if not path:

raise AttributeError('module %s has not attribute __file__' % name)

return os.path.dirname(os.path.abspath(path))

alice_path = get_module_dir('aiml') + '/alice'

#切换到语料库所在工作目录

os.chdir(alice_path)

alice = aiml.Kernel()

alice.learn("startup.xml")

alice.respond('LOAD ALICE')

while True:

print alice.respond(raw_input("Enter your message >> "))

上述流程非常的简单,接下来我们要自己从0开始创建自己的机器人。

创建标准启动文件

标准的做法是,创建一个名为std-startup.xml的启动文件,作为加载AIML文件的主入口点。在这个例子中,我们将创建一个基础的文件,它匹配一个模式,并且返回一个相应。我们想要匹配模式load aiml b,然后让它加载我们的aiml大脑作为响应。我们将在一步内创建basic_chat.aiml文件。

LOAD AIML B

basic_chat.aiml

创建一个AIML文件

在上面,我们创建的AIML文件只能处理一个模式:load aiml b。当我们向机器人输入那个命令时,它将会尝试加载basic_chat.aiml。除非我们真的创建了它,否则无效。下面是你可以写进basic_chat.aiml的内容。我们将匹配两个基本的模式和响应。

HELLO

Well, hello!

WHAT ARE YOU

I'm a bot, silly!

随机响应

你也可以像下面这样添加随机响应。它将在接受到一个以”One time I”开头的消息的时候随机响应。*是一个匹配任何东西的通配符。

ONE TIME I *

Go on.How old are you?Be more specific.I did not know that.Are you telling the truth?I don't know what that means.Try to tell me that another way.Are you talking about an animal, vegetable or mineral?What is it?

使用已存在的AIML文件

编写你自己的AIML文件是一个很有趣的事,但是它将花费很大的功夫。我觉得它需要大概10,000个模式才会开始变得真实起来。幸运的是,ALICE基金会提供了大量免费的AIML文件。在Alice Bot website上浏览AIML文件。

测试新建的机器人

目前为止,所有 XML 格式的 AIML 文件都准备好了。作为机器人大脑的组成部分,它们都很重要,不过目前它们只是信息(information)而已。机器人需要活过来。你可以借助任何语言定制 AIML。这里还是使用Python。

# -*- coding: utf-8 -*-

import aiml

import os

mybot_path = './mybot'

#切换到语料库所在工作目录

os.chdir(mybot_path)

mybot = aiml.Kernel()

mybot.learn("std-startup.xml")

mybot.respond('load aiml b')

while True:

print mybot.respond(raw_input("Enter your message >> "))

这是我们可以开始的最简单的程序。它创建了一个aiml对象,学习启动文件,然后加载剩余的aiml文件。然后,它已经准备好聊天了,而我们进入了一个不断提示用户消息的无限循环。你将需要输入一个机器人认识的模式。这个模式取决于你加载了哪些AIML文件。我们将启动文件作为一个单独的实体创建,这样,我们之后可以向机器人添加更多的aiml文件,而不需要修改任何程序源码。我们可以在启动xml文件中添加更多的可供学习的文件。

加速Brain加载

当你开始拥有很多AIML文件时,它将花费很长的时间来学习。这就是brain文件从何而来。在机器人学习所有的AIML文件后,它可以直接将它的大脑保存到一个文件中,这个文件将会在后续的运行中动态加速加载时间。

# -*- coding: utf-8 -*-

import aiml

import os

mybot_path = './mybot'

#切换到语料库所在工作目录

os.chdir(mybot_path)

mybot = aiml.Kernel()

if os.path.isfile("mybot_brain.brn"):

mybot.bootstrap(brainFile="mybot_brain.brn")

else:

mybot.bootstrap(learnFiles="std-startup.xml", commands="load aiml b")

mybot.saveBrain("mybot_brain.brn")

while True:

print mybot.respond(raw_input("Enter your message >> "))

记住,如果你使用了上面写的brain方法,在运行的时候加载并不会将新增改变保存到brain中。你将需要删除brain文件以便于它在下一次启动的时候重建,或者需要修改代码,使得它在重新加载后的某个时间点保存brain。

增加Python命令

如果你想要为你的机器人提供一些特殊的运行Python函数的命令,那么,你应该为机器人捕获输入消息,然后在将它发送给mybot.respond()之前处理它。在上面的例子中,我们从raw_input中获得了用户的输入。然而,我们可以从任何地方获取输入。可能是一个TCP socket,或者是一个语音识别源码。在它进入到AIML之前处理这个消息。你可能想要在某些特定的消息上跳过AIML处理。

while True:

message = raw_input("Enter your message >> ")

if message == "quit":

exit()

elif message == "save":

mybot.saveBrain("bot_brain.brn")

else:

bot_response = mybot.respond(message)

# Do something with bot_response

会话与断言

通过指定一个会话,AIML可以为不同的人剪裁不同的会话。例如,如果某个人告诉机器人,他的名字是Alice,而另一个人告诉机器人他的名字是Bob,机器人可以区分不同的人。为了指定你所使用的会话,将其作为第二个参数传给respond()

sessionId = 12345

mybot.respond(raw_input(">>>"), sessionId)

这对于为每一个客户端定制个性化的对话是很有帮助的。你将必须以某种形式生成自己的会话ID,并且跟踪它。注意,保存brain文件不会保存所有的会话值。

sessionId = 12345

# 会话信息作为字典获取. 包含输入输出历史,

# 以及任何已知断言

sessionData = mybot.getSessionData(sessionId)

# 每一个会话ID需要时一个唯一值。

# 断言名是机器人在与你的会话中了解到的某些/某个名字

# 机器人可能知道,你是"Billy",而你的狗的名字是"Brandy"

mybot.setPredicate("dog", "Brandy", sessionId)

clients_dogs_name = mybot.getPredicate("dog", sessionId)

mybot.setBotPredicate("hometown", "127.0.0.1")

bot_hometown = mybot.getBotPredicate("hometown")

在AIML中,我们可以使用模板中的set响应来设置断言

MY DOGS NAME IS *

That is interesting that you have a dog named

WHAT IS MY DOGS NAME

Your dog's name is .

使用上面的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)

相关开源项目:

参考资料:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

python aiml开发文档_使用Python AIML搭建聊天机器人的方法示例相关推荐

  1. python对话机器人框架_长篇文讲解:使用Python AIML搭建聊天机器人的方法示例(收藏)...

    本文内容主要介绍了使用Python AIML搭建聊天机器人的方法示例,我觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随我过来看看吧 AIML全名为Artificial Intelligenc ...

  2. python-docx中文开发文档_使用Python语言-docx生成Word文档

    本文主要向大家介绍了使用Python语言-docx生成Word文档,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. < 学会来使用python操作数据表和PDF,今天我们尝试 ...

  3. python aiml_使用Python AIML搭建聊天机器人的方法示例

    AIML全名为Artificial Intelligence Markup Language(人工智能标记语言),是一种创建自然语言软件代理的XML语言,是由RichardS. Wallace 博士和 ...

  4. python软件开发-如何编写Python软件开发文档(7个技巧)

    开发文档是经常被程序员忽略的工作,有时也会被管理者忽略.这往往是由于在项目生命周期结束的后期缺乏时间,以及人们认为自己不擅长写作,其中一些人确实写不好,但他们中的大多数能够完成一个良好的文档. 在任何 ...

  5. python开发软件的实例-如何编写Python软件开发文档(7个技巧)

    开发文档是经常被程序员忽略的工作,有时也会被管理者忽略.这往往是由于在项目生命周期结束的后期缺乏时间,以及人们认为自己不擅长写作,其中一些人确实写不好,但他们中的大多数能够完成一个良好的文档. 在任何 ...

  6. python写软件实例-如何编写Python软件开发文档(7个技巧)

    开发文档是经常被程序员忽略的工作,有时也会被管理者忽略.这往往是由于在项目生命周期结束的后期缺乏时间,以及人们认为自己不擅长写作,其中一些人确实写不好,但他们中的大多数能够完成一个良好的文档. 在任何 ...

  7. tx2 fpga pcie无法读写_Cyclone V SOC(ARM+FPGA)开发文档_之开发流程详解

    双击可查看大图(手动狗头) 目录 Altera Cyclone V soc开发文档 之软硬件开发 1 Cyclone V开发流程介绍 5 专业术语 5 Cyclone V软件开发介绍 6 U-BOOT ...

  8. ubuntu arm qt_Cyclone V SOC(ARM+FPGA)开发文档_之开发流程详解

    双击可查看大图(手动狗头) 目录 Altera Cyclone V soc开发文档 之软硬件开发 1 Cyclone V开发流程介绍 5 专业术语 5 Cyclone V软件开发介绍 6 U-BOOT ...

  9. 银联商务全名移动支开发文档_移动商务

    银联商务全名移动支开发文档 移动商务 (Mobile Commerce) Mobile Commerce (M-commerce, MC) is a special form of electroni ...

  10. python中文开发文档_pydoc (Development Tools) – Python 中文开发手册

    Python 中文开发手册 pydoc (Development Tools) - Python 中文开发手册 2.1版本中的新功能. 源代码: Lib / pydoc.py pydoc模块自动从Py ...

最新文章

  1. iometer硬盘测试工具附教程
  2. 黑龙江智能车邀请赛中的单车比赛
  3. Spring Boot2.x-09 基于Spring Boot 2.1.2 + Mybatis使用自定义注解实现数据库切换
  4. c# treeView 取消选择事件
  5. ubuntu swift mysql_使用 Swift 3.0 操作 MySQL 数据库
  6. POJ 2323 贪心
  7. linux下面安装maven
  8. java多线程笔记补充之 线程控制操作
  9. 《Python编程快速上手——让繁琐工作自动化》——2.5 控制流的元素
  10. 从MDK4到MDK5之“盘古开天辟地”
  11. C++ primer 5th 读完的一点心得体会
  12. 运放输入偏置电流方向_运算放大器+仪表放大器:如何为偏置电流提供直流回路?...
  13. php文件如何转为ppt,pdf文件转换成ppt文件 pdf如何转为ppt
  14. 移动站seo优化-怎么做好移动网站的SEO优化-移动seo优化方法软件免费
  15. 一个自动化专业的工控人自学编程之路
  16. 关于iReport中纸张的大小 换算
  17. 局域网怎么添加新的计算机用户,如何添加局域网
  18. 高校成绩管理数据库系统的设计与实现
  19. 《Effective Python 编写高质量Python代码的59个有效方法》读书笔记
  20. 我们需要有创业精神,但不是每个人都要去创业

热门文章

  1. android gps原始数据格式,Android编程获取GPS数据的方法详解
  2. Crystal Reports - Add CheckBox
  3. displayTag使用详解
  4. [互联网思维(转)]互联网思维法则
  5. 肌电信号分析相关链接分享
  6. H12-211数通HCNA题库解析(二)
  7. Vim命令大全(linux)
  8. android 实体对象转 json,list转 json ,map转json
  9. 解决MAC系统字体发虚,更换默认字体为微软雅黑
  10. apizza的使用方法