李 航,黃容鑫,黃偉剛,孫競丹,覃 曉
(南寧師范大學(xué) 計(jì)算機(jī)與信息工程學(xué)院;八桂學(xué)者創(chuàng)新團(tuán)隊(duì)實(shí)驗(yàn)室,廣西 南寧 530100 )
《駱越演義》[1]是一部以世界文化遺產(chǎn)——左江花山巖畫為背景創(chuàng)作,描寫嶺南上古時期王朝興廢、朝代更替,揭開珠江文明和千古花山之謎的大型長篇?dú)v史小說。該書以回合制撰寫,共一百二十五回,整書對上古時期駱越先民的生存狀態(tài)和百越文明的歷史淵源進(jìn)行了生動描述,展現(xiàn)了上古時期嶺南的政治、軍事、經(jīng)濟(jì)、文化的發(fā)展史,以小說的形式全景式呈現(xiàn)上古珠江流域文明變蠻夷為金戈鐵馬般的燦爛史詩。
知識圖譜[2]是以圖的形式表現(xiàn)客觀世界中的實(shí)體(概念)及其之間關(guān)系的知識庫。知識是認(rèn)知,圖譜是載體,數(shù)據(jù)庫是實(shí)現(xiàn),知識圖譜就是在數(shù)據(jù)庫系統(tǒng)上利用圖譜這種抽象載體表示知識這種認(rèn)識內(nèi)容。具體地說,知識圖譜以結(jié)構(gòu)化三元組的形式存儲現(xiàn)實(shí)世界中的實(shí)體以及實(shí)體之間的關(guān)系,與通過關(guān)鍵字搜索的方法[3]相比基于知識圖譜的方法能夠更快速的匹配準(zhǔn)確答案。陳蕾等[4]提出的《紅樓夢》中社會權(quán)勢關(guān)系的提取及網(wǎng)絡(luò)構(gòu)建中利用最小樹形圖算法生成了涵蓋192個《紅樓夢》主要人物的單向聯(lián)通的樹狀社會關(guān)系圖,通過這種方法生成的社會關(guān)系圖能有效反映人際交往親密度與社會影響力。這種關(guān)系圖與知識圖譜極為相似,說明了用知識圖譜來表示人物關(guān)系能直觀地展現(xiàn)人與人之間的聯(lián)系。
《駱越演義》是以數(shù)個主要人物為中心,輻射大量的戰(zhàn)爭故事串聯(lián)而成的小說,其內(nèi)容人物關(guān)系和戰(zhàn)爭事件關(guān)系錯綜復(fù)雜,用知識圖譜將這些復(fù)雜的關(guān)系處理成能夠結(jié)構(gòu)化表示的知識,再通過可視化圖形展現(xiàn)出來,這樣既能高效地查詢?nèi)宋镪P(guān)系,又能宏觀地發(fā)現(xiàn)事件之間的關(guān)聯(lián)性,更好的幫助理解小說內(nèi)容。
本研究在自然語言處理的基礎(chǔ)上,對小說中人物關(guān)系和事件關(guān)系進(jìn)行定義[5],構(gòu)建三元組,并將這些知識關(guān)系可視化[6-9],最后成功搭建一個《駱越演義》知識關(guān)系可視化系統(tǒng),通過可視化的方法對文學(xué)作品提出了新的表現(xiàn)形式,使讀者可以高效精確地學(xué)習(xí)和理解小說內(nèi)容,了解駱越文化,同時促進(jìn)了我國的優(yōu)秀民族文化發(fā)展。
基于B/S架構(gòu),采用Python語言處理數(shù)據(jù)和程序的編寫,前端由Django應(yīng)用框架+ECharts[10]圖表工具組合,后端使用圖形數(shù)據(jù)庫Neo4j,系統(tǒng)的總體架構(gòu)如圖1、圖2所示。
圖1 知識可視化系統(tǒng)架構(gòu)圖
圖2 知識可視化系統(tǒng)各模塊結(jié)構(gòu)
主要分為數(shù)據(jù)層、分析層和應(yīng)用層共3層。數(shù)據(jù)層負(fù)責(zé)知識圖譜構(gòu)建和導(dǎo)入數(shù)據(jù)庫,將自然語言文本處理為知識圖譜構(gòu)建所需要的三元組,主要包括2個模塊:數(shù)據(jù)處理模塊和數(shù)據(jù)導(dǎo)入模塊;分析層用于對用戶的問句進(jìn)行語義解析,了解用戶真實(shí)意圖并提取答案,主要包括兩個功能模塊:語義解析模塊和查詢結(jié)果生成模塊;應(yīng)用層包含用戶交互界面和可視化界面,用戶交互界面實(shí)現(xiàn)對人物關(guān)系進(jìn)行查詢,并返回查詢結(jié)果的知識關(guān)系圖和人物屬性,可視化界面展示知識關(guān)系全貌圖和查詢結(jié)果。
2.1.1 數(shù)據(jù)處理模塊
構(gòu)建知識圖譜,本質(zhì)上是要定義各種實(shí)體和實(shí)體關(guān)系,并建立各個實(shí)體關(guān)系的聯(lián)系。對自然語言的文本而言,尋找實(shí)體關(guān)系,需要分析文檔內(nèi)容,抽取文字或標(biāo)題的核心概念、關(guān)鍵內(nèi)容,找到兩個實(shí)體間可能存在的關(guān)系。
本系統(tǒng)主要處理對象是《駱越演義》電子文檔。文檔是非結(jié)構(gòu)化數(shù)據(jù),難以讓計(jì)算機(jī)直接處理。因此在系統(tǒng)數(shù)據(jù)的預(yù)處理階段,要對非結(jié)構(gòu)化的數(shù)據(jù)進(jìn)行結(jié)構(gòu)化轉(zhuǎn)化,即要確定電子文檔中的實(shí)體和實(shí)體關(guān)系。
書中大部分章節(jié)描寫的是戰(zhàn)爭場景,其中涉及大量的戰(zhàn)爭場地、戰(zhàn)爭場景、戰(zhàn)爭人物、戰(zhàn)爭爆發(fā)的原因、過程和結(jié)局等描寫。通過仔細(xì)研究小說中的戰(zhàn)爭內(nèi)容,本研究將關(guān)于戰(zhàn)爭的描寫定義為“戰(zhàn)爭事件”,在戰(zhàn)爭事件中先定義人物、地點(diǎn)、原因、結(jié)果等實(shí)體概念,再定義“人物關(guān)系”“地點(diǎn)關(guān)系”“戰(zhàn)爭因果關(guān)系(簡稱因果關(guān)系)”等關(guān)系概念。《駱越演義》小說知識概念性定義描述(表1)。
表1 知識實(shí)體及實(shí)體關(guān)系定義表
完成知識實(shí)體及實(shí)體關(guān)系定義表的建立,下一步基于依存句法分析模型[12.13]對實(shí)體和實(shí)體關(guān)系進(jìn)行定義。為方便說明構(gòu)建方法,先對相關(guān)概念進(jìn)行定義和描述。
設(shè)小說文本的詞匯實(shí)體集Entity為E={E1,E2,…,Ek},根據(jù)給定的語法體系,確定句子中詞匯之間的依存關(guān)系,依存關(guān)系的集合表示為ERT,定義如下:
定義1句法依存關(guān)系對偶表,表示兩個實(shí)體間的依存關(guān)系,記為ERT。
ERT={(Ei,Ej)|i,j=1,2,…,n,Ei,Ej∈E}
基于依存句法分析的小說文本實(shí)體關(guān)系抽取并構(gòu)建成知識圖譜(Entity relation extraction based on dependency parsing,ER_dp)的方法流程(算法1)。
算法1:ER_dp
輸入:小說文本數(shù)據(jù)Text_data,實(shí)體關(guān)系定義表R
輸出:小說實(shí)體關(guān)系集S
Step1: 對Text_data進(jìn)行分詞處理得到詞匯實(shí)體集E;
Step2: 對E進(jìn)行詞性標(biāo)注;
Step3: 依據(jù)詞性特征,對Text_data進(jìn)行依存句法分析,并依據(jù)句法依存關(guān)系得到句法依存關(guān)系對偶表ERT;
Step4: 根據(jù)實(shí)體關(guān)系定義表中的關(guān)系ri∈R,在ERT中找到實(shí)體的關(guān)系鏈,并合并為三元組;
Step5:S←(Ei,ri,Ej) //關(guān)系ri的三元組存放于實(shí)體關(guān)系集S中;
Step6: 重復(fù)step4、step5,直到實(shí)體關(guān)系定義表中的關(guān)系全部處理完;
step7: 返回小說實(shí)體關(guān)系集S。
對語句“金的長子燮邕跟隨獞部落南下逃亡”的依存結(jié)構(gòu)表示,如圖3表示。通過依存句法分析得到依存關(guān)系A(chǔ)TT(金,長子);DBL(金,的);ATT(長子,燮邕);SBV(燮邕,跟隨);VOB(跟隨,獞部落);DBL(南下,獞部落);ATT(南下,逃亡)等,其中ATT(金,長子)和ATT(長子,燮邕)存在人物關(guān)系“長子”,合并關(guān)系鏈得到一個三元組(金;長子;燮邕)。以三元組的形式可以更好地存儲小說中的實(shí)體關(guān)系。
圖3 依存樹
2.1.2 數(shù)據(jù)導(dǎo)入模塊
本模塊完成對系統(tǒng)數(shù)據(jù)庫的設(shè)計(jì),主要采用neo4j存儲所構(gòu)建的《駱越演義》知識圖譜。neo4j是以圖形結(jié)構(gòu)的形式存儲數(shù)據(jù)的數(shù)據(jù)庫,它采用node和relation來存儲實(shí)體和關(guān)系。文中的節(jié)點(diǎn)(node)指的是諸如人物、地點(diǎn)、原因或結(jié)果等實(shí)體,關(guān)系(relation)指的是諸如“人物關(guān)系”、“戰(zhàn)爭關(guān)系”等。節(jié)點(diǎn)(node)和關(guān)系(relation)中包含屬性(properties),如“燮邕”是一個實(shí)體,它具有名字(燮邕),性別(男),職位(護(hù)衛(wèi)隊(duì)隊(duì)長)等屬性。圖3展示了本研究的數(shù)據(jù)存儲模型,其中節(jié)點(diǎn)(node)和節(jié)點(diǎn)的屬性(properties)存儲于一個鏈表中,而節(jié)點(diǎn)和關(guān)系(relation)則使用一個雙向鏈表來存放。從圖4中可以看出,通過關(guān)系可以方便的查看跟這個關(guān)系關(guān)聯(lián)的兩個實(shí)體(node1和node2),并且從一個節(jié)點(diǎn)node1開始,可以直接遍歷以該節(jié)點(diǎn)為起點(diǎn)的圖。圖5展示了在neo4j中存儲的部分節(jié)點(diǎn)(node)和關(guān)系(relation)的鏈表表示。
圖4 neo4j的數(shù)據(jù)存儲模型 圖5 部分人物關(guān)系鏈
本研究的neo4j存儲數(shù)據(jù)的方法(算法2)。
算法2:DataToNeo4j
input df_data //df_data 是存儲三元組的數(shù)組
output node and symbolic link relationship
Step1: create_node(e1,e2) //創(chuàng)建節(jié)點(diǎn)node
Step2: for name ine1,e2
Step3: create_relation(df_data) //創(chuàng)建邊/關(guān)系
Step4: for m in range(0,len(df_data)) //遍歷數(shù)組
Step6: match a,b where a=e1and b=e2//匹配關(guān)系的兩節(jié)點(diǎn)
Step7: create a → b
Step8: end for
Step9: end for.
在算法2中,輸入是前一節(jié)生成的三元組數(shù)組{(ei,rt,ej|i,j=1,2,…,n;t=1,2,…,m;m 分析層的關(guān)鍵作用是將用戶輸入的自然語言準(zhǔn)確分詞,這樣才能提高反饋答案的正確率。本研究的人物知識查詢的具體流程圖如圖6所示,當(dāng)用戶輸入問句,經(jīng)LTP分詞模型后查詢知識圖譜,若能夠匹配,則直接查詢數(shù)據(jù)庫,若不匹配則查詢相似詞典再重新經(jīng)LTP分詞,將新的分詞結(jié)果映射到知識圖譜中,并從數(shù)據(jù)庫抽取答案。 圖6 知識查詢流程圖 2.2.1 語義解析模塊 本模塊是人物知識查詢的主要技術(shù)支撐,主要完成對用戶輸入的問句中單詞的詞性進(jìn)行判斷,功能的實(shí)現(xiàn)是借助哈工大開源LTP分詞模型和本研究根據(jù)《駱越演義》構(gòu)建的相似詞典共同完成。 由于LTP模型只能處理一些日常的詞語,而《駱越演義》是描述的是特定民族文化的語言文本,一些人名類的詞語不一定能準(zhǔn)確分詞,而分詞不準(zhǔn)確,那么詞性標(biāo)注也會出錯,例如,人名“黎修”,如果把它拆分成“黎”和“修”就不能標(biāo)注成一個人名了,這樣就必然會影響返回結(jié)果的正確率。所以,增加一個相似詞典,將《駱越演義》中涉及所有的人名、所屬部落都加入相似詞典里。首先構(gòu)建了m個數(shù)組X={x1,x2,…,xn},m表示相似詞典中的實(shí)體數(shù),n表示相似詞的個數(shù);然后將數(shù)組X中的詞映射到同一個實(shí)體Z,得到集合S={Z1,Z2,…,Zm},S表示為相似詞典;將S加入LTP的分詞庫中再對問句進(jìn)行分詞處理;就能增加分詞查詢的正確率了。 總之,學(xué)校的安全教育無小事,孩子們的安全更是牽動著千家萬戶。 因?yàn)閷W(xué)校不僅僅是學(xué)習(xí)知識的搖籃,更應(yīng)該是學(xué)生健康平安成長的樂園。讓我們用心與情來共織一張安全教育之網(wǎng),讓社會、學(xué)校和家長共建一道安全防護(hù)欄!讓嬌艷的生命之花越開越芳香燦爛! 2.2.2 查詢結(jié)果生成模塊 本模塊負(fù)責(zé)將語義解析模塊獲得的分詞結(jié)果映射到知識圖譜中查找對應(yīng)實(shí)體,然后匹配數(shù)據(jù)庫生成答案并反饋到前端展示界面。 應(yīng)用層向用戶提供交互式的知識查詢功能,允許用戶以問句的方式向系統(tǒng)進(jìn)行條件查詢和知識瀏覽功能。 2.3.1 知識概覽查詢 知識概覽查詢是指向系統(tǒng)提出瀏覽知識圖譜的請求,系統(tǒng)將展示《駱越演義》小說內(nèi)容的全部知識結(jié)構(gòu)。實(shí)現(xiàn)方法是在《駱越演義》知識圖譜中,調(diào)用Cypher查詢語句‘MATCH (n) return (n)’,n表示知識圖譜中的實(shí)體,該語句可以返回所有數(shù)據(jù),即《駱越演義》知識關(guān)系的全貌圖。如圖7展示了其中7個部落的知識關(guān)系全貌圖。 圖7 部分知識關(guān)系可視化全貌圖 2.3.2 條件查詢 條件查詢是指用戶在系統(tǒng)界面輸入查詢語句,系統(tǒng)調(diào)用分析層的語義解析模塊,理解查詢語句的語義,并從數(shù)據(jù)庫中查找與查詢語義匹配的知識結(jié)構(gòu),返回到系統(tǒng)前端ECharts可視化圖表工具中。實(shí)現(xiàn)方法是對用戶輸入問句進(jìn)行LTP分詞并對結(jié)果調(diào)用語句: ′MATCH(n:el)-[re:r]->(s)returnn,re,r′,其中n表示問句的實(shí)體,el表示實(shí)體名稱,re是實(shí)體間的關(guān)系,關(guān)系名稱為r,通過查詢和實(shí)體el具有關(guān)系r的實(shí)體并返回結(jié)果。如圖8中展示了當(dāng)用戶問“金的長子是誰?”,本系統(tǒng)通過匹配知識圖譜找到答案“燮邕”并展示“燮邕”的部落、性別、人物關(guān)系、職位和“燮邕”與“金”的人物關(guān)系圖。 知識圖譜是以圖的形式表現(xiàn)客觀世界中的實(shí)體(概念)及其之間關(guān)系的知識庫。利用知識圖譜來表示人物關(guān)系能直觀地展現(xiàn)人與人之間的聯(lián)系?!恶樤窖萘x》是一部人物關(guān)系和戰(zhàn)爭事件關(guān)系錯綜復(fù)雜的大型小說,為了更充分地展示小說中人物和事件關(guān)系,設(shè)計(jì)并實(shí)現(xiàn)了對《駱越演義》的知識關(guān)系可視化系統(tǒng)。本研究的工作包括:提出了一種基于依存句法分析的小說文本實(shí)體關(guān)系抽取并構(gòu)建成知識圖譜的方法;對戰(zhàn)爭歷史類小說構(gòu)建了一套實(shí)體關(guān)系定義表。在LTP中加入相似詞典提高分詞準(zhǔn)確率;應(yīng)用ECharts對人物和事件關(guān)系可視化。本研究不足之處在于構(gòu)建的實(shí)體關(guān)系定義表方法效率比較低,如何提高方法效率,高效地抽取數(shù)據(jù)是下一步的研究方向。2.2 分析層
2.3 應(yīng)用層
3 結(jié) 語