版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄前言 3第一章 緒論 41.1 研究背景及現(xiàn)狀 41.2 對(duì)話知識(shí)庫(kù)構(gòu)建方法概述 41.3 本文的主要工作及創(chuàng)新點(diǎn) 51.4 本文的組織結(jié)構(gòu) 5第二章 對(duì)話知識(shí)庫(kù)構(gòu)建方法 72.1 理論基礎(chǔ) 72.1.1 方法的形成 72.1.2 方法思路 82.1.3 方法可行性分析 82.2 語(yǔ)句模板生成 92.2.1 詞性標(biāo)注集簡(jiǎn)介 92.2.2 語(yǔ)句特征選取 102.3 提取問題與答案關(guān)聯(lián)特征 112.4 生成對(duì)話知識(shí)庫(kù) 122.4.1 知識(shí)庫(kù)存儲(chǔ)方式 122.4.2 知識(shí)庫(kù)存儲(chǔ)結(jié)構(gòu) 132.4.3. 知識(shí)庫(kù)生成過程 142.4.4 知識(shí)庫(kù)更新過程 152.5 本章小結(jié) 15第三章 知識(shí)庫(kù)構(gòu)建系統(tǒng) 173.1 系統(tǒng)需求分析 173.2 系統(tǒng)可行性分析 173.3 系統(tǒng)結(jié)構(gòu) 183.4 使用工具介紹 193.5 系統(tǒng)編碼實(shí)現(xiàn) 203.5.1 詞性標(biāo)注模塊 203.5.2 知識(shí)庫(kù)生成模塊 233.5.3 知識(shí)庫(kù)檢索模塊 273.5.4 人機(jī)交互模塊 293.6 本章小結(jié) 30第四章 實(shí)驗(yàn)結(jié)果分析 314.1 實(shí)驗(yàn)結(jié)果展示 314.1.1 對(duì)話過程展示 314.1.2 知識(shí)庫(kù)構(gòu)建結(jié)果展示 354.2 實(shí)驗(yàn)結(jié)果分析 36第五章 總結(jié)與展望 37參考文獻(xiàn) 38致謝 39摘要本文提出了一種基于模板自動(dòng)生成的面向機(jī)器人學(xué)習(xí)的對(duì)話知識(shí)庫(kù)構(gòu)建方法,并且實(shí)現(xiàn)了一個(gè)基于這種知識(shí)庫(kù)構(gòu)建方法的對(duì)話系統(tǒng)。該構(gòu)建方法的核心思想是利用句子中的詞性,根據(jù)句子中有意義實(shí)詞的詞性來(lái)完成模板的生成。知識(shí)庫(kù)構(gòu)建系統(tǒng)對(duì)首次被問及的某一個(gè)問題,會(huì)請(qǐng)求用戶告知這個(gè)問題該如何回答。此后,系統(tǒng)會(huì)根據(jù)用戶輸入的問題和答案嘗試學(xué)習(xí)同類問題和答案的表達(dá)方式并建模。并且采用一定策略,從問題和答案中嘗試提取出該問題和對(duì)應(yīng)答案相關(guān)聯(lián)的細(xì)節(jié)特征。然后在語(yǔ)料庫(kù)中匹配滿足答案表達(dá)方式的語(yǔ)句,利用這些語(yǔ)句來(lái)建立和該問題同屬一類問題的答案知識(shí)庫(kù)。當(dāng)再次被問及這一類問題時(shí),系統(tǒng)就會(huì)先將問題建模,找到此類問題對(duì)應(yīng)的知識(shí)庫(kù),然后利用前面學(xué)到的此類問題和答案關(guān)聯(lián)特征,嘗試在知識(shí)庫(kù)中找到這個(gè)問題的答案。該構(gòu)建方法可以用來(lái)實(shí)現(xiàn)簡(jiǎn)單的對(duì)話機(jī)器人系統(tǒng),同時(shí)也可以為剛投入使用的復(fù)雜對(duì)話機(jī)器人系統(tǒng)快速構(gòu)建常規(guī)問題的對(duì)話知識(shí)庫(kù)。實(shí)驗(yàn)結(jié)果表明,本文提出的模板自動(dòng)生成知識(shí)庫(kù)構(gòu)建方法是有效的,基于模板生成的對(duì)話知識(shí)庫(kù)構(gòu)建方法能夠利用用戶提供的[問題,答案]快速建立這一類問題的答案知識(shí)庫(kù)。關(guān)鍵詞:知識(shí)庫(kù)構(gòu)建;機(jī)器人學(xué)習(xí);模板生成;對(duì)話機(jī)器人AbstractInthispaper,weproposeamethod,basedonautomaticallygeneratingpatterns,toconstructdialogueknowledgebaseorientedonrobotlearning.Wealsoimplementadialoguesystembasedonthisknowledgebaseconstructionmethod.Thecoreideaoftheconstructionmethodistousethepart-of-speechofwords,whichcompletestheformationofpatternsbyusingthepart-of-speechofmeaningfulwordsinthesentence.Theknowledgebasebuildingsystemaskstheuserhowtoansweraquestionthatwasfirstasked.Afterthat,thesystemwilltrytolearntheexpressionsandmodelsofsimilarquestionsandanswersbasedonuserinputquestionandanswer.Anditalsoadoptsacertainstrategytotrytoextractcorrespondingfeaturebetweenquestionandanswer.Thenitpicksoutthetargetsentenceswhichfitthatanswermodelinthecorpus,andusesthesesentencestosetupknowledgebasewhichcanbeusedtoanswerquestionsthathavesametypewithquestioninputtingbyuser.Whenaskedaboutthiskindofproblemagain,thesystemwillgeneratepatternwithinputtingproblemfirst,andthenitfindthecorrespondingknowledgebasewhichareestablishedwiththisquestionpattern.Next,itusethefeatureslearnedintheearlysteptofindexactanswerofthisquestionintheknowledgebase.Thisconstructionmethodcanbeusedtorealizeasimpledialoguerobotsystem,anditcanalsoquicklybuildaconversationknowledgebaseofconventionalquestionsforthecomplexdialoguerobotsystemthathasjustbeenputintouse.Theexperimentalresultsshowthatthemethodproposedinthispaperiseffective,andthemethodofbuildingadialogueknowledgebasebasedonpatterngenerationcanmakeuseofthe[question,answer]providedbyuserstoquicklyestablishtheanswerknowledgebasetothiskindofproblems.Keywords:KnowledgeBaseConstruction;RobotLearning;PatternGeneration;ConversationalRobot前言隨著信息化時(shí)代的到來(lái),日常生活中會(huì)產(chǎn)生大量的數(shù)據(jù),而且每天產(chǎn)生的數(shù)據(jù)量正在以指數(shù)式增長(zhǎng)。這些數(shù)據(jù)中記錄了各種各樣的信息,涵蓋了日常生活中的方方面面,其中含有許多簡(jiǎn)單、事實(shí)性問題的直觀答案。常規(guī)的搜索引擎能完成信息的檢索,即搜索引擎根據(jù)關(guān)鍵字進(jìn)行檢索,它返回出現(xiàn)了給定關(guān)鍵字的文檔。這些含有問題答案的文檔集合為問答系統(tǒng)的答案抽取提供了基礎(chǔ)。目前,已經(jīng)有多種方法用來(lái)從文本信息中抽取答案,比較典型方法有基于模板匹配算法、基于信息檢索和信息抽取算法、基于統(tǒng)計(jì)學(xué)習(xí)的算法、基于自然語(yǔ)言處理的算法[1],能利用這些技術(shù),能夠從含有答案的文檔中提取出準(zhǔn)確答案完成對(duì)話,如周博通等實(shí)現(xiàn)的InsunKBQA:一個(gè)基于知識(shí)庫(kù)的問答系統(tǒng)[2]。但是,這些技術(shù)只是對(duì)針對(duì)一個(gè)具體的問題完成了答案的提取,無(wú)法抽取同屬一類問題的所有問題的答案。面對(duì)海量的問題,如果對(duì)每一個(gè)問題都采用只針對(duì)本問題的答案抽取方式,那么構(gòu)建一個(gè)對(duì)話知識(shí)庫(kù)就要完全依賴人工手動(dòng)輸入每一個(gè)問題,然后知識(shí)庫(kù)構(gòu)建系統(tǒng)再依據(jù)具體的問題建立對(duì)話內(nèi)容,這顯示是費(fèi)力不可行的。對(duì)于海量的問題,我們渴望對(duì)問題進(jìn)行分類,然后從“類”的角度入手,找到一種通用的方式來(lái)建立這一類問題的答案知識(shí)庫(kù)。本文從詞性的角度對(duì)句子進(jìn)行分類,根據(jù)用戶提供的[問題,答案],嘗試自動(dòng)生成該問題和答案的詞性模板,并利用答案語(yǔ)句的詞性模板在語(yǔ)料庫(kù)中搜索滿足該模板的語(yǔ)句,然后再根據(jù)這些語(yǔ)句來(lái)構(gòu)建這一類問題的答案知識(shí)庫(kù)。當(dāng)下次輸入的問題符合特定的[問題,答案]中“問題”模板時(shí),就可以嘗試從這個(gè)“答案”模板生成的知識(shí)庫(kù)中尋找正確答案。緒論本章首先介紹了對(duì)話知識(shí)庫(kù)構(gòu)建方法的研究背景和研究現(xiàn)狀,其次概述了本文構(gòu)建對(duì)話知識(shí)庫(kù)所用的方法,并說明了本文所做的主要工作及創(chuàng)新點(diǎn)。最后介紹了本篇文章的組織結(jié)構(gòu)。研究背景及現(xiàn)狀隨著人工智能時(shí)代的到來(lái),人們希望機(jī)器人能像人一樣用自然語(yǔ)言來(lái)完成對(duì)話。目前市面上也已經(jīng)有了很多能用自然語(yǔ)言來(lái)對(duì)話的機(jī)器人,代表作品有微軟公司的娛樂聊天機(jī)器人小冰、蘋果的語(yǔ)音助手Siri、京東客服機(jī)器人JIMI等。對(duì)話系統(tǒng)可以根據(jù)應(yīng)用場(chǎng)景的不同分為開放域(open-domain)問題和封閉域(closed-domain)問題2種類型[3]。.就機(jī)器人回答內(nèi)容的來(lái)源上劃分,可以將聊天機(jī)器人分為檢索式聊天機(jī)器人和生成式聊天機(jī)器人。檢索式對(duì)話機(jī)器人根據(jù)用戶的輸入和上下文內(nèi)容,使用預(yù)先存儲(chǔ)好的知識(shí)庫(kù)來(lái)完成對(duì)話;生成式對(duì)話機(jī)器人則更加復(fù)雜,它不依賴于事先定義好的內(nèi)容,自動(dòng)生成新的回答內(nèi)容。目前的對(duì)話機(jī)器人主要還是以檢索式為主,因此構(gòu)建知識(shí)庫(kù)是完成檢索式對(duì)話機(jī)器人的關(guān)鍵內(nèi)容。當(dāng)前關(guān)于構(gòu)建對(duì)話知識(shí)庫(kù)的主要方法分為三種,分別為手工編輯、基于本體的知識(shí)庫(kù)構(gòu)建方法、半自動(dòng)或自動(dòng)知識(shí)提取構(gòu)建方法[4]。手工編輯主要表現(xiàn)形式為直接手動(dòng)編輯和互聯(lián)網(wǎng)眾包機(jī)制,通過人們手動(dòng)將知識(shí)結(jié)構(gòu)化寫入計(jì)算機(jī)的方法來(lái)得到對(duì)話知識(shí)庫(kù)。起源于哲學(xué)的本體論近年來(lái)在信息領(lǐng)域也得到了廣泛的應(yīng)用,特別是W3C國(guó)際標(biāo)準(zhǔn)本體描述語(yǔ)言O(shè)WL(ontologyWeblanguage)[5]使本體論方法在構(gòu)建知識(shí)庫(kù)方面成為現(xiàn)實(shí)。半自動(dòng)或自動(dòng)知識(shí)提取則是事先設(shè)計(jì)好自動(dòng)或半自動(dòng)提取算法,然后讓計(jì)算機(jī)利用該算法去語(yǔ)料庫(kù)中抽取知識(shí)。對(duì)話知識(shí)庫(kù)構(gòu)建方法概述本文所提出的對(duì)話知識(shí)庫(kù)構(gòu)建方法是面向機(jī)器人學(xué)習(xí)的自動(dòng)知識(shí)庫(kù)構(gòu)建方法,即不需要提供大量的訓(xùn)練數(shù)據(jù),基于用戶提供的一例[問題,答案],嘗試學(xué)習(xí)同類問題和答案的表達(dá)方式并建模,借以從自由文本或知識(shí)庫(kù)中搜集大量同質(zhì)異構(gòu)的問答對(duì)子,形成知識(shí)庫(kù)并輔助問題的高效檢索。該構(gòu)建方法的核心思想是同一類問題雖然有很多不同的具體問題,但是就問題中實(shí)詞的詞性而言,屬于同一類的問題,它們的詞性是相同的。比如“張明昨天去哪兒了?”,這一具體的問題,其中實(shí)詞的詞性向量為[張明_人名,昨天_時(shí)間,去_動(dòng)詞,哪兒_代詞],因此這一類問題的共詞性同模板向量就是[人名,時(shí)間,動(dòng)詞,代詞]。對(duì)于這個(gè)具體的問題,一個(gè)正確答案可能是“張明昨天去北京了?!?,同理這個(gè)答案的詞性向量依次為[張明_人名,昨天_時(shí)間,去_動(dòng)詞,北京_地名],我們可以得到這類問題的答案語(yǔ)句模板向量為[人名,時(shí)間,動(dòng)詞,地名]。因而,我們可以用這個(gè)答案模板去語(yǔ)料庫(kù)中檢索,符合這個(gè)模板的句子,它可能就是這類問題中某個(gè)具體問題的答案?;谶@樣的假設(shè),我們將這些句子用來(lái)建立這類問題的答案知識(shí)庫(kù)。當(dāng)下次有符合[人名,時(shí)間,動(dòng)詞,代詞]模板的問題,就嘗試從這個(gè)答案知識(shí)庫(kù)中去尋找答案。本文的主要工作及創(chuàng)新點(diǎn)本文以各種知識(shí)庫(kù)構(gòu)建方法為基礎(chǔ),參考了各種構(gòu)建方法的核心思想,提出了一種基于模板生成的自動(dòng)知識(shí)庫(kù)構(gòu)建方法。先在理論上探索了利用該方法構(gòu)建對(duì)話知識(shí)庫(kù)的可行性,然后在windows平臺(tái)上編碼實(shí)現(xiàn)了一個(gè)利用該構(gòu)建方法的對(duì)話知識(shí)庫(kù)構(gòu)建系統(tǒng),通過在一定量的語(yǔ)料庫(kù)上,實(shí)際地驗(yàn)證了該構(gòu)建方法的實(shí)際效果。本文提出的知識(shí)庫(kù)構(gòu)建方法創(chuàng)新點(diǎn)主要體現(xiàn)在不僅是對(duì)具體的某個(gè)問題創(chuàng)建該問題的答案知識(shí)庫(kù),而是嘗試將用戶提供的[問題,答案]實(shí)例抽象到“類”的層次。從人的認(rèn)識(shí)事物的角度出發(fā),將某個(gè)具體的[問題,答案]進(jìn)行抽象,拋去表層具體的詞項(xiàng),提煉出該[問題,答案]的詞性模式[問題模板,答案模板,問題--答案的關(guān)聯(lián)特征],利用這個(gè)詞性模板建立一個(gè)屬于這一類[問題,答案]的答案知識(shí)庫(kù),實(shí)現(xiàn)由一個(gè)[問題,答案]例子,嘗試學(xué)會(huì)回答這一類問題,從而達(dá)到機(jī)器人自學(xué)習(xí)的效果。本文的組織結(jié)構(gòu)全文共分為五章,每個(gè)章節(jié)的內(nèi)容安排如下:第一章:緒論。本章首先介紹了對(duì)話知識(shí)庫(kù)構(gòu)建方法的研究背景和研究現(xiàn)狀,其次概述了本文構(gòu)建對(duì)話知識(shí)庫(kù)所用的方法,并說明了本文所做的主要工作及創(chuàng)新點(diǎn)。最后介紹了本篇文章的組織結(jié)構(gòu)。第二章:本文所使用的知識(shí)庫(kù)構(gòu)建方法詳細(xì)描述。闡述該構(gòu)建方法的理論基礎(chǔ)及實(shí)現(xiàn)原理。第三章:詳述一個(gè)基于該構(gòu)建方法實(shí)現(xiàn)的對(duì)話知識(shí)庫(kù)構(gòu)建系統(tǒng)。第四章:實(shí)驗(yàn)結(jié)果展示及對(duì)基于本方法的知識(shí)庫(kù)構(gòu)建系統(tǒng)的評(píng)估。第五章:總結(jié)全文,提出進(jìn)一步的工作設(shè)想與展望。對(duì)話知識(shí)庫(kù)構(gòu)建方法本章將詳細(xì)地介紹本文提出的對(duì)話知識(shí)庫(kù)構(gòu)建方法,主要從基本原理、句子模板生成、具體問題和對(duì)應(yīng)答案關(guān)聯(lián)特征提取、利用生成的模板構(gòu)建知識(shí)庫(kù)和如何利用構(gòu)建的知識(shí)庫(kù)完成對(duì)話幾個(gè)方面詳細(xì)介紹。理論基礎(chǔ)本節(jié)介紹了本文提出的構(gòu)建方法是如何產(chǎn)生以及構(gòu)建方法的詳細(xì)思路。方法的形成對(duì)話知識(shí)庫(kù)中的知識(shí)和具體問題是存在強(qiáng)關(guān)聯(lián)的,通常是知識(shí)庫(kù)中的每一條知識(shí)對(duì)應(yīng)一個(gè)特定的問題。傳統(tǒng)的手工構(gòu)建知識(shí)庫(kù)方法就是人們利用自己已經(jīng)學(xué)到問題--答案知識(shí),將每一個(gè)問題對(duì)應(yīng)的答案按一定的格式手動(dòng)輸入計(jì)算機(jī),所有這類格式的答案集合形成了一個(gè)對(duì)話知識(shí)庫(kù)。受手工知識(shí)庫(kù)構(gòu)建方法的啟示,半自動(dòng)或自動(dòng)對(duì)話知識(shí)庫(kù)構(gòu)建方法事先對(duì)可能要問的每一類問題設(shè)計(jì)一種具體的模板或算法。然后利用這些模板去語(yǔ)料庫(kù)搜尋符合這些模板的語(yǔ)料信息,最后利用這些匹配到的語(yǔ)料信息來(lái)建立對(duì)話知識(shí)庫(kù)。半自動(dòng)或自動(dòng)對(duì)話知識(shí)庫(kù)構(gòu)建方法有一個(gè)比較明顯的弊端,那就是對(duì)于每一類問題都要事先人工給出模板,然后計(jì)算機(jī)才能依靠這個(gè)模板去建立知識(shí)庫(kù)。從這個(gè)弊端入手,我們希望能找出一種方法,讓計(jì)算機(jī)自己嘗試找出問題和答案的模板,然后再利用這個(gè)計(jì)算機(jī)自己找出的答案模板嘗試生成這類問題的答案知識(shí)庫(kù)。當(dāng)下次再遇到這類問題時(shí),計(jì)算機(jī)能用同樣的策略識(shí)別這類問題,并且嘗試從已經(jīng)構(gòu)建的對(duì)應(yīng)答案知識(shí)庫(kù)中找到這個(gè)問題的答案。現(xiàn)在核心任務(wù)就是計(jì)算機(jī)要嘗試學(xué)會(huì)自動(dòng)建立不同問題和答案的模板。圍繞著核心問題,我們考慮從人們認(rèn)識(shí)事物的角度去尋找方法。人們認(rèn)識(shí)某一類事物,總是從某一個(gè)具體的事物開始,然后把這個(gè)具體的事物進(jìn)行抽象,提取這個(gè)事物的本質(zhì)特征。最后用這些特征去匹配新出現(xiàn)的事物,當(dāng)這個(gè)新事物符合這些特征時(shí),我們就認(rèn)為它們同屬于一類事物。基于人們認(rèn)識(shí)同類事物的方式,我們考慮是否將這種過程用到對(duì)話知識(shí)庫(kù)的構(gòu)建上。方法思路結(jié)合對(duì)話知識(shí)庫(kù)特點(diǎn)和人們學(xué)習(xí)新事物過程,我們不難發(fā)現(xiàn)這種學(xué)習(xí)過程可以運(yùn)用到對(duì)話知識(shí)庫(kù)的構(gòu)建上。因?yàn)?,?duì)話過程中的被問及的問題也是存在這種由具體問題抽象到某類問題的現(xiàn)象;由某個(gè)具體問題的回答方式抽象到某類問題的回答方式。這種抽象可以是一種建立在句子詞性相同的基礎(chǔ)上。方法可行性分析要計(jì)算機(jī)利用語(yǔ)句的詞性嘗試自動(dòng)完成模板生成和利用生成的模板構(gòu)建知識(shí)庫(kù),有以下四個(gè)核心任務(wù)要處理。要自動(dòng)對(duì)輸入的問題、答案,語(yǔ)料庫(kù)中的語(yǔ)句進(jìn)行詞性標(biāo)注。要從已經(jīng)進(jìn)行詞性標(biāo)注的給定問題和答案中提取出問題和答案的一般特征,進(jìn)而形成類的概念。在提取一般特征的同時(shí),還必須找出這個(gè)給定的問題和答案具體是如何關(guān)聯(lián)在一起的,即為什么這個(gè)答案對(duì)應(yīng)這個(gè)問題,這樣才能對(duì)這一類問題中每個(gè)具體的問題找到對(duì)應(yīng)的具體答案。要利用生成的答案模板在語(yǔ)料庫(kù)中匹配所有符合這個(gè)模板的語(yǔ)句,并將符合答案模板的這些語(yǔ)句段截取出來(lái)。最后還要考慮如何組織第三點(diǎn)中提取出來(lái)的語(yǔ)句段,以便下次針對(duì)同類問題,在其中檢索答案。針對(duì)以上四點(diǎn)核心任務(wù),可以采取以下措施完成。就詞性標(biāo)注而言,目前詞性標(biāo)注在自然語(yǔ)言處理中已經(jīng)得到了很好的解決,有很多開源的工具可以直接使用,并且這些開源工具在詞性標(biāo)注方面準(zhǔn)確率幾乎都在95%以上。利用這些分詞工具可以完成詞性標(biāo)注任務(wù)。針對(duì)給定問題和答案中特征提取,特征太少時(shí)無(wú)法準(zhǔn)確描述這類問題和答案的共性,特征提取的太多,又失去了對(duì)它們的一般性概括。從一般的問題入手,我們可以發(fā)現(xiàn)同類問題它們語(yǔ)句包含的關(guān)鍵詞的詞性是相同的,比如問地點(diǎn)的問題“小明剛才去哪兒了?”,其中的關(guān)鍵詞應(yīng)該是[小明,剛才,去,哪兒]它們的詞性為[人名,時(shí)間,動(dòng)詞,代詞]。同屬這一類問地點(diǎn)的所有問題,其中的具體成分可以被更換,但詞性幾乎不會(huì)改變。至于輔助詞“了”和標(biāo)點(diǎn)符號(hào)“?”這些成分可以被更換或省略。因此我們可以忽略句子中的虛詞,采用句子中實(shí)詞的詞性作為模板的成分。而具體的問題和答案關(guān)聯(lián)則可采用問題和答案中相同成分作為特征的策略。從已經(jīng)進(jìn)行標(biāo)注的語(yǔ)料庫(kù)中選取符合答案模板的語(yǔ)句并截取出來(lái),這個(gè)任務(wù)可以通過將答案模板和語(yǔ)料庫(kù)中語(yǔ)句的詞性模板視為串,然后采用串匹配策略完成檢索與截取。最后,我們對(duì)符合答案模板語(yǔ)句的整體組織可以采用XML格式。XML這種標(biāo)簽語(yǔ)言帶有很強(qiáng)的描述性,可以使得生成的對(duì)話知識(shí)庫(kù)結(jié)構(gòu)化。同時(shí)XML格式的數(shù)據(jù)可以在不同的平臺(tái)間傳輸,做到知識(shí)庫(kù)一次生成,跨平臺(tái)多次使用的效果;另一方面,也是因?yàn)榛赪3C標(biāo)準(zhǔn)的XPath文檔查詢語(yǔ)言可以快速地選出需要的節(jié)點(diǎn),避免了對(duì)整個(gè)文檔的檢索,縮短了在知識(shí)庫(kù)檢索目標(biāo)答案時(shí)間。從以上幾個(gè)方面分析,我們可以得出基于模板生成的面向機(jī)器人學(xué)習(xí)的對(duì)話知識(shí)庫(kù)構(gòu)建方法在理論上是可行的。語(yǔ)句模板生成要計(jì)算機(jī)嘗試完成問題和答案模板的自動(dòng)生成,首先要考慮如何對(duì)問題和答案進(jìn)行抽象。不管是問題還是答案,它們都是語(yǔ)句。既然是句子,那么句子中每個(gè)詞都一定的詞性,我們可以從詞性出發(fā),利用每個(gè)詞的詞性來(lái)對(duì)這句話進(jìn)行抽象。詞性標(biāo)注集簡(jiǎn)介詞性標(biāo)注就是給每個(gè)詞一個(gè)類別信息,它是對(duì)詞本身的一種抽象描述。要對(duì)漢語(yǔ)進(jìn)行分詞,首先要制定一套標(biāo)準(zhǔn)的詞性標(biāo)注集。漢語(yǔ)詞性標(biāo)簽集不僅可以用于漢語(yǔ)分詞,也是進(jìn)行詞法分析、句法分析和漢英機(jī)器翻譯系統(tǒng)的重要元素。不同的分詞工具采用詞性標(biāo)注集略有差異,當(dāng)前分詞系統(tǒng)主要用的詞性標(biāo)注集有ICTCLAS2008漢語(yǔ)詞性標(biāo)注集[6],以及該標(biāo)注集的擴(kuò)充版本ANSJ詞性標(biāo)注集,其余詞性標(biāo)注集還包括中文樹庫(kù)(ChineseTreeBank)標(biāo)注集、863詞性標(biāo)注集。具體采用哪一個(gè)標(biāo)準(zhǔn)的詞性標(biāo)注集并不影響具體的句子模板生成,本文中后續(xù)系統(tǒng)的實(shí)現(xiàn)采用了LTP((LanguageTechnologyPlatform)平臺(tái)[7]的分詞功能,因此,詞性標(biāo)注集選用863詞性標(biāo)注集。表2.1是LTP平臺(tái)采用的863詞性標(biāo)注集符號(hào)的詳細(xì)說明。采用了一定標(biāo)準(zhǔn)的詞性標(biāo)注集對(duì)句子中每個(gè)詞進(jìn)行標(biāo)注后,下一步我們就可以利用這些詞性標(biāo)注信息形成模板來(lái)描述句子的特征。語(yǔ)句特征選取特征提取的好壞決定了歸納的問題類是否能夠包含該類所有的問題,同時(shí)也決定了答案模板能否在語(yǔ)料庫(kù)中找到所有這類問題的答案。對(duì)給定問題和答案進(jìn)行特征提取,特征太少時(shí)無(wú)法準(zhǔn)確描述這類問題和答案的共性,這可能導(dǎo)致將不是同類的問題也歸納到這一類問題中;特征提取的太多,又失去了對(duì)它們的一般性概括,從而會(huì)導(dǎo)致生成的模板規(guī)則太強(qiáng),在語(yǔ)料庫(kù)中匹配不到有用的語(yǔ)句。為了選取有效的特征,從一般的問題入手,我們可以發(fā)現(xiàn)同類問題它們語(yǔ)句包含的關(guān)鍵詞的詞性是相同的,比如問地點(diǎn)的問題“張明剛才去哪兒了?”,其中的關(guān)鍵詞應(yīng)該是[張明,剛才,去,哪兒]這幾個(gè)有意義的實(shí)詞,它們對(duì)應(yīng)表1.1中的詞性標(biāo)注符號(hào)生成的模板向量為[nh,nt,v,r]。同屬這一類問地點(diǎn)的所有問題,其中的關(guān)鍵詞的具體成分可以被更換,比如關(guān)鍵詞換為[李剛,上個(gè)月,去,哪里]。這些關(guān)鍵詞構(gòu)成的問題可能為“李剛上個(gè)月去哪里啦?”,不難發(fā)現(xiàn)這兩個(gè)問題是屬于同一類問地點(diǎn)的問題。第二個(gè)問題中包含的關(guān)鍵詞詞性沒有改變,至于無(wú)意義的輔助詞“了”和標(biāo)點(diǎn)符號(hào)“?”這些成分可以被更換或省略,如上面第二個(gè)問地點(diǎn)的問題中,可以將“了”換成“啦”或者不用這種語(yǔ)氣助詞。這種助詞在問句中并沒有提供實(shí)際的意義,只是起到使語(yǔ)句通順的效果,因此他們不能成為特征。由上述我們可以得出結(jié)論,模板中的特征應(yīng)該選用句子有意義的實(shí)詞詞性標(biāo)簽,我們將這種有意義的實(shí)詞定義為該句中的關(guān)鍵詞,同時(shí)要忽略句子中無(wú)意義的虛詞詞性標(biāo)簽。對(duì)于“張明剛才去哪兒了?”這個(gè)問題我們得到這類問地點(diǎn)的問題模板向量為[nh,nv,v,r]。我們假設(shè)表1.1中的詞性標(biāo)注集中所有的詞性標(biāo)簽為S,我們選擇集合I中詞性標(biāo)簽為要忽略的虛詞標(biāo)簽元素,則特征詞性標(biāo)注集F的中表記元素為S與I的差集。即: 公式(2-1)其中S為詞性標(biāo)注集中所有標(biāo)簽,I=(c,e,g,h,o,p,u,wp,x)。表2.1LTP詞性標(biāo)注集各標(biāo)簽含義標(biāo)簽符號(hào)描述例子標(biāo)簽符號(hào)描述例子a形容詞漂亮ni組織名稱紅十字基金會(huì)b其他名詞修飾符大型nl位置郊區(qū)c連詞和ns地名成都d副詞非常nt時(shí)間昨天e嘆詞唉nz其他專有名詞圖靈獎(jiǎng)g詞素甥o擬聲詞啪嘰h前綴阿p介詞在i習(xí)語(yǔ)百花齊放q量詞一個(gè)j縮寫詞公檢法r代詞我k后綴率u輔助詞的m數(shù)字100v動(dòng)詞去n一般名詞桃子wp標(biāo)點(diǎn)符號(hào)。,nd方位名詞左側(cè)ws外文詞GPAnh人名張三x非詞法符號(hào)萄提取問題與答案關(guān)聯(lián)特征上一節(jié)中,嘗試性給出了如何對(duì)給定的[問題,答案]實(shí)例進(jìn)行抽象,提取模板,進(jìn)而歸納出這一類問題的答案所共有的特征。但是對(duì)答案模板匹配到的語(yǔ)句,我們只知道這是用來(lái)回答某一類問題的語(yǔ)料信息,我們還不知道這個(gè)句子究竟是用來(lái)回答哪一個(gè)具體問題的。比如對(duì)于問地點(diǎn)的問題“張明昨天去哪兒了?”,語(yǔ)料庫(kù)含有許多回答地點(diǎn)的語(yǔ)句,“張明昨天去北京了”,“張明今天回學(xué)校了”,“李剛昨天去成都”等。我們必須采取一種策略判定出“張明昨天去北京了”這個(gè)句子是問題對(duì)應(yīng)的答案語(yǔ)料。我們知道對(duì)話知識(shí)庫(kù)每一個(gè)答案都是對(duì)應(yīng)一個(gè)問題的(不包括像“好啊”,“我不知道”等這種無(wú)效回答),并且這種問題和答案的對(duì)應(yīng)關(guān)系是一一強(qiáng)對(duì)應(yīng)的。觀察上面的問題“張明昨天去哪兒了”和對(duì)應(yīng)答案“張明昨天去北京了”,我不難發(fā)現(xiàn)在這個(gè)問題和答案中,他們的具體關(guān)聯(lián)表現(xiàn)在[nh,nt,v]模板向量對(duì)應(yīng)的具體詞相同。更一般的,我們能不能把這種問題和答案中的一致性作為問題和答案的關(guān)聯(lián)關(guān)系呢?事實(shí)上,對(duì)于基于事實(shí)、非推理性的問題,這種關(guān)聯(lián)是可以的。因?yàn)?,基于事?shí)的事件,包括時(shí)間、地點(diǎn)、人物、事件的內(nèi)容等一系列事件要素,對(duì)這些事件進(jìn)行提問時(shí),必須要指明事件中的一些或全部要素才能完全確定問題要問的對(duì)應(yīng)事件?;谝陨侠碚撐覀兛梢圆扇栴}和答案中相同關(guān)鍵詞生成的向量作為具體問題和具體答案關(guān)聯(lián)的特征向量。例如對(duì)于上述問地點(diǎn)的問題,它的具體問題與答案的關(guān)聯(lián)特征向量為[nh,nt,v]。下次當(dāng)再次有這類問地點(diǎn)的問題時(shí),我們就可以根據(jù)這個(gè)關(guān)聯(lián)特征向量去嘗試性檢索這個(gè)問題的具體答案。生成對(duì)話知識(shí)庫(kù)到目前為止,我們已經(jīng)找到方法對(duì)語(yǔ)句進(jìn)行詞性標(biāo)簽,提取問題模板向量、答案模板向量、具體問題和答案關(guān)聯(lián)特征向量。接下來(lái)要解決的就是如何用這些得到的信息構(gòu)建得到對(duì)話知識(shí)庫(kù)。知識(shí)庫(kù)存儲(chǔ)方式基于我們構(gòu)建的對(duì)話知識(shí)庫(kù)是提供給對(duì)話機(jī)器人完成對(duì)話的目的,我們?cè)O(shè)計(jì)的對(duì)話知識(shí)庫(kù)首先應(yīng)該是結(jié)構(gòu)化、便于檢索的。同時(shí)知識(shí)庫(kù)還應(yīng)該是自描述、易擴(kuò)展的,即生成的知識(shí)庫(kù)可以脫離知識(shí)庫(kù)生成程序后進(jìn)行自解釋,當(dāng)生成好的知識(shí)庫(kù)遇到新的語(yǔ)料信息時(shí),可以依靠知識(shí)庫(kù)中的自我結(jié)構(gòu)描述信息進(jìn)行擴(kuò)充。根據(jù)以上的幾點(diǎn)對(duì)知識(shí)庫(kù)的要求,我們可以選擇XML這種擴(kuò)展標(biāo)簽語(yǔ)言。首先XML作為標(biāo)簽語(yǔ)言,它可以對(duì)文本中的信息添加一系列的標(biāo)簽從而使無(wú)結(jié)構(gòu)的數(shù)據(jù)成為半結(jié)構(gòu)化或結(jié)構(gòu)化的數(shù)據(jù)。其次XML標(biāo)簽語(yǔ)言給用戶提供很大的自由性,用戶可以自定義標(biāo)簽,為不同的信息添加不同的描述結(jié)點(diǎn),從而可以達(dá)到知識(shí)庫(kù)自描述的特點(diǎn)。再次,基于W3C標(biāo)準(zhǔn)的XPath文檔查詢語(yǔ)言可以快速地選出需要的節(jié)點(diǎn),避免了對(duì)整個(gè)文檔的檢索,縮短了在知識(shí)庫(kù)檢索目標(biāo)答案時(shí)間。最后,XML格式的數(shù)據(jù)可以在不同的平臺(tái)間傳輸,做到知識(shí)庫(kù)一次生成,跨平臺(tái)多次使用的效果。知識(shí)庫(kù)存儲(chǔ)結(jié)構(gòu)確定了如何結(jié)構(gòu)化的存儲(chǔ)知識(shí)庫(kù)后,接下來(lái)要做的就是設(shè)計(jì)一套XML節(jié)點(diǎn)標(biāo)簽,用來(lái)描述對(duì)話知識(shí)庫(kù)中,每條知識(shí)的想詳細(xì)信息。本文設(shè)計(jì)的XML節(jié)點(diǎn)標(biāo)簽有以下4種:knowledgeBase、knowledge、answerDetail和answer。它們各自描述信息如下:KnowledgeBase為根節(jié)點(diǎn),不帶有屬性;Knowledge為一類問題對(duì)應(yīng)的所有答案節(jié)點(diǎn),具有的以下五個(gè)屬性,分別為:questionPattern,questionFeature,answerPattern,answerFeature,exactAnswer。其中,questionPattern屬性值指出了這一類問題的模板向量;questionFeature屬性值為數(shù)字索引,它指出應(yīng)從questionPattern中選擇哪幾個(gè)位置的詞性標(biāo)注對(duì)應(yīng)的詞來(lái)區(qū)分屬于這類問題中不同的具體問題;answerPattern屬性值指明了這一類問題的答案語(yǔ)句在語(yǔ)料庫(kù)中應(yīng)該有的模式;answerFeature屬性值為數(shù)字索引,它指出answerPattern中哪些位置對(duì)應(yīng)的詞性標(biāo)注用來(lái)區(qū)分不同問題對(duì)應(yīng)的具體答案;exactAnswer屬性值為數(shù)字索引,它指出在答案模板中應(yīng)該抽取哪些位置詞性標(biāo)注對(duì)應(yīng)的詞作為問題的準(zhǔn)確答案。AnswerDetail為符合answerPattern的一條目標(biāo)語(yǔ)句信息結(jié)點(diǎn),它具有的屬性為answerFeature指出的詞性標(biāo)簽集合,屬性值為目標(biāo)語(yǔ)句對(duì)應(yīng)answerFeature指出的詞性位置上對(duì)應(yīng)的那個(gè)詞。同時(shí),answerDetail結(jié)點(diǎn)還具有子節(jié)點(diǎn)answer。answer結(jié)點(diǎn)標(biāo)簽每個(gè)問題對(duì)應(yīng)的具體答案,它的值來(lái)自于exactAnswer屬性值指出的具體詞。以上questionPattern和answerPattern屬性對(duì)應(yīng)的值分別來(lái)自于我們?cè)?.2.2節(jié)中從問題和答案中抽取的模板。questionFeature和answerFeature則來(lái)自于2.3節(jié)中問題和答案關(guān)聯(lián)特征詞項(xiàng)在問題和答案中的索引集合。下面就對(duì)給定的[“張明剛才去哪兒了?”,“張明剛才去廁所了”]這個(gè)問題答案對(duì)進(jìn)行詳細(xì)說明各結(jié)點(diǎn)的含義。對(duì)于這個(gè)給定的實(shí)例,對(duì)應(yīng)生成的知識(shí)庫(kù)如下(生成過程見下節(jié))。<?xml
version="1.0"?>
<knowledgeBase>
<knowledge
questionPattern="nh
nt
v
r
"
questionFearture="0
1
2"
aswerPatern="nh
nt
v
n
"
answerFeature="0
1
2"
exactAnswerPosition="3">
<answerDetail
nh="張明"
nt="剛才"
v="去">
<answer>廁所</answer>
</answerDetail>
</knowledgeBase>
首先knowledgeBase結(jié)點(diǎn)表示這個(gè)知識(shí)庫(kù)的根結(jié)點(diǎn)。其下可以含有許多名為knowledge的子結(jié)點(diǎn)。Knowledge結(jié)點(diǎn)表示一類問題的對(duì)應(yīng)的知識(shí)庫(kù)。在[“張明剛才去哪兒了?”,“張明剛才去廁所了”]例子中,利用2.2.2節(jié)中模板生成方法,我們可以得到問題和答案模板向量為分別為[nh,nt,v,r],[nh,nt,v,n]。則questionPattern屬性的值為[nh,nt,v,r];answerPatter屬性值為[nh,nt,v,n]。利用2.3節(jié)中問題和答案關(guān)聯(lián)特征提取方法,我們可以得到這個(gè)問題和答案關(guān)聯(lián)模板向量為[nh,nt,v],他們?cè)趩栴}模板向量中的索引為[0,1,2],在答案模板向量中的索引也是[0,1,2]。因此,questionFeature屬性值為“0,1,2”,answerFeature屬性值“0,1,2”。對(duì)于exactAnswer屬性而言,它需要額外的信息,因?yàn)閺纳厦嬗脩艚o的例子中無(wú)法自動(dòng)學(xué)習(xí)出“廁所”就是準(zhǔn)確答案。這個(gè)額外信息的來(lái)源由系統(tǒng)向用戶發(fā)出請(qǐng)求,當(dāng)用戶手動(dòng)額外輸入“廁所”一詞時(shí),系統(tǒng)就將這個(gè)詞在答案中的位置提取出來(lái),并進(jìn)一步的在答案模板中找到這個(gè)詞的位置。這里“廁所”答案模板[nh,nt,v,n]中對(duì)應(yīng)n代表的詞,故索引號(hào)為3。answerDetail結(jié)點(diǎn)對(duì)應(yīng)一條符合answerPattern模板的語(yǔ)句詳細(xì)信息,這里符合answerPattern的語(yǔ)句是“張明剛才去廁所了?!薄_@個(gè)結(jié)點(diǎn)的屬性來(lái)自于其父節(jié)點(diǎn)knowledge的answerFeature屬性值指出的詞性標(biāo)注。上面answerFeature屬性值“0,1,2”指出了要選用answerPattern中的[nh,nt,v]作為屬性,屬性值為[nh,nt,v]對(duì)應(yīng)的具體詞[張明,剛才,去]。知識(shí)庫(kù)生成過程上一節(jié)介紹了本文要使用的知識(shí)庫(kù)存儲(chǔ)結(jié)構(gòu),本節(jié)將介紹如何利用學(xué)到的模板信息和關(guān)聯(lián)特征信息來(lái)建立對(duì)話知識(shí)庫(kù)。建立對(duì)話知識(shí)庫(kù)的詳細(xì)過程如下:對(duì)用戶輸入的[問題,答案]分別生成模板向量Pquestion和Panswer。對(duì)用戶輸入的[問題,答案]和生成的模板向量[Pquestion,Panswer],并從中提取關(guān)聯(lián)特征索引向量Iquestion,Ianswer。系統(tǒng)向用戶發(fā)出請(qǐng)求,請(qǐng)求用戶輸入答案中的準(zhǔn)確詞項(xiàng),并將這些輸入詞項(xiàng)在答案模板中對(duì)應(yīng)的位置Iexact保存下來(lái)。建立knowledge結(jié)點(diǎn),利用1),2),3)中生成的信息填充knowledge結(jié)點(diǎn)。對(duì)語(yǔ)料庫(kù)中每一句話進(jìn)行詞性標(biāo)注,并生成該句的模板向量Pi。如果模板向量,則將Pi對(duì)應(yīng)Panswer部分的句子Si截取出來(lái)。這里符號(hào)是指Panswer對(duì)應(yīng)的串是Pi的一個(gè)子串。對(duì)句子Si建立一個(gè)answerDetail結(jié)點(diǎn),該結(jié)點(diǎn)的屬性用Panswer和Ianswer指出的詞性標(biāo)簽名填寫,屬性值這些詞性標(biāo)簽對(duì)應(yīng)的值填寫。根據(jù)Iexact和Panswer指出詞性標(biāo)簽對(duì)應(yīng)的詞添加answer子節(jié)點(diǎn)。將根據(jù)Si建立的answerDetail結(jié)點(diǎn)添加到4)中的knowledge結(jié)點(diǎn)下。知識(shí)庫(kù)更新過程對(duì)于已經(jīng)構(gòu)建完成的知識(shí)庫(kù),在大部分的情況下我們只是對(duì)其進(jìn)行查詢操作,即從中找出我們需要的答案。但有時(shí)隨著語(yǔ)料庫(kù)的更新,我們也需要更新我們的知識(shí)庫(kù)。因?yàn)?.4.2節(jié)中定義的知識(shí)庫(kù)存儲(chǔ)結(jié)構(gòu)是自描述的,各結(jié)點(diǎn)信息中詳細(xì)的給出了每類問題對(duì)應(yīng)的答案所具有的模板和細(xì)節(jié)特征,利用這些信息可以很容易的對(duì)這個(gè)知識(shí)庫(kù)進(jìn)行更新。更新對(duì)話知識(shí)庫(kù)的過程如下:對(duì)新增加的語(yǔ)料庫(kù),將語(yǔ)料庫(kù)中每一句話進(jìn)行詞性標(biāo)注,并生成該句子的模板向量Pi。遍歷知識(shí)庫(kù)中每個(gè)knowledge結(jié)點(diǎn),獲取到這個(gè)結(jié)點(diǎn)的答案模板向量Panswer,如果,則將Pi對(duì)應(yīng)Panswer部分的句子Si截取出來(lái)。這里符號(hào)同上一節(jié)的6)步驟中含義相同。對(duì)提取的句子Si建立一個(gè)answerDetail結(jié)點(diǎn),該結(jié)點(diǎn)的屬性用knowledge結(jié)點(diǎn)中的answerPattern和answerFeature屬性指出的詞性標(biāo)簽名填寫,屬性值用這些詞性標(biāo)簽對(duì)應(yīng)的值填寫。根據(jù)knowledge結(jié)點(diǎn)的exactAnswer屬性指出詞性標(biāo)簽對(duì)應(yīng)的詞添加answer子節(jié)點(diǎn)。將根據(jù)Si建立的answerDetail結(jié)點(diǎn)添加到這個(gè)knowledge結(jié)點(diǎn)下。本章小結(jié)本章完整介紹本文提出的對(duì)話知識(shí)庫(kù)構(gòu)建方法。首先講述了這個(gè)方法是如何產(chǎn)生的,其次分析了這個(gè)方法構(gòu)建對(duì)話庫(kù)的可行性,得出了利用該方法建立基于事實(shí)性對(duì)話知識(shí)庫(kù)的理論可行。接下來(lái)提出了句子模板生成、具體問題和對(duì)應(yīng)答案關(guān)聯(lián)特征提取的方法。最后詳細(xì)地描述了如何利用生成的模板和提取到的特征從語(yǔ)料庫(kù)中建立和更新對(duì)話知識(shí)庫(kù)。知識(shí)庫(kù)構(gòu)建系統(tǒng)本章將要描述一個(gè)面向機(jī)器人學(xué)習(xí)的對(duì)話知識(shí)庫(kù)構(gòu)建系統(tǒng)IdiotTalker。該系統(tǒng)基于第二章中提出的知識(shí)庫(kù)構(gòu)建方法,它能利用語(yǔ)料庫(kù)完成對(duì)話知識(shí)庫(kù)的構(gòu)建,并且利用構(gòu)建的對(duì)話知識(shí)庫(kù)進(jìn)行簡(jiǎn)單對(duì)話。系統(tǒng)需求分析利用上面提出的對(duì)話知識(shí)庫(kù)構(gòu)建方法,我們希望能夠設(shè)計(jì)出一個(gè)系統(tǒng),該系統(tǒng)與人的交互過程如下:對(duì)用戶首次輸入的對(duì)話問題,系統(tǒng)給出“這個(gè)問題我不懂,你能教我嗎”響應(yīng),然后請(qǐng)求用戶給出該對(duì)話問題的回答答案。用戶給出這個(gè)問題的答案,并指出這個(gè)答案中包含的精確答案。系統(tǒng)利用用戶給的這個(gè)[問題,答案,精確答案],嘗試從中生成問題模板和答案模板,達(dá)到從一個(gè)具體的問題到該類問題的認(rèn)知效果。系統(tǒng)用學(xué)會(huì)到的答案模板在語(yǔ)料庫(kù)中去檢索所有符合這個(gè)模板的語(yǔ)句,并采用異步方式,將這些語(yǔ)句組織成這類問題的答案知識(shí)庫(kù)。這類問題的答案知識(shí)庫(kù)構(gòu)建完畢后,向用戶給出響應(yīng)信息“我懂了,謝謝”。當(dāng)下次再遇到這類問題時(shí),系統(tǒng)采用異步方式,嘗試從知識(shí)庫(kù)中檢索這類問題的答案,并將答案呈現(xiàn)給用戶。系統(tǒng)可行性分析在上一章2.1.3節(jié)中論述了構(gòu)建方法的理論可行性,從理論上證明了基于模板自動(dòng)生成的方法可以用來(lái)構(gòu)建基于事實(shí)的對(duì)話知識(shí)庫(kù)。下面將分析該方法構(gòu)建對(duì)話知識(shí)庫(kù)的實(shí)際可行性。如2.4節(jié)中給出的對(duì)話知識(shí)庫(kù)生成過程,我們可以得出完成基于模板生成的對(duì)話知識(shí)庫(kù)構(gòu)建系統(tǒng),主要內(nèi)容包括以下四個(gè)方面:收集含有事實(shí)性內(nèi)容的語(yǔ)料庫(kù);完成語(yǔ)料庫(kù)中句子的詞性標(biāo)注;將生成好的對(duì)話知識(shí)庫(kù)以XML語(yǔ)言格式寫入磁盤;檢索和更新基于XML格式的知識(shí)庫(kù)。關(guān)于事實(shí)性內(nèi)容的語(yǔ)料庫(kù)可以通過多種方法獲取,可以手工從網(wǎng)上摘取一個(gè)小型的語(yǔ)料庫(kù)用來(lái)研究系統(tǒng)的效果,也可以直接利用別人已經(jīng)收集好的語(yǔ)料庫(kù)。本系統(tǒng)中為了驗(yàn)證前面的提出的方法的可行性,因此,自己手工在網(wǎng)上收集了一些事實(shí)性的語(yǔ)料。對(duì)于詞性標(biāo)注這一部分的工作,目前許多分詞工具可以完成對(duì)句子詞性的標(biāo)注。常用的有百度員工fxsjy的jieba分詞、哈工大社會(huì)計(jì)算與信息檢索研究中心的LTP、中科院的ICTCLAS、清華大學(xué)自然語(yǔ)言處理與社會(huì)人文計(jì)算實(shí)驗(yàn)室的THULAC、FudanNaturalLanguageProcessingGroup的FudanNLP和斯坦福的CoreNLP。綜合考慮以上各種工具的可獲得性和使用復(fù)雜程度,本系統(tǒng)決定采用哈工大社會(huì)計(jì)算與信息檢索研究中心的LTP為所有的句子進(jìn)行詞性標(biāo)注[7]。上面3)和4)任務(wù)的主要內(nèi)容都是操作XML文件,W3C制定了XML語(yǔ)言的格式規(guī)格,各種編程語(yǔ)言也都有對(duì)XML操作語(yǔ)言的支持,因此這兩項(xiàng)任務(wù)也能通過學(xué)習(xí)具體編程語(yǔ)言如何操作XML文件得到解決。綜合上述分析,基于模板生成的面向機(jī)器人學(xué)習(xí)的對(duì)話知識(shí)庫(kù)在實(shí)際上也是可行的。系統(tǒng)結(jié)構(gòu)由3.1節(jié)中得出的基于模板生成的面向機(jī)器人學(xué)習(xí)的對(duì)話知識(shí)庫(kù)構(gòu)建方法在實(shí)際編碼實(shí)現(xiàn)上可行,故可以設(shè)計(jì)一套系統(tǒng)來(lái)生成和利用對(duì)話知識(shí)庫(kù)。本文中設(shè)計(jì)一個(gè)名為IdiotTalker的系統(tǒng),IdoitTalker系統(tǒng)從整體上分為三層4大模塊,分別是最頂層的人機(jī)交互層,對(duì)話知識(shí)庫(kù)管理中間層和最底層的數(shù)據(jù)表示層。它的系統(tǒng)結(jié)構(gòu)如圖3.1所示。圖3.1中最頂層的人機(jī)交互層由具體的人機(jī)交互模塊完成,其主要功能就接收用戶的輸入信息和向用戶展示系統(tǒng)處理的結(jié)果信息。中間層的對(duì)話知識(shí)庫(kù)管理層由對(duì)話知識(shí)庫(kù)管理模塊完成,該模塊又進(jìn)一步分為3個(gè)子模塊,分別是圖3.1中間層中最左邊的對(duì)話知識(shí)庫(kù)生成子模塊,中間的詞性標(biāo)簽?zāi)K和最右邊的對(duì)話知識(shí)庫(kù)檢索模塊。各模塊的具體功能見后面系統(tǒng)具體編碼實(shí)現(xiàn)章節(jié)。IdiotTalker系統(tǒng)IdiotTalker系統(tǒng)人機(jī)交互模塊人機(jī)交互模塊語(yǔ)句模板生成模塊詞性標(biāo)注語(yǔ)句模板生成模塊詞性標(biāo)注模塊對(duì)話知識(shí)庫(kù)檢索模塊關(guān)聯(lián)特征提取模塊關(guān)聯(lián)特征提取模塊知識(shí)庫(kù)創(chuàng)建模塊知識(shí)庫(kù)創(chuàng)建模塊知識(shí)庫(kù)更新模塊知識(shí)庫(kù)更新模塊對(duì)話知識(shí)庫(kù)語(yǔ)料庫(kù)對(duì)話知識(shí)庫(kù)語(yǔ)料庫(kù)圖3.1IdiotTalker系統(tǒng)結(jié)構(gòu)使用工具介紹工欲善其事必先利其器。在具體的編碼開始前,必須要先決定在什么樣的平臺(tái)下開發(fā)和使用何種語(yǔ)言開發(fā)。雖然前面分別論證了基于模板生成的面向機(jī)器人學(xué)習(xí)的對(duì)話知識(shí)庫(kù)構(gòu)建方法在理論和實(shí)際上是可行的。但是具體采用什么樣的編程語(yǔ)言和使用何種平臺(tái)對(duì)開發(fā)的效率還是有很大影響。本系統(tǒng)中主要借助的外部工具為詞性標(biāo)注工具,綜合考察了各種詞性標(biāo)注工具,本系統(tǒng)決定采用哈工大社會(huì)計(jì)算與信息檢索研究中心的LTP為所有的句子進(jìn)行詞性標(biāo)注。因?yàn)長(zhǎng)TP平臺(tái)提供的詞性標(biāo)注工具不需要自己配置環(huán)境,可直接通過http請(qǐng)求完成。這就使得后續(xù)的開發(fā)語(yǔ)言和開發(fā)平臺(tái)不受限制,只要是支持http協(xié)議的編程語(yǔ)言和平臺(tái)都可以選擇。因自己平時(shí)使用Windows平臺(tái)的情況多,對(duì)Windows平臺(tái)的操作更加熟悉,故本次系統(tǒng)的開發(fā)在Windows8.1下進(jìn)行。最后是編程語(yǔ)言的選擇,因?yàn)橄到y(tǒng)生成的對(duì)話知識(shí)庫(kù)是以XML格式存儲(chǔ)的,綜合比較了C++、java和C#三種編程語(yǔ)言,結(jié)合它們對(duì)XML數(shù)據(jù)操作的方便性和自己的熟悉情況,最終決定采用C#這門編程語(yǔ)言。Microsoft在正式場(chǎng)合把C#描述為一種簡(jiǎn)單、現(xiàn)代、面向?qū)ο?、類型非常安全、派生自C和C++的編程語(yǔ)言,C#非常類似于C++和Java[8]。C#對(duì)http網(wǎng)絡(luò)編程和XML文件處理提供了很好的支持,可以讓我們減少編碼量,從而能更集中精力于對(duì)構(gòu)建知識(shí)庫(kù)方法的實(shí)現(xiàn)。系統(tǒng)編碼實(shí)現(xiàn)選擇好編程語(yǔ)言、開發(fā)平臺(tái)和分詞工具后,下一步的任務(wù)就是按照基于3.2節(jié)中給出的系統(tǒng)結(jié)構(gòu),實(shí)現(xiàn)各模塊指定的功能。本系統(tǒng)要實(shí)現(xiàn)的主要功能是中間層對(duì)話知識(shí)庫(kù)管理模塊功能。最底層的數(shù)據(jù)表示,由于語(yǔ)料庫(kù)本身只提供語(yǔ)料信息,因此可以直接以文件夾的形式存儲(chǔ)即可。對(duì)話知識(shí)庫(kù)本身也只是結(jié)構(gòu)化地存儲(chǔ)對(duì)話內(nèi)容,對(duì)它的生成和檢索部分放在對(duì)話知識(shí)庫(kù)管理模塊中。因此,最底層的數(shù)據(jù)表示層不需要有編碼工作。詞性標(biāo)注模塊詞性標(biāo)注模塊是本系統(tǒng)的基礎(chǔ),本系統(tǒng)最主要的思想就是利用句子的詞性對(duì)問題和答案進(jìn)行模板生成,故在進(jìn)行詞性模板生成前必須完成詞性標(biāo)注模塊的功能。如3.3節(jié)中介紹,本系統(tǒng)采用LTP(語(yǔ)言云技術(shù)平臺(tái))工具的詞性標(biāo)注。如語(yǔ)言技術(shù)平臺(tái)官方網(wǎng)站上介紹的,LTP對(duì)個(gè)人研究者及非盈利項(xiàng)目提供源代碼,可免費(fèi)試用該平臺(tái)提供的功能。同時(shí)LTP的使用方式也是非常簡(jiǎn)單,只需要根據(jù)它提供的WebAPI構(gòu)造相應(yīng)的參數(shù)即可。不過在使用LTP前還得先在其官方網(wǎng)站上申請(qǐng)一個(gè)賬號(hào),用于提供身份驗(yàn)證信息的APK_KEY。具體操作方法可以去LTP官方網(wǎng)站上了解,此處不詳細(xì)介紹。LTP的http接口的構(gòu)造參數(shù)如圖3.2所示。調(diào)用WebAPI接口的方式很多,但在本系統(tǒng)需要把這種調(diào)用封裝成一個(gè)模塊以便后面進(jìn)行復(fù)用,故對(duì)此建立一個(gè)名為Parse的類,Parse類的任務(wù)就是完成對(duì)句子的詞性標(biāo)注。Parse類的屬性對(duì)照?qǐng)D3.2,分別為HttpUrl表示W(wǎng)ebAPI的地址;Userkey用于身份驗(yàn)證的唯一秘鑰;Pattern可選的分析模式,包括分詞(ws)、詞性標(biāo)注(pos)、命名實(shí)體識(shí)別(ner)、依存句法分析(dp)等;Format表示已何種形式返回分析后的結(jié)果。為了便于參數(shù)的填寫,根據(jù)圖3.2每個(gè)屬性的枚舉值,設(shè)置一個(gè)名為HttpParams的參數(shù)類,該類含有2個(gè)子參數(shù)類,分為名為Pattern,F(xiàn)ormat。它們含有一些字符串常量,它們對(duì)應(yīng)表中的具體枚舉值。Parse類中最重要的方法是一個(gè)名為Analyze的方法,該方法接收一個(gè)字符串,然后根據(jù)前面的屬性和LTP通信完成Pattern模式指定的分析。圖3.2LTPAPI調(diào)用參數(shù)說明Analyze函數(shù)原型為:publicstringAnalyze(stringtext)。傳入?yún)?shù)text代表要進(jìn)行詞性標(biāo)注的句子;返回值以字符串形式表示。本系統(tǒng)中為了處理的一致性,對(duì)Parse的Format參數(shù)采用的是xml,即以xml格式返回詞性標(biāo)注后的句子。Analyze的實(shí)現(xiàn)代碼下:public
string
Analyze(string
text)
{
string
results
=
"";
string
httpParameter
=string.Format("{0}?api_key={1}&text={2}&pattern={3}&format={4}",HttpUrl,UserKey,
text,Pattern,Format);
HttpWebRequest
request
=
WebRequest.Create(httpParameter)
as
HttpWebRequest;
try
{
request.AllowAutoRedirect
=
true;
request.Method
=
"GET";
reuest.ContentType
=
"application/x-www-form-urlencoded"HttpWebResponse
response
=
request.GetResponse()
as
HttpWebResponse;
StreamRaer
resultStream
=
new
StreamReader(response.GetResponseStream(),
Encoding.UTF8);
results=
resultStream.ReadToEnd();
}
catch(Exception
e)
{
Console.WriteLine("Http
Request
Error:
"+e.ToString());
}
return
results;
}下面將描述如何用C#編程語(yǔ)言完成WebAPI的調(diào)用。C#編程語(yǔ)言內(nèi)置了一個(gè)名為HttpWebRequest的類,它是.Net中對(duì)Http協(xié)議的具體實(shí)現(xiàn)。該類提供了一個(gè)靜態(tài)類方法Create,接受一個(gè)URL字符串參數(shù)。該方法返回一個(gè)用指定URL參數(shù)創(chuàng)建的HttPWebRequest實(shí)例。獲取到HttpWebRequest實(shí)例后就能用它的成員函數(shù)GetResponse,該方法從構(gòu)建HttpWebRequest中的URL指定的服務(wù)器獲取到分析結(jié)果。GetResponse方法返回值類型為HttpWebResponse,可從這個(gè)類型中將返回的具體分析結(jié)果以流的方式獲取到,然后將這種流用StreamReader包裝成文件流的形式,就可以像文件一樣操作返回的詞性標(biāo)注結(jié)果。下面的XML是調(diào)用LTP平臺(tái)進(jìn)行詞性標(biāo)注后的結(jié)果展示。<?xml
version="1.0"
encoding="utf-8"?>
<xml4nlp>
<note
sent="y"
word="y"
pos="y"
ne="n"
parser="n"
semparser="n"
lstmsemparser="n"
wsd="n"
srl="n"
/>
<doc>
<para
id="0">
<sent
id="0"
cont="張明剛才去哪兒了?">
<word
id="0"
cont="張明"
pos="nh"
/>
<word
id="1"
cont="剛才"
pos="nt"
/>
<word
id="2"
cont="去"
pos="v"
/>
<word
id="3"
cont="哪兒"
pos="r"
/>
<word
id="4"
cont="了"
pos="u"
/>
<word
id="5"
cont="?"
pos="wp"
/>
</sent>
</para>
</doc>
</xml4nlp>
LTP詞性標(biāo)注結(jié)果的格式中為每一段話創(chuàng)建一個(gè)para節(jié)點(diǎn),然后為para對(duì)應(yīng)段中每句話創(chuàng)建一個(gè)sent節(jié)點(diǎn),最后再為sent節(jié)點(diǎn)中每個(gè)詞用word標(biāo)簽標(biāo)簽,對(duì)應(yīng)的pos屬性為該詞的詞性標(biāo)簽,id屬性表明了這個(gè)詞在該句中的位置,cont屬性用于指示這個(gè)詞的內(nèi)容。更多具體的格式表示請(qǐng)參考LTP官方網(wǎng)站的結(jié)果表示詳細(xì)說明。知識(shí)庫(kù)生成模塊將詞性標(biāo)注部分封裝成模塊后,下一步就就可以利用該模塊對(duì)所有的目標(biāo)語(yǔ)句進(jìn)行詞性標(biāo)簽并根據(jù)詞性標(biāo)簽的結(jié)果生成模板。知識(shí)庫(kù)生成模塊主要包括兩大功能即從無(wú)到有生成一個(gè)知識(shí)庫(kù)和對(duì)已有的知識(shí)庫(kù)利用新語(yǔ)料進(jìn)行更新。這兩大模塊都要共用的功能是語(yǔ)句模板生成、問題和答案關(guān)聯(lián)特征提取、知識(shí)庫(kù)節(jié)點(diǎn)生成。為了更好的復(fù)用代碼故先實(shí)現(xiàn)這3個(gè)公共函數(shù)。語(yǔ)句模板生成函數(shù)負(fù)責(zé)的主要任務(wù)就是對(duì)利用前面2.2.2節(jié)語(yǔ)句特征選取策略完成該語(yǔ)句的的模板生成。由其提供的功能可以設(shè)計(jì)如下的函數(shù)原型:stringGetPattern(stringxmlSeg)。其中參數(shù)xmlSeg是以XML格式表示的句子詞性標(biāo)注結(jié)果,XML格式的詞性標(biāo)注結(jié)果見3.4.1節(jié)中XML結(jié)果表示。該函數(shù)返回結(jié)果為以字符串形式存儲(chǔ)的模板向量,每個(gè)向量分量之間用空格分割。考慮到在實(shí)際生成模板的過程中我們丟棄了很多沒有實(shí)際意義的虛詞,生成的模板向量中,每個(gè)詞性標(biāo)簽符號(hào)并不是與原句子中每個(gè)詞的位置一一對(duì)應(yīng),因此我們需要添加額外的位置信息,即返回的模板向量中每個(gè)詞性標(biāo)簽前面還有一個(gè)ID,表明了該詞性標(biāo)簽在原句子中對(duì)應(yīng)的位置,這個(gè)ID值來(lái)自于XML格式詞性標(biāo)注中的id屬性。根據(jù)上面方法的描述,具體的實(shí)現(xiàn)就是首先對(duì)XML格式的詞性標(biāo)注結(jié)果中,依次遍歷所有的word結(jié)點(diǎn),然后查看該word節(jié)點(diǎn)的pos屬性值是否在2.2.2節(jié)給出的忽略詞性集I中,如果不是,則將這個(gè)word節(jié)點(diǎn)的id屬性值和pos屬性值添加到返回結(jié)果串的末尾,id和pos之間用逗號(hào)分隔。GetPattern的具體實(shí)現(xiàn)代碼如下。
public
string
GetPattern(string
xmlSeg)
{
StringBuilder
sb
=
new
StringBuilder()
;
try
{
XDocument
xdoc
=
XDocument.Parse(xmlSeg);
foreach
(XElement
xele
in
xdoc.Descendants("word"))
{
if
(!_funcitonWord.Contains(xele.Attribute("pos").Value))
sb.AppendFormat("{0},{1}
",
xele.Attribute("id").Value,
xele.Attribute("pos").Value);
}
}
catch
{
StackTrace
st
=
new
StackTrace(new
StackFrame(true));
new
Exception(string.Format("Error
in
{0}
Load
xml
segment",st.ToString()));
}
return
sb.ToString();
}
調(diào)用詞性標(biāo)簽?zāi)K和模板生成函數(shù)后我們能夠得到問題、答案和語(yǔ)料庫(kù)中句子的模板向量。現(xiàn)在系統(tǒng)已經(jīng)能從具體的句子抽象到“類”的層次了,但是系統(tǒng)還不能將“類”的信息匹配具體的實(shí)例上。所以,下一步的任務(wù)就是具體的[問題,答案]關(guān)聯(lián)特征提取。利用2.3節(jié)中介紹的問題與答案關(guān)聯(lián)特征提取方法,采取的策略就是利用一個(gè)兩重循環(huán),外循環(huán)為問題模板向量中的詞性標(biāo)簽,內(nèi)循環(huán)為答案模板的詞性標(biāo)簽。當(dāng)答案模板中詞性標(biāo)簽和問題模板中的詞性標(biāo)簽相同時(shí),再查看他們對(duì)應(yīng)的詞是否也相同,如果相同,則將這個(gè)詞性標(biāo)簽的在問題模板向量和答案模板向量中的位置記錄下來(lái)。根據(jù)這個(gè)思路關(guān)聯(lián)特征提取函數(shù)的原型可以設(shè)計(jì)為:List<Tuple<string,string,int,int>>LearnFeatures(stringposQuestionXml,stringposAnswerXml)。參數(shù)posQuestionXml為經(jīng)過詞性標(biāo)注后的問題語(yǔ)句;posAnswerXml為經(jīng)過詞性標(biāo)注后的答案語(yǔ)句。返回值為四元組集合。其中四元組中各項(xiàng)的含義為:第一項(xiàng)為詞性標(biāo)簽,第二項(xiàng)為該詞性標(biāo)簽在句子對(duì)應(yīng)的具體詞,第三項(xiàng)為該詞性標(biāo)簽在問題語(yǔ)句中的索引,第四項(xiàng)為該詞性標(biāo)簽在答案語(yǔ)句中的索引。下一步就是利用學(xué)到的答案模板去語(yǔ)料中找符合該模板的語(yǔ)句,然后將符合模板的部分截取出來(lái),再利用學(xué)到的問題和答案關(guān)聯(lián)特征去整理這些語(yǔ)句。這一步中的難點(diǎn)主要集中于在詞性標(biāo)注后的語(yǔ)句中找到和答案模板相匹配的部分并把他們截取出來(lái)。為了是問題簡(jiǎn)單化,這里把詞性模板向量去掉ID部分,只保留詞性標(biāo)簽部分。這樣就可以利用串匹配方法在語(yǔ)句模板向量中檢索答案模板向量子串。當(dāng)查到句子模板向量中含有答案模板向量時(shí),我們?cè)僦v句子中對(duì)應(yīng)答案模板向量中詞性標(biāo)簽的的這些位置提取出來(lái),方便下一步處理這些位置的具體詞。函數(shù)原型如下:string[]LocateAnswerPattern(stringposSenXml,stringanswerPattern)。參數(shù)PosSenXml為語(yǔ)料庫(kù)中經(jīng)過詞性標(biāo)注后的一句話;answerPattern為消除ID屬性后的答案模板向量;返回值為字符串?dāng)?shù)組,每個(gè)字符串包含ID和詞性標(biāo)簽兩種信息,這兩種信息描述了該句中哪些位置的詞性標(biāo)簽對(duì)應(yīng)答案模板向量的詞項(xiàng)標(biāo)簽。最后一步就是整理這些符合答案模板向量的句子,然后將它們寫入知識(shí)庫(kù)。在寫入之前首先要將每條語(yǔ)句進(jìn)行整理,轉(zhuǎn)變?yōu)閄ML結(jié)點(diǎn)。FillDetailNode函數(shù)用來(lái)處理將整理好的句子轉(zhuǎn)變?yōu)閄ML結(jié)點(diǎn)。它將一條整理好后的語(yǔ)句轉(zhuǎn)變?yōu)橐粋€(gè)answerDetail節(jié)點(diǎn)。循環(huán)調(diào)用它,就可以對(duì)一類問題的所有語(yǔ)料信息轉(zhuǎn)變answerDetail結(jié)點(diǎn)。FillDetailNode函數(shù)原型如下:XmlElementFillDetailNode(XmlDocumentxdoc,List<Tuple<string,string>>attributes,stringexactAnswer)。參數(shù)xdoc是因?yàn)镃#要子節(jié)點(diǎn)和父節(jié)點(diǎn)必須出自相同的上下文,因此xdoc表示了知識(shí)庫(kù)的文檔節(jié)點(diǎn);attributes表示了answerDetail節(jié)點(diǎn)的所有屬性集合;exactAnswer是answerDetail子節(jié)點(diǎn)answer的具體內(nèi)容。Attributes集合中每個(gè)元組的第一項(xiàng)為屬性名,第二項(xiàng)為具體的詞,這些屬性值根據(jù)問題--答案關(guān)聯(lián)特征和語(yǔ)料庫(kù)中句子的具體詞得到。FillDetailNode函數(shù)已經(jīng)完成,現(xiàn)在只需要對(duì)每一類的問題,生成答案模板向量,然后利用模板向量去語(yǔ)料庫(kù)中抓取所有符合這個(gè)模板的語(yǔ)料,整理這些語(yǔ)料。下面用AddNewPattern函數(shù)來(lái)處理這些任務(wù)。AddNewPattern的任務(wù)就是調(diào)用前面已經(jīng)寫好的函數(shù),然后由新來(lái)的[問題,答案]利用語(yǔ)料庫(kù)生成這一類問題的對(duì)話知識(shí)庫(kù)庫(kù)。AddNewPattern函數(shù)主要代碼實(shí)現(xiàn)如下:public
int
AddNewPattern(FileInfo
file,
string
questionPOS,string
answerPOS,string
exactAnswerPOS)
{
XmlDocument
xdoc=new
XmlDocument();
xdoc.Load(_knowledgeBasePath);
//獲取模板并消除模板中的ID信息
string
questionPattern=EliminatePatternID(GetPattern(questionPOS));
string
answerPattern=EliminatePatternID(GetPattern(answerPOS));
string
exactAnswerPattern=EliminatePatternID(GetPattern(exactAnswerPOS));
//獲取問題和答案關(guān)聯(lián)特征
List<Tuple<string,
string,
int,
int>>
features
=
LearnFeatures(questionPOS,answerPOS);
StringBuilder
sb
=
new
StringBuilder();
//準(zhǔn)備knowledge節(jié)點(diǎn)的屬性信息
int[]
answerFeatureIndexes
=
new
int[features.Count];
for(int
i=0;i<features.Count;i++)
{
sb.Append(features[i].Item3.ToString()+"
");
answerFeatureIndexes[i]
=
features[i].Item4;
}
string
quesFeatureIndexes
=
sb.ToString();
int[]
exactAnswerIndexes
=
ExactAnswerPos(answerPOS,
exactAnswerPOS);
//填充knowledge節(jié)點(diǎn)屬性
XmlElement
xele
=
xdoc.CreateElement("knowledge");
xele.SetAttribute("questionPattern",questionPattern);
xele.SetAttribute("questionFearture",quesFeatureIndexes.Trim());
xele.SetAttribute("answerPattern",answerPattern);
xele.SetAttribute("answerFeature",strAswerFeaIndexes);
xele.SetAttribute("exactAnswerPosition",
strExactAnswerIndexes);
//獲取語(yǔ)料庫(kù)中所有符合答案模板的語(yǔ)句
List<string>
targetSents=
Extractor.ExtractSentence(file,answerPattern);
XmlElement
quesDetail;
//對(duì)符合答案模板的語(yǔ)料信息進(jìn)行整理并裝填為answerDetail結(jié)點(diǎn)
foreach
(string
sent
in
targetSents)
{
string[]
splitedPattern=
LocateAnswerPattern(sent,answerPattern);
List<Tuple<string,
string>>
exactAnswerTuple
=
ExtractFeature(sent,splitedPattern,exactAnswerIndexes);
quesDetail
=
FillDetailNode(xdoc,ExtractFeature(sent,splitedPattern,answerFeatureIndexes),sb.ToString());
xele.AppendChild(quesDetail);
}
xdoc.DocumentElement.AppendChild(xele);
xdoc.Save(_knowledgeBasePath);
return
targetSents;
}
AddNewPattern的參數(shù)依次為語(yǔ)料庫(kù)文件路徑,詞性標(biāo)注后的問題,詞性標(biāo)注后答案,詞性標(biāo)注的精確答案。它的主要邏輯過程如下:用C#的XDocument類加載已有的知識(shí)庫(kù)。將EliminatePatternID函數(shù)去除參數(shù)中詞性標(biāo)ID信息去掉以便進(jìn)行模板向量串匹配。用LearnFeatures函數(shù)提取關(guān)聯(lián)特征。從提取到的關(guān)聯(lián)特征中獲取它們的索引值。用ExactAnswer函數(shù)獲取精確答案的索引值。用XElement的SetAttribute方法填充knowledge節(jié)點(diǎn)屬性。用ExtracSentence方法提取出指定文件中所有符合答案模板的目標(biāo)語(yǔ)句。對(duì)提取來(lái)的每條目標(biāo)語(yǔ)句調(diào)用LocateAnswerPattern方法,獲取答案模板所在具體內(nèi)容;調(diào)用ExactFeature方法或關(guān)聯(lián)特征具體詞;調(diào)用FillDetailNode方法生成這天語(yǔ)句對(duì)用的answerDetail節(jié)點(diǎn),并將生成的節(jié)點(diǎn)添加到父節(jié)點(diǎn)中。保存新生成的知識(shí)庫(kù)。知識(shí)庫(kù)檢索模塊知識(shí)庫(kù)檢索模塊對(duì)生成的知識(shí)庫(kù)進(jìn)行檢索。因?yàn)橹R(shí)庫(kù)是結(jié)構(gòu)化的,且W3C指定了XPath標(biāo)準(zhǔn),故可以很方面的對(duì)知識(shí)庫(kù)進(jìn)行檢索。知識(shí)庫(kù)結(jié)點(diǎn)中帶有問題模板的描述信息,故對(duì)于給定的問題,按照2.2.2中指定的方法進(jìn)行問題模板生成,然后利用這個(gè)模板去知識(shí)庫(kù)中和每個(gè)knowledge結(jié)點(diǎn)的questionPattern匹配,如果匹配到了這這個(gè)結(jié)點(diǎn)對(duì)應(yīng)的內(nèi)容即為這個(gè)問題的的答案知識(shí)庫(kù),然后利用問題和答案關(guān)聯(lián)特征,在這個(gè)知識(shí)庫(kù)中找到這個(gè)問題對(duì)應(yīng)的答案。檢索的結(jié)果由以下三種:這類問題還沒有學(xué)習(xí)過,即知識(shí)庫(kù)中不存在這類問題的模板。這類問題已經(jīng)有學(xué)習(xí)過,但缺乏這個(gè)問題的具體答案。這類問題已經(jīng)學(xué)習(xí)過,并且語(yǔ)料庫(kù)中也有這個(gè)問題的答案。用GetAnswer方法來(lái)進(jìn)行語(yǔ)料庫(kù)的檢索,GetAnswer方法的原型如下:stringGetAnswer(stringquestion)。參數(shù)為具體的問題,返回值為知識(shí)庫(kù)檢索結(jié)果。根據(jù)前面的分析,返回結(jié)果有三種,分別是空串、“語(yǔ)料信息不足,無(wú)法回答該問題”、知識(shí)庫(kù)中answer結(jié)點(diǎn)的內(nèi)容。這三種返回結(jié)果分別對(duì)應(yīng)了上面的三種情況。GetAnswer的關(guān)鍵部分實(shí)現(xiàn)代碼如下://加載知識(shí)庫(kù)
XDocument
knowledgeBase
=
XDocument.Load(_knowledgeBasePath);
//獲取問題模板向量
string
patternWithoutID
=
EliminatePatternID(questionPattern);
//獲取所有的knowledge節(jié)點(diǎn)
XElement
knowledge
=
knowledgeBase.Descendants("knowledge").Where(ele
=>ele.Attributes("questionPattern").Value
==patternWithoutID).FirstOrDefault();
bool
isRightNode
=
true;
if
(knowledge!=null)
{
//獲取區(qū)分不同問題的特征下標(biāo)
string
[]quesFeatureIndexes
=
knowledge.Attribute("questionFearture").Value.Split('
');
foreach(XElement
answerDetail
in
knowledge.Descendants("answerDetail"))
{
isRightNode
=
true;
foreach(var
str
in
quesFeatureIndexes)
{
string
quesCont
=
questionDoc.Descendants("word").Where(ele
=>ele.Attribute("id").Value
==
wordIDs[Convert.ToInt32(str)].ToString()).FirstOrDefault().Attribute("cont").Value;
string
knowledgeCont
=
answerDetail.Attribute([Convert.ToInt32(str)]).Value;
if
(quesCont
!=
knowledgeCont)
{
isRightNode
=
false;
break;
}
}
if
(isRightNode)
{
answer
=
answerDetail.Descendants("answer").FirstOrDefault().Value;
break;
}
}
if
(!isRightNode)
answer
=
"語(yǔ)料信息不足,無(wú)法回答該問題";
}
GetAnswer方法的主要邏輯過程如下:用C#XDocument類從磁盤上加載知識(shí)庫(kù)。用GetPattern方法獲取傳入問題的模板向量。用EliminatePatternID方法去除問題模板向量中的ID信息。從XML知識(shí)庫(kù)檢索是否有這個(gè)3)中問題模板向量對(duì)應(yīng)的knowledge節(jié)點(diǎn)。若沒有直接將返回值置空串并結(jié)束檢索。若知識(shí)庫(kù)中含有對(duì)應(yīng)的knowledge節(jié)點(diǎn)則轉(zhuǎn)5)。對(duì)這個(gè)knowledge節(jié)點(diǎn)下的所有answerDetail節(jié)點(diǎn)依次遍歷。若當(dāng)前遍歷的節(jié)點(diǎn)是對(duì)應(yīng)問題的答案節(jié)點(diǎn),將返回值置answerDetail子節(jié)點(diǎn)answer的文本值,并將是否檢索到正確答案的標(biāo)記isRightNode置true。根據(jù)isRightNode人機(jī)交互模塊本系統(tǒng)中人機(jī)交互模塊由C#的WPF圖形化界面完成。人機(jī)交互模塊整體上由四部分組成,從上到下分別是窗口標(biāo)題欄,對(duì)話內(nèi)容顯示面板,用戶輸入?yún)^(qū),消息按鈕欄。對(duì)話內(nèi)容顯示區(qū)和用戶消息輸入?yún)^(qū)。對(duì)話內(nèi)容顯示面板上有一些初始化的語(yǔ)句。界面中的按鈕分別綁定了對(duì)應(yīng)的事件,比如右上角的“X”按鈕綁定應(yīng)窗口關(guān)閉。本界面中最重要的按鈕是發(fā)送按鈕,當(dāng)發(fā)送按鈕按下后,對(duì)話內(nèi)容要顯示用戶輸入的內(nèi)容,同時(shí)要采用異步的方式對(duì)輸入問題進(jìn)行檢索,檢索過程中不允許用戶再次發(fā)送消息?;蛘吒鶕?jù)用戶輸入完畢的新問題類型嘗試構(gòu)建知識(shí)庫(kù)。發(fā)送按鈕事件綁定的主要代碼如下:private
void
button2_Click(object
sender,
RoutedEventArgs
e)
{
if
(textBox.Text
!=
string.Empty)
{
switch
(sessionState)
{
case
SessionState.WaitQuestion:
question
=
textBox.Text;
stackPanel.Children.Add(CreateLabel(textBox.Text,
true));
Task.Factory.StartNew(AsynRetrivalAnswer);
button2.IsEnabled
=
false;
button2.Background
=
new
SolidColorBrush(Color.FromRgb(109,
109,
109));
br
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學(xué)數(shù)字媒體技術(shù)(多媒體技術(shù))試題及答案
- 2025年大學(xué)動(dòng)物科學(xué)(飼料配方)試題及答案
- 2026年裝修工藝(墻面裝修技術(shù))試題及答案
- 2025年中職建筑材料(建筑材料檢測(cè))試題及答案
- 2025年中職老年人服務(wù)與管理(心理慰藉)試題及答案
- 禁毒安全班會(huì)課件
- 煙臺(tái)消防安全整治工程
- 電氣安全隱患排查整改標(biāo)準(zhǔn)對(duì)照表排查電氣隱患請(qǐng)對(duì)照標(biāo)準(zhǔn)逐一排查
- 神奇基因介紹
- 2026中國(guó)武夷實(shí)業(yè)股份有限公司國(guó)際事業(yè)部招聘1人備考題庫(kù)帶答案詳解
- 水利工程施工監(jiān)理規(guī)范(SL288-2014)用表填表說明及示例
- IATF16949-質(zhì)量手冊(cè)(過程方法無(wú)刪減版)
- 妊娠合并膽汁淤積綜合征
- 河南省安陽(yáng)市滑縣2024-2025學(xué)年高二數(shù)學(xué)上學(xué)期期末考試試題文
- 新疆維吾爾自治區(qū)普通高校學(xué)生轉(zhuǎn)學(xué)申請(qǐng)(備案)表
- 內(nèi)鏡中心年終總結(jié)
- 園林苗木容器育苗技術(shù)
- 陜西省2023-2024學(xué)年高一上學(xué)期新高考解讀及選科簡(jiǎn)單指導(dǎo)(家長(zhǎng)版)課件
- 兒科學(xué)熱性驚厥課件
- 《高職應(yīng)用數(shù)學(xué)》(教案)
- 漢堡規(guī)則中英文
評(píng)論
0/150
提交評(píng)論