王家樂,宋龍生
(西藏大學(xué)信息科學(xué)技術(shù)學(xué)院,拉薩 850000)
近年來,隨著人工智能技術(shù)的發(fā)展和大數(shù)據(jù)時(shí)代的到來,知識圖譜技術(shù)得到極大的發(fā)展,大量的知識圖譜被構(gòu)建出來并廣泛應(yīng)用在多種場景之中。四大名著作為我國古代杰出的文學(xué)作品,里面包含的人物眾多,不同的人物之間又具有錯(cuò)綜復(fù)雜的關(guān)系,要想讀懂這幾部經(jīng)典著作,必須將其中的人物關(guān)系梳理清楚。
為了解決這個(gè)問題,本文利用知識圖譜把四大名著中復(fù)雜的人物關(guān)系結(jié)合在一起。通過問答系統(tǒng)也可以為用戶找出想要獲取的某人的準(zhǔn)確信息以及和親屬之間的聯(lián)系,為用戶提供更有價(jià)值的深層次信息。
Python 作為一種跨平臺的計(jì)算機(jī)程序設(shè)計(jì)語言,Python 語言簡潔易讀、擴(kuò)展性好容易維護(hù),它不像C 語言那樣對格式的要求嚴(yán)謹(jǐn),它的風(fēng)格比較隨意,很多的層次結(jié)構(gòu)用空格就可以實(shí)現(xiàn),對于開發(fā)者而言比較友好。同時(shí)Python 具有很好的可移植性,能夠適應(yīng)于多種平臺,因此選擇Python語言進(jìn)行本設(shè)計(jì)開發(fā)。
與Python 中常用的框架Django 相比較而言,F(xiàn)lask框架可以定義為一個(gè)輕量級的框架,重要的是它顯得簡潔、輕巧而且靈活度高。Flask框架適合做分層比較少、邏輯簡單的項(xiàng)目。本系統(tǒng)中采用Flask框架比較適合。
圖數(shù)據(jù)庫存儲(chǔ)和查詢數(shù)據(jù)是通過圖這種數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)的[1],數(shù)據(jù)都是以節(jié)點(diǎn)的形式來保存,它是通過指針來說明兩個(gè)節(jié)點(diǎn)之間的關(guān)系,具有任意性。圖數(shù)據(jù)庫的數(shù)據(jù)存儲(chǔ)方式和查詢方式都是以圖論為基礎(chǔ)的[2]。本文使用圖數(shù)據(jù)庫Neo4j來實(shí)現(xiàn)對四大名著人物關(guān)系的存儲(chǔ)。
在存儲(chǔ)可視化展示界面和單個(gè)人物的事跡與簡介的數(shù)據(jù)時(shí)采用MySQL 數(shù)據(jù)庫。MySQL 是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng)[3]。在存儲(chǔ)關(guān)系型數(shù)據(jù)時(shí),MySQL仍然是首要的選擇。
知識圖譜經(jīng)歷了早期語義網(wǎng)時(shí)代的發(fā)展、積累,最后才發(fā)展衍生出了這一概念。知識圖譜有助于提供更好的搜索服務(wù),比如當(dāng)搜索籃球明星姚明時(shí),搜索引擎不僅會(huì)出現(xiàn)查找人物的信息,而且旁邊還會(huì)出現(xiàn)他的朋友、妻子、子女等簡要信息。事實(shí)上,這種效果就是知識圖譜的功勞,可以理解為知識圖譜的簡單應(yīng)用。
本系統(tǒng)采用Flask 框架對整個(gè)項(xiàng)目進(jìn)行交互,還包括網(wǎng)絡(luò)爬蟲部分、數(shù)據(jù)處理部分、知識圖譜構(gòu)建部分、分詞部分和前端展示部分。
知識圖譜的構(gòu)建首先需要大量的數(shù)據(jù)作為支撐,通過結(jié)合人工獲取與網(wǎng)絡(luò)爬蟲共同得到本系統(tǒng)需要的數(shù)據(jù),在得到大量的數(shù)據(jù)之后,接下來需要對數(shù)據(jù)進(jìn)行分類。構(gòu)建知識圖譜的主要方法可以分為兩種:一是自頂向下的構(gòu)建方式,二是自底向上的構(gòu)建方式[4]。
目前,在構(gòu)建知識圖譜時(shí),一般采用自底向上的方式,從網(wǎng)絡(luò)中抽取信息[5],這種從下往上將知識進(jìn)行疊加的方式便于信息的修改。但是在后期的過程中同時(shí)使用自頂向下和自底向上構(gòu)建方法,并將兩種方法的優(yōu)勢結(jié)合一起能夠更高效地完成這一階段的工作。
由于本系統(tǒng)要使用眾多的人物圖片和一些相關(guān)信息,所以使用網(wǎng)絡(luò)爬蟲技術(shù)作為收集數(shù)據(jù)的主要方式。網(wǎng)絡(luò)爬蟲伴隨著大數(shù)據(jù)與人工智能時(shí)代的來臨而受到越來越多人的重視與青睞。網(wǎng)絡(luò)爬蟲是搜索引擎的重要組成部分[6]。通俗的講,爬蟲就是程序代替人們在網(wǎng)頁中獲取想要的信息,用程序替你獲取你想要的信息。
爬蟲的主要步驟分為:分析站點(diǎn)(目標(biāo)網(wǎng)站)→發(fā)送請求→獲取相應(yīng)的內(nèi)容→解析網(wǎng)頁→數(shù)據(jù)保存。
知識抽取的過程包括分詞、實(shí)體命名識別、關(guān)系抽取以及事件抽?。?]。本系統(tǒng)的分詞工具直接使用的是已經(jīng)比較完善的LTP,因?yàn)樗闪朔衷~和詞性標(biāo)注等多種方法在里面。
在本系統(tǒng)中用到的實(shí)體關(guān)系一般是指君臣關(guān)系、兄弟關(guān)系、同僚關(guān)系等。實(shí)體命名識別主要是從互聯(lián)網(wǎng)或者文本中發(fā)現(xiàn)有用的人物節(jié)點(diǎn)。除了這種方式外,還有人工獲取,將數(shù)據(jù)同樣整理成三元組的形式進(jìn)行存儲(chǔ)。之所以加入人工獲取的方式是因?yàn)樵谒拇竺奈谋局写嬖谟卸x性的詞語。但是,本系統(tǒng)中的數(shù)據(jù)關(guān)系來源幾乎都是人工整理所得,不存在二義性的問題。
(1)數(shù)據(jù)處理部分。原始數(shù)據(jù)來源于關(guān)系數(shù)據(jù)庫,需要將數(shù)據(jù)預(yù)處理后,導(dǎo)入的圖數(shù)據(jù)庫Neo4j 中。本系統(tǒng)選擇使用Neo4j-import 將大規(guī)模的數(shù)據(jù)導(dǎo)入到Neo4j 數(shù)據(jù)庫中(首先將數(shù)據(jù)Excel轉(zhuǎn)換成CSV 格式,然后將CSV 格式存放在import文件夾下),最終形成想要的知識庫。
(2)問題分析部分。本系統(tǒng)針對用戶輸入的問題進(jìn)行模式匹配,識別出實(shí)體,進(jìn)行詞性分析,從而找出人名實(shí)體和親屬關(guān)系類別。
(3)查詢結(jié)果部分。主要的功能分為兩種類型:一種是查詢?nèi)宋锏挠H屬關(guān)系,另一種是查詢兩個(gè)人物之間是否存在關(guān)系。
(4)結(jié)果返回部分。如果在圖數(shù)據(jù)庫中能找到答案,就返回相應(yīng)的節(jié)點(diǎn)和關(guān)系展示出圖譜的全貌,如果查找失敗就報(bào)錯(cuò),查詢兩個(gè)人物之間的關(guān)系時(shí)如果存在關(guān)系就會(huì)跳轉(zhuǎn)到答案的界面,沒有則顯示沒有關(guān)系,若查找成功還會(huì)出現(xiàn)人物對應(yīng)的圖片與人物簡介。
在本系統(tǒng)中知識圖譜的可視化主要是前端界面的整體展示,在對整體數(shù)據(jù)進(jìn)行展示的過程中使用echarts 可視化平臺可以直觀地看到系統(tǒng)中的各類關(guān)系和實(shí)體以及數(shù)據(jù)的統(tǒng)計(jì)。人物檢索主要是以關(guān)鍵詞為中心,結(jié)果會(huì)將和關(guān)鍵詞有關(guān)系的節(jié)點(diǎn)(實(shí)體)連在一起形成一個(gè)大的知識網(wǎng)絡(luò),展示在網(wǎng)頁中。
對Neo4j 數(shù)據(jù)庫中數(shù)據(jù)的讀取和前端HTML界面的展示依靠的是Flask框架,進(jìn)而將數(shù)據(jù)庫中的所有內(nèi)容進(jìn)行可視化展示。可視化界面還具有搜索單個(gè)人物、知識圖譜全貌的展示、查詢?nèi)宋镪P(guān)系等功能。
整體系統(tǒng)實(shí)現(xiàn)了:①可視化展示;②四大名著知識圖譜全貌展示;③搜索單個(gè)人物;④查詢?nèi)宋镏g的關(guān)系。
圖1 是可視化界面,顯示了本系統(tǒng)中關(guān)系和實(shí)體的總數(shù)目,中間部分的圖譜效果是由echarts實(shí)現(xiàn),當(dāng)點(diǎn)擊其中的名字會(huì)出現(xiàn)相應(yīng)內(nèi)容介紹。右側(cè)介紹了系統(tǒng)中的主要功能模塊。
圖1 可視化界面展示
圖2是數(shù)據(jù)的展示界面。
圖2 四大名著數(shù)據(jù)展示
可以看到四大名著人物關(guān)系全貌的一部分,它和在圖形數(shù)據(jù)庫Neo4j 中的效果略同,但是它在前端的展示會(huì)顯得清楚、美觀。
關(guān)于增添關(guān)系的效果,當(dāng)需要添加兩個(gè)人物的關(guān)系時(shí),在輸入框中添加兩個(gè)人物的,名字和他們之間的關(guān)系就可以成功的添加這兩個(gè)人的關(guān)系。
查找某個(gè)人的親屬關(guān)系,只要這個(gè)關(guān)系存在就會(huì)顯示親屬的關(guān)系圖譜,并且會(huì)顯示出對應(yīng)人物的簡介。
除上述的功能之外,為了使系統(tǒng)中的內(nèi)容更加充實(shí)以滿足更多的使用者,加入了四大名著中主要事件的搜索以及主要事件的視頻內(nèi)容。例如:在搜索欄中搜索“武松打虎”,就會(huì)與數(shù)據(jù)庫中的內(nèi)容進(jìn)行匹配,然后出現(xiàn)對應(yīng)的視頻片段。
本文主要論述了基于四大名著的知識圖譜的構(gòu)建,使用人工獲取和網(wǎng)絡(luò)爬蟲在互聯(lián)網(wǎng)上獲取相關(guān)資源后,通過對獲取的人物關(guān)系進(jìn)行歸納、整合等操作后整理成三元組的形式,利用Neo4j存儲(chǔ)其中的人物關(guān)系,接下來使用Flask框架來實(shí)現(xiàn)系統(tǒng)中前后端的交互,最終構(gòu)建了四大名著人物關(guān)系的知識圖譜。不僅有基本的人物圖譜的全部展示,而且加入了類似于大數(shù)據(jù)的前端展示,使得數(shù)據(jù)的可視化效果增強(qiáng)。