




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、蘇州大學本科生畢業設計(論文)學院(部)數學科學學院題 目會話機器人原型系統的設計與實現目 錄摘要2第1章前言5第11節 研究的背景與意義5第12節 國內外研究現狀分析5第13節 主要研究內容和組織結構6第2章系統相關技術概念6第21節 AIML知識庫6第211節 AIML核心元素7第212節 其他標記元素7第22節 AIML知識樹9第23節 自然語言處理與AIML解析算法11第24節 AIML與S-R理論13第25節 本章小結13第3章系統的設計與實現14第31節 AIML的開發環境14第32節 系統需求分析與總體設計14第33節 系統服務器端的設計與實現15第331節 AIML知識庫的建立
2、與改進15第332節 AIML解析器的設計19第333節 接收分析器的實現19第334節 記憶功能的實現20第34節 系統客戶端的設計與實現22第35節 本章小結23第4章總結與展望23第41節 論文總結23第42節 研究展望24參考文獻24致謝26摘要科學技術的發展改變著人們的生活方式。在如今信息化和科技化的時代背景下,人們對科技產品的需求不斷加深。因可以大幅度減少人工客服的工作量、使人們的工作更高效化以及豐富人們的娛樂方式,目前會話機器人(Chatbot)已經成為人們熱議的話題之一。在過去的十多年里,國內外對Chatbot已有大量的研究,并且有了很多成熟的產品。本文會話機器人系統的設計基于
3、人工智能標記語言(AIML語言),文中首先介紹了設計系統所需的各個技術。首先介紹了AIML核心標簽與AIML知識庫,AIML推理技術-基于文本匹配的回溯推理算法,并由此算法建立的多級索引結構-知識樹。然后介紹了自然語言處理(NLP)、人工智能、刺激反應理論(S-R理論)等概念,詳細闡述了AIML解析過程,這為接下來的設計與實現做了準備。接下來對系統需求分析,得出需要實現問答對話和自主創建對話兩個功能。最后設計系統總體框架,并畫出系統設計的流程圖。文中展現了系統設計的流程和核心代碼。為實現會話機器人這一系統,詳細介紹了服務器端和客戶端的設計。在服務器端,需要建立AIML知識庫、解析器和分析器,同
4、時,我還增加了brainFile文件用來實現記憶知識庫功能。在建立AIML知識庫時,我對已有知識庫進行分析,通過句式變換降低了系統復雜度。在客戶端,文中展示了在交互環境下的運行程序和結果,系統根據用戶提問的內容不同而匹配不同的結果,結果表明各個模塊均達到預期。最后,對本文進行了總結,并針對系統尚不支持中文的問題提出了改進的策略。關鍵詞:AIML;會話機器人;人工智能;自然語言處理 AbstractThe development of science and technology has changed the way that people live. In the information a
5、ge, people's demand for technology products continues to deepen. The current Chatbot has become one of the hot topics, because it can greatly reduce the workload of the artificial customer service, make people's work more efficient and enrich people's entertainment methods In the past te
6、n years, Chatbot has made a lot of research at home and abroad, and there are many mature products.The design of the conversational robot system in this paper is based on Artificial Intelligence Markup Language (AIML). In this paper, the various techniques required for designing the system are intro
7、duced. Firstly,I introduce the AIML core tags and AIML knowledge base, AIML reasoning technology backtracking-reasoning algorithm based on text matching, and this algorithm establishes a multi-level index structure - knowledge tree. Then I introduce the concept of natural language processing (NLP),
8、artificial intelligence, stimuli-response theory (S-R theory), and elaborate the process of AIML analysis, which prepared for the next design and implementation. The next analysis of the system requirements led to the need to implement both human-machine dialogue and creating conversations autonomou
9、sly. Finally,I design the overall framework of the system and draw the flow chart of the system design.The text shows the system design process and core code. In order to realize the system of session robot, the design of server and client is introduced in detail. On the server side, an AIML reposit
10、ory, parser, and parser need to be set up. At the same time, I also added a brainFile file to implement the memory function. When building the AIML knowledge base, I analyze the existing knowledge base and reduce the complexity of the system through sentence transformation. On the client side, the a
11、rticle shows the running programs and results in the interactive environment. The system matches different results according to the content of the user's question. The results show that all the modules have reached expectations.Finally, this paper summarizes the paper and proposes an improved st
12、rategy for the problem that the system does not support Chinese.Key words: AIML; Chatbot;Artifical Intelligence; NLP第1章 前言第11節 研究的背景與意義就像MaCarthy博士所說“我們不僅僅是在使用科學技術,而是生活在其中”1。隨著科學技術的進步和移動互聯網的發展,計算機已經成為人們日常生活中不可或缺的組成部分。人們需要計算機提高效率,人機交互便成了打開這一渠道的主要方式,因為使用自然語言是人們網上交流和獲取信息的基本媒介。因此試想一下,如果人機之間可以直接交流的話,人們的生
13、活也就會變得更加高效便捷。現如今,各大互聯網公司推出了自己的智能會話機器人,來替代人工面對的龐大的客服需求,可以極大的減少人工成本。這使得會話機器人成為人工智能領域熱門方向之一,近年來NLP的高速發展,會話機器人(Chatbot)已經有很多成熟的產品,比如Google的Alice,在接收語音提示和搜索方面作用明顯,蘋果的Siri,可以給Siri發語音聊天、定時指令等。在國內,會話機器人也是有廣泛的應用,比如淘寶的客服,科大訊飛的語音助手等都能提供聊天服務。會話機器人是借助自然語言與人進行智能對話的系統,目前比較主流的是基于人工智能的會話機器人2。其主要是通過人工錄入一些模板,當有用戶提問時,會
14、從這些模板中找出對應的匹配模板返回給用戶。但這種會話機器人又有自我學習的能力,隨著聊天次數的增多,答案也會越來越準確。第12節 國內外研究現狀分析相比于國內,國外在會話機器人方面研究較早且更為成熟。ELIZA是J.Weizenbaum設計并發布的Chatbot,其原理是仿照羅杰治療室,根據用戶輸入的關鍵詞搜索數據庫文件中的知識,缺點是對優先級低的關鍵詞難以匹配3。TALKBOT是由可沃特在1998年用JavaScript和PERL編寫的,是在線會話機器人。ALICE是基于AIML語言設計的問答系統,是由S. Wallace博士等人在CMU開發,曾三奪Loebner獎。ALICE支持模式匹配、上
15、下文匹配、條件分支等,是一個類庫豐富的對話機器人4。JABBERWACKY用NLP處理人機對話的上下文內容,并以此為依據給出用戶輸入對應的系統回答。目前,JABBERWACKY引入了語音識別技術,能夠自由實現人機對話。設計師R.Carpenter設計并實現了一款能夠不斷在人機互動中學習的智能機器人5。近年來,國內在會話機器人方面也有了巨大的突破,如2010年支付寶推出智能服務系統“智能小寶”,其高效的處理與服務能力減少了支付寶人工客服量的二分之一;清華大學推出圖書館智能系統“小圖”,可以快速回答學生問題,深受學生好評。目前Chatbot常常被設計在虛擬游戲、CAD或者輔助系統中,根據不同的用途
16、開發不同的Chatbot,是這幾年人們將會話機器人系統應用到生活中的主要方式。第13節 主要研究內容和組織結構本文主要圍繞會話機器人系統設計所需的技術概念以及設計過程展開描述,從介紹相關背景開始,到設計過程所需的相關知識和技術,以下是各章節具體內容:第一章:主要介紹系統開發的研究背景和意義,闡述時下研究Chatbot的重要性,然后分析國內外研究現狀,指出Chatbot系統開發的歷史和技術應用。第二章:主要介紹設計Chatbot所需的各種技術:AIML核心標簽與知識庫、AIML知識樹、NLP與推理過程、S-R理論等。第三章:這一章介紹了系統的需求分析和總體設計,從開發環境開始,陸續展示了系統開發
17、過程中的模塊設計和核心代碼,包括知識庫的建立與改進、解釋器與分析器的設計、記憶功能的實現、交互環境下的展示等。第四章:總結全文工作,同時,指出系統設計中的不足并對需要完善的地方進行了展望。第2章 系統相關技術概念第21節 AIML知識庫AIML(Artificial Intelligence Markup Language),全名為人工智能標記語言4,7-8,是一種創建自然語言軟件代理的XML語言,它采用XML的結構來存儲數據,因其具有良好的兼容性和可擴展性被廣泛應用于智能對話聊天系統中。AIML是描述一種數據對象以及處理這種對象的方式,是整個對話聊天系統的知識庫。目前AIML已經有了Pyth
18、on,Ruby,Java,C等語言的版本。第211節 AIML核心元素AIML定義了一套具有特定含義的標簽,使其具有強大的對話功能,而用戶也可以根據自己的需要定義新的標簽元素,這突出在AIML的擴展性。在AIML標記語言中,以<aiml>作為程序的開始和結尾元素,<aiml>也是AIML的根元素。category是AIML庫中的基本單位,用來匹配一個類別或者目錄,每個category元素都至少包含兩個子元素:pattern和template元素。pattern元素用來匹配用戶的輸入,template元素展示機器人對用戶問題的應答。在該例中,如果用戶輸入“BY”,則機器回
19、復“Do you mean "bye"?”。<?xml version="1.0" encoding="ISO-8859-1"?><aiml version="1.0"><category><pattern>BY</pattern><template>Do you mean "bye"?</template></category></aiml>第212節 其他標記元素AIML除catego
20、ry之外還有很多基本的標記元素比如語境標記元素<that>、隨機選擇標記元素<random>、判斷標記元素<condition>、話題標記元素<topic>、記憶元素<think>、通配標記元素<star>、遞歸調用元素<sari>等。(1)random是隨機元素,指從列表里隨機取一個,和<li>一起使用,其中<li></li>構成一個列表。若<li name=”rule”>表明需要自定義規則推理,若<li name=”sparql”>表明需要spar
21、ql查詢語句。<category><pattern>BYE</pattern><template><random><li>See you later <get name="name"/>.</li><li>Goodbye <get name="name"/>.</li><li>Until next time <get name="name"/>.</li><li&
22、gt;Thanks for chatting, <get name="name"/>.</li><li>See you later <get name="name"/>.</li></random></template></category>(2)condition元素有三種表示方式:<condition name="name" value="value">HELLO</condition><
23、;condition name="name" contains="value">HELLO</condition><condition name="name" exists="value">HELLO</condition>第一種方式表示name變量的值如果和value相等,那么機器人回復的內容包括” HELLO”;第二種方式表示name變量的值如果里面包含value這個字符串,那么機器人回復的內容包括“HELLO”;第三種方式表示name變量的值如果存在value的值,那
24、么機器人回復的內容包括“HELLO”。(3)srai元素支持多對一的回答,表示<srai>里面的話會被當作是用戶輸入,然后重新查找匹配模式,直到找到非<srai>定義的回復,如下例。<category><pattern>C YA</pattern><template><srai>BYE</srai></template></category>(4)gender標簽表示性別替換。例如:<gender>She like playing football.<gen
25、der>經過AIML解析器后將轉換成He like playing football。(5)that元素使得機器人能夠具有思考功能的作用,它表示先前機器人說的話。在下例中,如果機器人先問用戶“DOES BONJOUR MEAN HELLO OR GOODBYE”,用戶回答“HELLO”,那么接下來機器人問“Bonjour, <get name="name"/>!”<category><pattern>HELLO</pattern><that>DOES BONJOUR MEAN HELLO OR GOODBYE
26、</that><template>Bonjour, <get name="name"/>!</template></category>(6)topic元素是用來設置主題。(7)star元素是綁定“*”通配符的內容,如下例,若輸入“TELL ME ABOUT JESUS ABC”,則機器人回復“WHO IS JESUS ABC”。<category><pattern>TELL ME ABOUT JESUS *</pattern><template><srai>
27、;WHO IS JESUS <star/></srai></template></category>(8)learn元素用來動態調用外部AIML文件,如<learn filename=”std-religion.aiml”>。更多核心元素的使用詳見http:/www.A/第22節 AIML知識樹使用會話機器人的核心問題在于推理技術,目前常見的有基于語義分析、文本匹配、數據挖掘等方法。對于小規模的知識庫,開發人員一般采用文本匹配的方法。常見的基于文本匹配的推理技術有正則表達式、反向索引、AIML回溯推理。(1) 正
28、則表達式,這是最常見的文本匹配方式,一般采用非確定性有窮自動機(NFA)算法。NFA算法是帶回溯的深度優先搜索,它是基于表達式的(Regex-Directed),會依次處理各子表達式,在遇到兩個可能匹配時擇其一,另一個留備回溯時遍歷。NFA算法的回溯過程不斷地吞吐單詞,因此耗時很長,同時,因其總是貪婪地訪問第一個匹配項,有些“更長”的匹配項訪問不到,使得回復的正確度降低。(2) 反向索引,也稱倒排索引,是建立數據結構存儲單詞或詞組以及它在多個文檔中位置的映射,通過搜索詞可以找到對應的文檔。如果一個詞組對應多個文檔中的索引,則通過組合和pagerank算法提高回復的正確率。但該技術不支持帶有通配
29、符(如_,?,*)的模糊匹配,同時會返回詞組在文檔中出現的頻率等無關信息。(3) AIML回溯推理。鑒于(1)(2)中的不足,本文采用的技術如下:首先在知識庫預處理時,建立多級索引結構,如“喜歡漫畫海賊王”,采用三級索引結構,第一級存儲“喜歡”,第二級存儲“漫畫”,第三級“海賊王”。上級索引會指向下級索引,構成樹狀結構(見圖1),采用這種模型可以同時達到(1)和(2)的優點:采用指針的指向可以實現回溯的功能,支持帶有通配符的模糊匹配;采用多級索引可以加快檢索的速度。在AIML回溯推理技術中我們采用的樹稱為AIML知識樹,即所有的知識庫數據對象(即AIML文件)將以多叉樹的形式加載到內存中,如下
30、圖所示,根節點稱為Graphmaster(簡記為GM),樹的每個節點(Nodemapper)代表一個通配符或詞組,每條路徑表示一種匹配模式(pattern),每個葉子節點表示一個模板(template),當匹配成功后,返回該葉子節點的模板信息9。在AIML系統知識庫中存儲了40000多條分類,但其中很多模式的首個單詞或詞組相同,如果采用這種知識樹,則指向根節點GM的Nodemapper也只有2000多個而已,這大大減少了內存的開銷。圖1 AIML知識樹結構示意圖第23節 自然語言處理與AIML解析算法自然語言處理(NLP)10是實現人與計算機之間用自然語言溝通,由數學、認知科學、語言學等多學科
31、交叉的技術,目前廣泛應用在機器翻譯、語音合成、會話機器人等領域。NLP主要包括詞法分析、句法分析和語義分析三部分。詞法分析即分詞,英文中詞與詞之間有空格隔開,如Chinese language;句法分析是分析過程中關鍵的一步,是對句子的結構、語法進行分析,如辨別疑問句等,例如It is a book,進行句法分析后,得出“It”是主語,“is”是謂語,“a book”是賓語;而語義分析是NLP的最終目的,它注重整個段落的上下文分析,具體來說,對于一個句子,理解單詞在該句子中的含義,同時以謂語動詞為核心,理解各成分的關系。AIML解析不采用復雜的自然語言處理。當機器人接收到用戶的問題時,要先用分
32、詞器對問題進行分詞,同時分析是否有需要替換的詞,如“Hows”替換為“How is”,完成分詞后對語句進行推理。推理過程是與AIML知識樹進行匹配,整個推理過程為:步驟1:將句子的第一個單詞與知識樹根節點比較,進行問句規范化后,轉入步驟2;步驟2:節點中是否包括“_”的通配符,如果存在,則將節點以外的部分在以當前節點為根節點的子樹中繼續搜尋,否則,轉入步驟3;步驟3:節點中是否包括“?”的通配符,如果存在,則將節點以外的部分在以當前節點為根節點的子樹中繼續搜尋,否則,轉入步驟4;步驟4:節點中是否包括“*”的通配符,如果存在,則將節點以外的部分在以當前節點為根節點的子樹中繼續搜尋,否則,轉入步
33、驟5;步驟5:若步驟2-4匹配失敗,則回溯到父節點,并將節點放回句子中,再次匹配。這里舉一個例子說明它的推理過程,假設知識庫中有如下幾個分類:<category><pattern>_ love your father.</pattern><template>YES,I love him very much.</template></category><category><pattern> Do you love your mother?</pattern><template>
34、YES,I love her very much.</template></category><category><pattern>Do you love * boy?</pattern><template>YES,that boy is very smart.</template></category>對這些<category>,其知識樹簡圖如下所示。假設用戶輸入“Do you love your mother?”,則推理的過程為:匹配串為“Do you love your mothe
35、r?”,將首個單詞“do”與第一級節點(1)或(5)匹配,Do先匹配節點(1),you匹配下一節點(2)失敗,因為是問句進行回退,you匹配節點(1),成功,love匹配下一節點(2),成功,your匹配下一節點(3),成功,mother匹配下一節點(4),節點(4)非“_”、“?”、“*”、“mother”,失敗,回溯到根節點;Do匹配節點(5),成功,you匹配下一節點(6),成功,love匹配下一節點(7),成功,your匹配時有兩種選擇,先匹配優先級高的“_”,mother匹配下一節點(9),失敗,進行回溯;your匹配節點(10),成功,mother匹配(11),成功。整個匹配完成,
36、最后返回對應的結果<template>給用戶。圖2 知識樹簡圖第24節 AIML與S-R理論人工智能旨在通過了解智能的本質并以此生產出與人類智能相似作用的智能機器,目前已廣泛應用在圖像識別、語音翻譯、NLP等領域。人工智能的主要學派有行為主義、符號主義和聯結主義三大學派,其中行為主義通常認為源于控制論。行為主義理論又稱刺激反應(S-R)理論,理論認為對環境和對行為的刺激,任何行為都可以被改變;同時,不斷對正確反應的強化和對錯誤反應的消退,可以增強學習效果。設計AIML主體思想正是S-R理論,通過對用戶的輸入語句分析匹配(即S理論),給出特定的答案(即R理論),從而使得用戶問題得到表
37、示和處理。第25節 本章小結本章節介紹了設計會話機器人系統所需的相關技術,這為接下來系統的設計與實現做了理論鋪墊。會話機器人是當下熱門的技術應用,它的實現基于AIML語言。AIML語言的核心在于定義了一套具有特殊含義的標簽,文中介紹了各類標簽及其作用。用AIML語言編寫的文件組稱為AIML知識庫。在啟動機器人時需要調用知識庫,此時會將知識庫以多叉樹形式加載到內存中,這里介紹了推理技術和知識樹的相關概念。AIML解析是系統運行的重要環節,它是自然語言處理的一個應用,文中對解析推理的過程進行了詳細的闡述。最后,本章節介紹了設計AIML的主體思想是S-R理論。第3章 系統的設計與實現第31節 AIM
38、L的開發環境本系統在64位Windows操作系統下開發,支持AIML的語言有多種,如Python,Ruby,Java,C等版本,這里選擇使用Python 3.7,在終端安裝AIML的方式為:pip install aiml圖3 AIML安裝示意圖第32節 系統需求分析與總體設計現實中很多人已經厭煩了人與人之間網上通信,人們不愿泄露自己的真實身份和個人信息,但在與“聰明”的機器人聊天時,人們便會放松下來。會話機器人(Chatbot)不會將人們信息外傳,包括姓名、年齡、工作信息等,所以Chatbot能夠實現與用戶的日常對話。參考蘋果siri的設計需求,在本文中,系統的設計應具有如下功能:(1) 對
39、用戶的問題做出響應;(2) 如果當前沒有會話,則機器人自主創建會話;為了使用戶利用本系統與機器人隨意交流,根據需求,Chatbot整體設計流程如下幾步:步驟一:初始化,即將AIML文件導入到計算機內存中;步驟二:處理用戶輸入,對用戶的輸入分析是否為問句,并做提取關鍵詞、去噪音等步驟;步驟三:問題查詢推理,根據上述推理過程做出推理,對問題進行匹配;步驟四:模板處理,對步驟三進行完善。具體流程圖如下: 圖4 系統設計流程圖第33節 系統服務器端的設計與實現第331節 AIML知識庫的建立與改進AIML知識庫是人機對話系統的核心部分,知識庫的建立是復雜、工程量巨大的,因此往往調用系統自帶知識庫。如果
40、系統自帶知識庫內容不足,也可以訪問網絡數據庫,比如圖靈知識庫。Python中安裝AIML庫時會自動安裝自帶的知識庫,在這里,如果我們做一些句式變換,可以使系統的時間復雜度和空間復雜度變小。假設知識庫中存在如下幾個分類:<pattern> Where is Beijing?</pattern><pattern> How is Beijing?</pattern><pattern> Where is HongKong?</pattern><pattern> How is HongKong?</pattern&
41、gt;在知識庫當中,這是四個不同的分類,然而我們也可以考慮將問題變為如下:<category><pattern>Where is *?</pattern><template><think><set name=”search”>location</set></think><sari><star/></sari></template></category><category><pattern>How is *?</
42、pattern><template><think><set name=”search”>describe</set></think><sari><star/></sari></template></category><category><pattern> HongKong </pattern><template><condition><li name=”search” value=”location”&g
43、t;HK is in the south of China.<li><li name=”search” value=”describe”>HK is a beautiful city.<li></condition></template></category>我們可以將四個分類分成問句規則和知識體。具體來說,假如用戶輸入“Where is HongKong?”,系統首先匹配“Where is *?”成功,推理到<think>時,此時設置了name為search、值為location的變量,再以*對應的HongK
44、ong為輸入訪問<pattern>為HongKong的模板,在<li>條目中匹配name為search、值為location對應的回復。通過這種方式,我們就可以實現問句與知識體分離,假如再添加”ShangHai”的兩個分類,則僅需要添加”ShangHai”的知識體便可,無需重復問法。假設原本有n種問句規則,m個相關知識體,系統存儲的知識體數目將從m*n縮減為m+n,這將大幅度減少系統的時間復雜度和空間復雜度。我們用此方法對系統自帶知識庫進行改進,在調用知識庫時,首先需要聲明aiml版本與編碼格式,具體的調用方式是,如果用戶輸入LOAD AIML B,則機器人學習<
45、learn></learn>之間的文件。示例代碼如下:圖5 AIML知識庫調用示例代碼這里的std-*.aiml格式文件為改進后的系統知識庫文件,通過<learn>標簽可以訪問這些文件。為了方便系統的維護,一般根據不同的場景增加不同的aiml文件,如科普知識文件std-knowledge.aiml、地理知識文件std-geography.aiml、宗教知識文件std-religion.aiml等。如果新增aiml文件到知識庫中,僅需將文件放到”./aiml/”目錄下。系統初始化時會基于這些文件構建多叉樹,當收到用戶問題時會在多叉樹中進行模式匹配。第332節 AIM
46、L解析器的設計AIML解析器是為了解析AIML知識庫,目前Chatbot的解析器已有多個成熟版本,比如用Ruby編寫的PROGRAM D ,用Java編寫的CHATTERBEAN,用PASCAL編寫的PROGRAM E等。這里采用PyAIML解析器,其原理是通過掃描AIML知識庫建立定向模式樹,即這里的多叉樹,再通過深度搜索(DFS)來匹配輸入的問題。PyAIML的安裝方式為: pip install python-aiml第333節 接收分析器的實現不同的客戶端上編碼不同,因此對于用戶的輸入,需要先解碼為Unicode。同時,當獲得用戶輸入時,應防止其他線程的干擾。Chatbot分析用戶輸入
47、分如下幾步:步驟一:如果當前沒有會話,則機器人自主創建會話;步驟二:對用戶的輸入分詞處理,將獲取的詞組添加到列表中;步驟三:對詞組依次做出響應,并將收到的response放到回復列表中;步驟四:返回回復列表,并針對I/O進行編碼;步驟五:在Finally模塊中釋放內存。具體代碼如下所示,最后將該函數放入AIML分析器的運行類Kernel()中。圖6 分析器示例代碼第334節 記憶功能的實現當漸漸有了許多 AIML 文件,機器人就需要很多時間去學習。為了加快機器人的運行速度,我在該系統中創建了內核文件brainFile,在程序運行時通過加載brainFile參數指定文件來啟動大腦。如果brain
48、File文件尚未給定,則運行學習文件,如接收分析時預加載的AIML知識庫文件,示例代碼如下:kernel=aiml.Kernel()if os.path.isfile("rebot_brain.brn"): kernel.bootstrap(brainFile="rebot_brain.brn")else: kernel.bootstrap(learnFiles="start_up.xml",commands="LOAD AIML B") kernel.saveBrain("rebot_brain.brn
49、")由于內核文件的加載是預處理的,我們在調用文件時需要找到文件的路徑,示例代碼如下所示,首先在以參數name命名的模塊文件空間中搜索,如果搜索失敗返回訪問未知對象屬性異常,否則返回文件的完整路徑。def get_modu_dir(name): path = getattr(sys.modulesname, '_file_', None) #得到一個name命名模塊的_file_ if not path: raise AttributeError('modu %s has not attribute _file_' % name)return os.pa
50、th.dirname(os.path.abspath(path)當獲得內核文件完整路徑后,需要將工作環境切換到該路徑下。示例代碼如下,os是Python系統自帶庫,chdir是指切換當前路徑。path = get_modu_dir('aiml') + '/standard'#切換到語料庫所在工作目錄os.chdir(path)#更換路徑預加載函數中調用的bootstrap函數是用來提供待使用的內核文件。其算法思想是:首先根據brainFile參數調用brainFile文件,切換當前工作路徑。否則,調用learnFile參數下learnFile文件,同樣切換路徑,
51、由于learnFile參數提供的是一個文件組,需要先將文件組中文件依次提取出來并學習。commands是用戶輸入的參數,如在前面代碼中,需要學習系統知識庫時,令commands為“LOAD AIML B”。bootstrap函數具體代碼如下:圖7 bootstrap函數示例代碼當機器人收到用戶的保存指令時,將已經加載的文件保存到brainFile文件下,示例代碼如下:def saveToBrain(self, file_name): if self._verboseMode: print( "save to %s." % file_name, end=""
52、;) start = time.clock() self._brain.save(file_name) if self._verboseMode: print( "saving done (%.1f seconds)" % (time.clock() - start) )第34節 系統客戶端的設計與實現Python提供能夠交互式處理的環境,即用戶和系統之間存在能夠交互作用的信息處理方式,系統收到用戶輸入的信息后在后臺處理,并在終端顯示出處理結果,用戶根據結果再次輸入信息,依次反復。文中設計一個名為“op”的Chatbot,當用戶輸入exit時,退出聊天;當輸入save時,保
53、存加載文件;否則,對用戶的會話進行匹配處理,具體代碼如下所示:print("hello,my name is op,you can talk to me:")while True: news=input("I say:") if news="exit": exit() elif news="save": kernel.saveToBrain("rebot_brain.brn") else: rebot_respon=kernel.respond(news) print("op say:%s"%rebot_re
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 前沿動態營養師考試試題及答案
- 經典演出經紀人考試試題及答案
- 逼近考試演出經紀人試題及答案分析
- 現代家政學考題及答案
- 物理綜合高考題及答案
- 《第七天》讀后感
- 逃家的小兔測試題及答案
- 江西外語外貿職業學院《勞動通論》2023-2024學年第二學期期末試卷
- 武昌理工學院《統計與分析軟件SPSS的應用》2023-2024學年第二學期期末試卷
- 2025屆河北省中原名校高三下學期一練前第二次強化訓練歷史試題含解析
- 曾奇峰精神分析網絡課程學習筆記第1-6講
- 《基礎和聲學》試習題庫(6套答案)
- 馬克思主義政治經濟學課程講義
- 無人機培訓教材ppt
- SolidWorks、CAD三維建模練習習題圖
- HONEYWELLDCS操作手冊
- 方正飛騰使用教程詳解
- 初篩陽性確診流程
- 資格考試合格人員登記表下載- 資格考試合格人員登記表
- 新人教版六年級下冊數學全冊課時練
- 柔道技術與欣賞
評論
0/150
提交評論