焦自程
(西藏大學(xué) 西藏 拉薩 850000)
本文將問(wèn)答功能視作系統(tǒng)的核心功能,以四大名著為數(shù)據(jù)基礎(chǔ),并將數(shù)據(jù)以知識(shí)圖譜的形式展現(xiàn)出來(lái),體現(xiàn)數(shù)據(jù)的可視化操作。該知識(shí)圖譜以四大名著中的人物為基礎(chǔ),通過(guò)收集大量關(guān)于四大名著的人物數(shù)據(jù),將各名著人物之間進(jìn)行關(guān)聯(lián),具體功能有:登錄注冊(cè)功能、查詢功能、問(wèn)答功能、人物關(guān)系修改功能、前端知識(shí)圖譜展示功能、問(wèn)答記錄功能。用戶初始需要進(jìn)行登錄,這需要用戶輸入個(gè)人信息,當(dāng)用戶注冊(cè)成功后,用戶輸入已注冊(cè)好的賬號(hào)密碼即可登錄成功。登錄成功后用戶可以直接看到該知識(shí)圖譜中含有的人物關(guān)系數(shù)量、實(shí)體數(shù)量、人物簡(jiǎn)介數(shù)量,還展示了目前數(shù)據(jù)中四大名著各自的占比為多少。查詢功能為:用戶可以直接搜尋某個(gè)人物,系統(tǒng)會(huì)顯示該人物的簡(jiǎn)介,以及與該人物有關(guān)的人物關(guān)系。問(wèn)答功能為:用戶可直接查詢某些與四大名著有關(guān)的問(wèn)題,如:“孫悟空和唐僧的關(guān)系是什么?”,系統(tǒng)會(huì)查找孫悟空與唐僧的數(shù)據(jù),提取出關(guān)鍵詞“關(guān)系”,將數(shù)據(jù)中孫悟空與唐僧的關(guān)系輸出,即可得到自己的答案。問(wèn)答記錄為:顯示用戶所查找的問(wèn)題,避免用戶重復(fù)搜索一個(gè)問(wèn)題。人物關(guān)系修改為:用戶可搜索兩個(gè)人物之間的關(guān)系,然后進(jìn)行修改,最終數(shù)據(jù)以自己修改后的為準(zhǔn)。其中問(wèn)答功能為重中之重,以正向最大匹配算法為實(shí)現(xiàn)基礎(chǔ),將用戶想要詢問(wèn)的句子中的詞分割,之后將分割好的詞與用戶提前導(dǎo)入的詞庫(kù)組匹配,找到相應(yīng)的詞匯即會(huì)輸出相對(duì)應(yīng)的答案。該算法在原本基礎(chǔ)上添加同義詞,對(duì)于同義不同命的詞系統(tǒng)會(huì)看作同一個(gè)詞,減輕了系統(tǒng)需要添加的詞匯量,并提高了系統(tǒng)的成功率與可行性。
知識(shí)圖譜最早是谷歌開始使用,隨后在教育、交通、醫(yī)療、金融等各個(gè)領(lǐng)域開始大規(guī)模應(yīng)用,知識(shí)圖譜技術(shù)已經(jīng)發(fā)展的較為成熟,應(yīng)用于各種領(lǐng)域之中[1]。而如今科技飛速發(fā)展,有越來(lái)越多的人開始遺忘中國(guó)古代傳統(tǒng)文化,其中就包含四大名著。四大名著是中國(guó)傳統(tǒng)文化的重要組成部分,它包含了一些中國(guó)特別的元素,它也教導(dǎo)我們一些重要的道理,因此加強(qiáng)四大名著的學(xué)習(xí)就顯得格外重要。本項(xiàng)目以四大名著為數(shù)據(jù)基礎(chǔ)進(jìn)行知識(shí)圖譜的構(gòu)建,該項(xiàng)目有助于將我們的傳統(tǒng)文化,推廣到國(guó)外愛(ài)好中國(guó)文化的人之中,讓世界的人都認(rèn)識(shí)到中國(guó)傳統(tǒng)文化的獨(dú)特以及中華文學(xué)的深厚。
四大名著知識(shí)圖譜系統(tǒng)軟件總共有4 大子模塊,他們分別是:登錄注冊(cè)模塊、知識(shí)圖譜數(shù)據(jù)展示模塊、人物查詢模塊、問(wèn)題回答與問(wèn)題記錄模塊。登錄注冊(cè)模塊體現(xiàn)為:用戶初次登錄需進(jìn)行注冊(cè),輸入自己的個(gè)人信息,登錄時(shí)填寫好自己的賬號(hào)密碼登錄即可。四大名著知識(shí)圖譜系統(tǒng)軟件通過(guò)前端知識(shí)圖譜展示四大名著中人物,有各自數(shù)據(jù)占比、人物數(shù)據(jù)與人物關(guān)系數(shù)據(jù)[2]。人物查詢模塊為:用戶可以直接查詢自己想要了解的人物,進(jìn)入人物查詢模塊即可直接輸入人物,之后系統(tǒng)會(huì)輸出關(guān)于該人物有關(guān)的數(shù)據(jù)。問(wèn)答模塊主要為:對(duì)用戶提出的問(wèn)題利用正向最大匹配算法進(jìn)行分詞查詢,利用詞典里的數(shù)據(jù)進(jìn)行逐步比較查詢,當(dāng)輸入的語(yǔ)句中分離的詞語(yǔ)能在詞典中找到時(shí),即可輸出答案[3]。而用戶利用問(wèn)答記錄能顯示用戶查詢的所有問(wèn)題,節(jié)省用戶時(shí)間。系統(tǒng)總的流程圖見圖1。
當(dāng)系統(tǒng)程序初始化之后,系統(tǒng)根據(jù)用戶需求進(jìn)入登錄界面,開始展現(xiàn)登錄頁(yè)面,用戶初次登錄需進(jìn)行注冊(cè),注冊(cè)需填寫自己的個(gè)人信息,待注冊(cè)好之后下次可直接登錄無(wú)需重新注冊(cè)。進(jìn)入知識(shí)圖譜用戶可直接看到關(guān)于四大名著中人物數(shù)據(jù),每個(gè)名著的人物占比、人物關(guān)系數(shù)據(jù)、人物簡(jiǎn)介數(shù)據(jù),知識(shí)圖譜可一目了然地顯示這些數(shù)據(jù)。之后用戶如果要查詢,又可分為查詢?nèi)宋锱c問(wèn)題兩模塊。當(dāng)用戶想要查詢某個(gè)人物時(shí),可直接在查詢?nèi)宋锢镙斎胱约合氩檎业娜宋?,該人物的?jiǎn)介和一些經(jīng)典視頻就會(huì)出現(xiàn);當(dāng)用戶想查詢問(wèn)題時(shí),例如人物之間的關(guān)系,此時(shí)在查詢問(wèn)題里即可顯示。用戶的問(wèn)題都可在記錄里查找到,避免用戶重復(fù)查詢一個(gè)問(wèn)題。用戶想要修改一些數(shù)據(jù)例如人物關(guān)系時(shí),用戶可在修改里找到自己想要修改的關(guān)系,然后進(jìn)行修改。
當(dāng)用戶對(duì)于四大名著中的人物有一些問(wèn)題時(shí),這時(shí)就需要系統(tǒng)具備問(wèn)答功能以解決用戶簡(jiǎn)單的問(wèn)題。問(wèn)答功能的實(shí)現(xiàn)必須依賴一定的算法,其中涉及處理句子的分詞等功能,最關(guān)鍵的是能通過(guò)對(duì)句子的操作來(lái)找到該句子在詞庫(kù)中最相似的問(wèn)題與答案[4]。而當(dāng)用戶想查詢的句子中涉及多個(gè)詞匯時(shí)就需要思考如何操作才能滿足多個(gè)詞匯均可適合的答案。在眾多算法中,正向最大匹配算法可以找到用戶想查詢的語(yǔ)句在詞庫(kù)中的詞匯[5],隨后根據(jù)詞匯的詞性做出正確的選擇。
正向最大匹配算法通過(guò)分詞,將一個(gè)完整的句子分為若干個(gè)單字詞,按照原語(yǔ)句的順序,從第一個(gè)字開始搜查是否在詞庫(kù)中,無(wú)論是否找到都需要繼續(xù)向右查詢,直到從句首查找到句尾,并記錄最后一次可以在詞庫(kù)中查詢的結(jié)果,視作該詞可以在詞庫(kù)中找到,若從句首開始查詢無(wú)法在句子中找到詞匯,則從下一個(gè)字開始查詢;當(dāng)找到詞匯時(shí),下次查詢?cè)~時(shí)要去掉上次已經(jīng)查詢過(guò)的詞[6],隨后繼續(xù)從新句子的句首開始查詢,循環(huán)如此。最終可以找到一個(gè)句子中有幾個(gè)詞是可以被查詢到的,并根據(jù)詞匯占比將得到詞匯對(duì)應(yīng)的句子輸出[7]。
表1 詞匯占比及其相關(guān)性
一個(gè)完整的句子是由許許多多的詞組成,要進(jìn)行算法的第1 步便是對(duì)句子進(jìn)行拆分詞,將一個(gè)句子的所有字都拆分為單獨(dú)的詞[8]。這里以“計(jì)算機(jī)課程十分有趣”為例,對(duì)句子進(jìn)行正向最大匹配算法,分詞后的結(jié)果為sentence1={“計(jì)”,“算”,“機(jī)”,“課”,“程”,“十”,“分”,“有”,“趣”}。
在詞典終提前導(dǎo)入以下對(duì)應(yīng)的詞匯words={“計(jì)算”,“計(jì)算機(jī)”,“課程”,“有趣”},隨后將sentence1={“計(jì)”,“算”,“機(jī)”,“課”,“程”,“十”,“分”,“有”,“趣”}中的詞按照在句子中的順序進(jìn)行查找,從“計(jì)”詞開始,按照“計(jì)”→“計(jì)算”→“計(jì)算機(jī)”→“計(jì)算機(jī)課”→“計(jì)算機(jī)課程”的順序,而“計(jì)算機(jī)課程”為以“計(jì)”為句首找到的最長(zhǎng)的詞,從“計(jì)算機(jī)課程十”到“計(jì)算機(jī)課程十分有趣”為過(guò)渡的詞均無(wú)法在詞庫(kù)words 中找到,最終可找到以“計(jì)”為句首的詞為“計(jì)算機(jī)課程”,將原句子中的“計(jì)算機(jī)課程”剔除之后的句子為“十分有趣”;隨后在詞典中查找以“十”為句首的詞,從“十”→“十分”→“十分有”→“十分有趣”在詞庫(kù)中均無(wú)法找到,因此,將“十”剔除;查找以“分”為句首的詞,從“分”→“分有”→“分有趣”中均無(wú)法找到以“分”為句首的詞,因此繼續(xù)將位置后移,將“分”在句子中剔除,保留句子為“有趣”;在詞典中查找以“有”為句首的詞,“有”→“有趣”,“有趣”可在詞庫(kù)中找到。通過(guò)以上步驟,最終得到詞匯“計(jì)算機(jī)課程”和“有趣”[9]。
通過(guò)分詞和正向最大匹配算法,找到能在詞庫(kù)中對(duì)應(yīng)句子的詞匯“計(jì)算機(jī)課程”和“有趣”,因?yàn)檫@里“計(jì)算機(jī)課程”與“有趣”在句子“計(jì)算機(jī)課程十分有趣”中的詞匯占比為0.78,這里系統(tǒng)會(huì)將最長(zhǎng)詞匯“計(jì)算機(jī)課程”在詞庫(kù)中對(duì)應(yīng)的語(yǔ)句輸出,實(shí)現(xiàn)初步問(wèn)答的功能。
當(dāng)前已實(shí)現(xiàn)初步的問(wèn)答功能,但僅僅只能實(shí)現(xiàn)單一詞匯的識(shí)別,對(duì)于同義不同名的詞將會(huì)識(shí)別為不同詞,為了提高系統(tǒng)的靈活性,該系統(tǒng)添加同義詞詞典,將不同名稱的詞但含義相同的詞識(shí)別為一類詞,例如“西紅柿”和“番茄”為同一種蔬菜,但只是不同的名稱而已[10-11]。
我們將該正向最大匹配算法應(yīng)用到問(wèn)答系統(tǒng)中,具體的思想為:提前在數(shù)據(jù)庫(kù)中導(dǎo)入需要的數(shù)據(jù),然后將用戶輸入的問(wèn)題進(jìn)行正向最大匹配算法的處理,得到最終的詞匯,根據(jù)詞匯占比將詞匯對(duì)應(yīng)的匹配語(yǔ)句進(jìn)行輸出,實(shí)現(xiàn)問(wèn)答功能[12]。
首先,該問(wèn)答系統(tǒng)需要提前存儲(chǔ)相關(guān)的數(shù)據(jù),這是保證問(wèn)答功能實(shí)現(xiàn)的前提條件。然后將用戶想要詢問(wèn)的問(wèn)題輸入在搜索框里,隨后通過(guò)正向最大匹配算法對(duì)用戶輸入的問(wèn)題進(jìn)行處理,得到在系統(tǒng)中提前導(dǎo)入的詞匯,將系統(tǒng)中詞匯對(duì)應(yīng)的語(yǔ)句進(jìn)行輸出,實(shí)現(xiàn)問(wèn)答功能[13]。最后要注意做好需要咨詢的數(shù)據(jù)不在數(shù)據(jù)庫(kù)里的準(zhǔn)備。存儲(chǔ)數(shù)據(jù)的有限性使得我們不會(huì)總能夠查找到相關(guān)數(shù)據(jù)。當(dāng)我們需要查找的數(shù)據(jù)的詞語(yǔ)占比低于0.4 時(shí),這時(shí)需要查找該方面的數(shù)據(jù)將其導(dǎo)入,將數(shù)據(jù)再導(dǎo)入數(shù)據(jù)庫(kù)中進(jìn)行完善。
總結(jié)流程:(1)將用戶輸入的問(wèn)題進(jìn)行正向最大匹配算法處理;(2)若最終得到的詞匯占比大于0.8,直接將詞匯對(duì)應(yīng)的語(yǔ)句輸出;(3)若詞匯占比小于0.8 大于0.4,則將最長(zhǎng)詞匯進(jìn)行輸出;(4)若詞匯占比小于0.4,則查詢相關(guān)數(shù)據(jù),將數(shù)據(jù)到的新數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù),并將其輸出。
在該實(shí)驗(yàn)中,以“我愛(ài)西紅柿與大米”為簡(jiǎn)單例子進(jìn)行實(shí)驗(yàn)。如圖2 所示。
首先,在該算法里,list 代表原句,即用戶咨詢的語(yǔ)句;listcode 代表分詞后的詞組,dict 代表在詞典中可以查到的相對(duì)應(yīng)的詞組,finallist 為通過(guò)正向最大匹配算法得到的詞組。Proportion of vocabulary1 與Proportion of vocabulary2 都是通過(guò)finallist/list 得到的結(jié)果[14-15]。
當(dāng)不加入“番茄”為同義詞時(shí),系統(tǒng)并不能對(duì)“西紅柿”進(jìn)行識(shí)別,此時(shí)系統(tǒng)能查詢到的詞匯為“我”“愛(ài)”和“大米”,此時(shí)的詞匯占比為0.5,僅僅將“大米”對(duì)應(yīng)的語(yǔ)句進(jìn)行輸出。
在加入同義詞時(shí),系統(tǒng)識(shí)別的詞匯為“我”“愛(ài)”“西紅柿”和“大米”,此時(shí)的詞匯占比為0.88,系統(tǒng)會(huì)將“我”“愛(ài)”“西紅柿”和“大米”對(duì)應(yīng)的語(yǔ)句都進(jìn)行輸出。
加入同義詞前與加入同義詞后進(jìn)行對(duì)比,原句是“西紅柿與大米”,明顯“西紅柿”和“大米”的共同加入更符合問(wèn)答。
本文將名著傳統(tǒng)知識(shí)以圖譜的形式構(gòu)建出來(lái),可以清晰地看出各名著的所占比和相關(guān)人物數(shù)據(jù),體現(xiàn)出數(shù)據(jù)的可視化,并在圖譜的大框架中加入問(wèn)答系統(tǒng),而正向最大匹配算法是問(wèn)答系統(tǒng)成功實(shí)現(xiàn)的算法前提。正向最大匹配算法應(yīng)用在問(wèn)答系統(tǒng)中的案例并不多,在該問(wèn)答系統(tǒng)中,主要依賴算法分詞后最終得到的詞組,根據(jù)詞組在原句中的詞匯占比來(lái)決定輸出哪一部分的詞匯語(yǔ)句,并在該基礎(chǔ)上添加同義詞來(lái)增強(qiáng)系統(tǒng)的準(zhǔn)確度和可靠性。