第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

扣丁學(xué)堂解析Spring中自定義Schema如何解析生效詳解

標(biāo)簽:
大數(shù)據(jù)

  今天扣丁学堂给大家介绍一下关于如何使用Python开发AIML搭建聊天机器人的方法,首先你可以在AIMLWikipediapage了解更多AIML的内容以及它能够做什么。借助Python的AIML包,我们很容易实现人工智能聊天机器人。

  AIML全名为ArtificialIntelligenceMarkupLanguage(人工智能标记语言),是一种创建自然语言软件代理的XML语言,是由RichardS.Wallace博士和Alicebot开源软件组织于1995-2000年间发明创造的。AIML是一种为了匹配模式和确定响应而进行规则定义的XML格式。

webp

  1、安装Pythonaiml库

  pipinstallaiml

  2、获取alice资源

  Pythonaiml安装完成后在Python安装目录下的Lib/site-packages/aiml下会有alice子目录,这个是系统自带的一个简单的语料库。

  3、Python下加载alice

  取得alice资源之后就可以直接利用Pythonaiml库加载alicebrain了。

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

  importaiml

  importsys

  importos

  defget_module_dir(name):

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

  ifnotpath:

  raiseAttributeError('module%shasnotattribute__file__'%name)

  returnos.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('LOADALICE')

  whileTrue:

  printalice.respond(raw_input("Enteryourmessage>>"))

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

  创建标准启动文件

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

  



  



  LOADAIMLB



  

  basic_chat.aiml



  创建一个AIML文件

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

  


  

  

  HELLO

  

  Well,hello!

  

  WHATAREYOU

  

  I'mabot,silly!

  随机响应

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

  

  ONETIMEI*

  

  

  

  • Goon.


  

Howoldareyou?


  

Bemorespecific.


  

Ididnotknowthat.


  

Areyoutellingthetruth?


  

Idon'tknowwhatthatmeans.


  

Trytotellmethatanotherway.


  

Areyoutalkingaboutananimal,vegetableormineral?


  

Whatisit?


  使用已存在的AIML文件

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

  测试新建的机器人

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

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

  importaiml

  importos

  mybot_path='./mybot'

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

  os.chdir(mybot_path)

  mybot=aiml.Kernel()

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

  mybot.respond('loadaimlb')

  whileTrue:

  printmybot.respond(raw_input("Enteryourmessage>>"))

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

  加速Brain加载

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

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

  importaiml

  importos

  mybot_path='./mybot'

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

  os.chdir(mybot_path)

  mybot=aiml.Kernel()

  ifos.path.isfile("mybot_brain.brn"):

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

  else:

  mybot.bootstrap(learnFiles="std-startup.xml",commands="loadaimlb")

  mybot.saveBrain("mybot_brain.brn")

  whileTrue:

  printmybot.respond(raw_input("Enteryourmessage>>"))

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

  增加Python命令

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

  whileTrue:

  message=raw_input("Enteryourmessage>>")

  ifmessage=="quit":

  exit()

  elifmessage=="save":

  mybot.saveBrain("bot_brain.brn")

  else:

  bot_response=mybot.respond(message)

  #Dosomethingwithbot_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响应来设置断言

  

  

  MYDOGSNAMEIS*

  

  Thatisinterestingthatyouhaveadognamed

  

  WHATISMYDOGSNAME

  

  Yourdog'snameis.

  使用上面的AIML,你可以告诉机器人:

  MydogsnameisMax

  而机器人会回答你:

  ThatisinterestingthatyouhaveadognamedMax

  然后,如果你问机器人:

  Whatismydogsname?

  机器人将会回答:

  Yourdog'snameisMax.

  aiml可以用来实现对话机器人,但是用于中文有以下问题:

  中文规则库较少。规则库相当于对话机器人的“大脑”,一般来说,规则库越丰富,对话机器人的应对就更像人。目前英文的规则库已经很丰富,涵盖面很广,而且是公开可获取的。但公开的中文规则库就基本没有。

  AIML解释器对中文支持不好。实际上,Python下的Pyaiml模块(解析器)已经能比较好的支持中文,但是也存在以下问题:英文单词间一般都有空格或标点区分,因此具备一种“自然分词”特性,由于中文输入没有以空格分隔的习惯,以上会在实践中造成一些不便。比如要实现有/无空格的输入匹配,就需要在规则库中同时包含这两种模式。

  解决方案:

  自己搭建语料库(比如从字幕文件中获取训练)

  自己中文分词工具(如jieba)



作者:扣丁学堂
链接:https://www.jianshu.com/p/f5452d8cd426


點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學(xué)

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消