日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

AIML学习(一)

發(fā)布時間:2023/12/31 ChatGpt 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AIML学习(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

AIML 是什么?
AIML由Richard Wallace發(fā)明。他設(shè)計了一個名為 A.L.I.C.E. (Artificial Linguistics Internet Computer Entity 人工語言網(wǎng)計算機(jī)實體) 的機(jī)器人,并獲得了多項人工智能大獎。有趣的是,圖靈測試的其中一項就在尋找這樣的人工智能:人與機(jī)器人通過文本界面展開數(shù)分鐘的交流,以此查看機(jī)器人是否會被當(dāng)作人類。AIML是一種為了匹配模式和確定響應(yīng)而進(jìn)行規(guī)則定義的 XML 格式。

關(guān)于 AIML 詳細(xì)的初級讀物,可翻閱 Alice Bot’s AIML Primer。你同樣可以在 AIML Wikipedia page了解更多 AIML 的內(nèi)容以及它能夠做什么。我們首先將創(chuàng)建 AIML 文件,并用 Python 賦予它生命。
創(chuàng)建標(biāo)準(zhǔn)的啟動文件
創(chuàng)建一個啟動文件 std-startup.xml 作為讀取AIML文件的主入口點是標(biāo)準(zhǔn)做法。在這里,將創(chuàng)建了一個初始文件用來匹配一種模式和進(jìn)行一個動作。我們想匹配模式 load aiml b ,并且使它載入我們的 aiml 大腦作為響應(yīng)。我們將即時創(chuàng)建 basic_chat.aiml 文件。

<aiml version="1.0.1" encoding="UTF-8"><!-- std-startup.xml --><!-- <category> 作為AIML的原子級單元 --><category><!-- 匹配用戶輸入的模式 --><!-- 如果用戶輸入 "LOAD AIML B" --><pattern>LOAD AIML B</pattern><!-- <Template> 用來響應(yīng)模式 --><!-- <learn>是一個aiml文件 --><template><learn>basic_chat.aiml</learn><!-- 在這下面你能添加更多的aiml文件 --><!--<learn>more_aiml.aiml</learn>--></template></category></aiml>

創(chuàng)建 AIML 文件
上面我們已經(jīng)創(chuàng)建了只有一種模式句柄的 AIML 文件,load aiml b。當(dāng)我們通過命令行運行這個機(jī)器人,它會嘗試讀取 basic_chat.aiml。除非我們已經(jīng)完成創(chuàng)建,否則載入失敗。下面的示例代碼將告訴你 basic_chat.aiml 文件可以加入什么。我們將匹配兩種基礎(chǔ)的模式和響應(yīng)。

<aiml version="1.0.1" encoding="UTF-8"> <!-- basic_chat.aiml --><category><pattern>HELLO</pattern><template>Well, hello!</template></category><category><pattern>WHAT ARE YOU</pattern><template>I'm a bot, silly!</template></category></aiml>

隨機(jī)響應(yīng)
你同樣可以像下面的示例代碼一樣添加隨機(jī)響應(yīng)。當(dāng)接收到“One time I”開頭的信息(message),通配符“*”可以進(jìn)行模糊匹配。

<category><pattern>ONE TIME I *</pattern><template><random><li>Go on.</li><li>How old are you?</li><li>Be more specific.</li><li>I did not know that.</li><li>Are you telling the truth?</li><li>I don't know what that means.</li><li>Try to tell me that another way.</li><li>Are you talking about an animal, vegetable or mineral?</li><li>What is it?</li></random></template> </category>

運用 Python
目前為止,所有 XML 格式的 AIML 文件都準(zhǔn)備好了。作為機(jī)器人大腦的組成部分,它們都很重要,不過目前它們只是信息(information)而已。機(jī)器人需要活過來。你可以借助任何語言定制 AIML,但某些好心人已經(jīng)用 Python 這么做了。

sudo apt-get install python-aiml

注意,aiml 包只能在 Python2 環(huán)境下運行。
最簡單的 Python 程序
我們可以用如下最簡單程序入門。它創(chuàng)建了 aiml 類,學(xué)習(xí)啟動文件,然后讀取其余 aiml 文件。接下來,它已經(jīng)準(zhǔn)備好聊天了,我們也進(jìn)入了一個不斷提示用戶輸入信息的死循環(huán)。你需要輸入一個機(jī)器人能識別的模式。模式的識別取決于你載入的 AIML 文件。

因為我們建立啟動文件作為獨立實體,所以我們稍后可以對機(jī)器人添加更多 aiml 文件而不需要調(diào)試任何程序的源代碼。只有在 xml 格式的 starup 下,我們才能添加更多文件。

import aiml# 創(chuàng)建Kernel()和 AIML 學(xué)習(xí)文件 kernel = aiml.Kernel() kernel.learn("std-startup.xml") kernel.respond("load aiml b")# 按組合鍵 CTRL-C 停止循環(huán) while True:print kernel.respond(raw_input("Enter your message >> "))

加速大腦載入
當(dāng)你漸漸有了許多 AIML 文件,機(jī)器人就需要很多時間去學(xué)習(xí)。這就需要大腦文件的介入了。在機(jī)器人學(xué)習(xí)完所有 AIML 文件后,它可以直接以文件形式存儲大腦,再次運行時可以大大提升載入時間。

import aiml import oskernel = aiml.Kernel()if os.path.isfile("bot_brain.brn"):kernel.bootstrap(brainFile = "bot_brain.brn") else:kernel.bootstrap(learnFiles = "std-startup.xml", commands = "load aiml b")kernel.saveBrain("bot_brain.brn")# kernel()已經(jīng)等待使用了 while True:print kernel.respond(raw_input("Enter your message >> "))

運行時重載 AIML
運行時,你可以發(fā)送載入信息給機(jī)器人,接著將會重載 AIML 文件。注意你是否像上文那樣使用了大腦方式,飛速重載不會造成大腦有新的變化。你要么刪除大腦文件,以便下次啟動時重建;要么修改代碼,以便重載后的某一時刻能夠儲存大腦。下一節(jié)將利用新建 Python 命令來讓機(jī)器人執(zhí)行這些操作。

load aiml b

添加 Python 命令
如果你想通過運行 Python 函數(shù)來為機(jī)器人添加一些特別的命令,那么你應(yīng)該在發(fā)送 kernel.respond() 函數(shù)前截取輸入信息并處理。在上述的例子中,我們借助 raw_input 函數(shù)獲取用戶的輸入。由此我們無論如何都能獲取我們的輸入信息。可能好似一個 TCP 套接字(socket),或者使聲源轉(zhuǎn)換成文本源。你也許不想 AIML 處理對于某些信息。因此在它們傳遞給 AIML 時處理。

while True:message = raw_input("Enter your message to the bot: ")if message == "quit":exit()elif message == "save":kernel.saveBrain("bot_brain.brn")else:bot_response = kernel.respond(message)# bot_response() 回復(fù)某些信息

會話和謂詞(Predicates)
通過指定會話,AIML 能根據(jù)不同對話者隨機(jī)應(yīng)變。舉個例子,如果某人告訴機(jī)器人他們叫 Alice,另一個人則告訴機(jī)器人它叫 Bob,機(jī)器人可以分清他們。指定你需要的會話,將它作為第二個參數(shù)傳遞給 respond()。

sessionId = 12345 kernel.respond(raw_input(">>>"), sessionId)

和每個客戶都能有個性化的對話——這棒極了。你不得不生成你特有的會話ID并追蹤。記住保存大腦文件不要保存所有的會話值。

sessionId = 12345# 將會話信息作為字典 # 包含輸入輸出的歷史像已知謂詞那樣 sessionData = kernel.getSessionData(sessionId)# 每個會話ID需要一個唯一的值 # 用會話中機(jī)器人已知的人或事給謂詞命名 # 機(jī)器人已經(jīng)知道你叫"Billy"而你的狗叫"Brandy" kernel.setPredicate("dog", "Brandy", sessionId) clients_dogs_name = kernel.getPredicate("dog", sessionId)kernel.setBotPredicate("hometown", "127.0.0.1") bot_hometown = kernel.getBotPredicate("hometown")

在AIML中,我們可以在 項中設(shè)置謂詞。

<aiml version="1.0.1" encoding="UTF-8"><category><pattern>MY DOGS NAME IS *</pattern><template>That is interesting that you have a dog named <set name="dog"><star/></set></template> </category> <category><pattern>WHAT IS MY DOGS NAME</pattern><template>Your dog's name is <get name="dog"/>.</template> </category> </aiml>

通過以上 AIML 你可以告訴機(jī)器人:

My dogs name is Max

機(jī)器人會回答:

That is interesting that you have a dog named Max

另外如果問機(jī)器人:

What is my dogs name?

機(jī)器人會這么回應(yīng)你:

Your dog's name is Max.

aiml可以用來實現(xiàn)對話機(jī)器人,但是用于中文有以下問題:

  • 中文規(guī)則庫較少。規(guī)則庫相當(dāng)于對話機(jī)器人的“大腦”,一般來說,規(guī)則庫越豐富,對話機(jī)器人的應(yīng)對就更像人。目前英文的規(guī)則庫已經(jīng)很豐富,涵蓋面很廣,而且是公開可獲取的。但公開的中文規(guī)則庫就基本沒有。
  • AIML解釋器對中文支持不好。實際上,Python下的Pyaiml模塊(解析器)已經(jīng)能比較好的支持中文,但是也存在以下問題:英文單詞間一般都有空格或標(biāo)點區(qū)分,因此具備一種“自然分詞”特性,由于中文輸入沒有以空格分隔的習(xí)慣,以上會在實踐中造成一些不便。比如要實現(xiàn)有/無空格的輸入匹配,就需要在規(guī)則庫中同時包含這兩種模式。
    解決方案:

  • 自己搭建語料庫(比如從字幕文件中獲取訓(xùn)練)

  • 自己中文分詞工具(如jieba)
    相關(guān)開源項目:

  • https://github.com/leo108/aliceCN

  • https://github.com/messense/wechat-bot

  • https://github.com/Program-O/Program-O

    參考資料:

  • http://www.w3ii.com/aiml/aiml_introduction.html

  • http://www.devdungeon.com/content/ai-chat-bot-python-aiml
  • http://www.alicebot.org/documentation/aiml-reference.html

總結(jié)

以上是生活随笔為你收集整理的AIML学习(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。