肖明勝,王 敏,2,?,郭英清,羅家梅
(1.贛南師范大學(xué) 數(shù)學(xué)與計算機科學(xué)學(xué)院;2.江西省數(shù)值模擬與仿真技術(shù)重點實驗室,江西 贛州 341000)
課程知識圖譜是知識圖譜(Knowledge Graph,KG)在教育領(lǐng)域的特例,是教育知識圖譜的重要組成部分,旨在為課程教學(xué)提供幫助.作為一種基礎(chǔ)性教育資源,課程知識圖譜對課程知識及復(fù)雜語義關(guān)系建模,為教學(xué)提供優(yōu)質(zhì)知識網(wǎng)絡(luò),以及內(nèi)含前驅(qū)后繼關(guān)系的知識點序列,幫助學(xué)習(xí)者建立個人學(xué)習(xí)路徑和形成課程知識體系;為知識問答、認(rèn)知診斷、個性推薦等提供語義支持,從而滿足學(xué)習(xí)者個性化學(xué)習(xí)的需要.
近年來,研究者們不斷研討課程知識圖譜的定義與內(nèi)涵并提出相應(yīng)的構(gòu)建方式[1-3],課程知識圖譜越來越受到關(guān)注.其中,文獻(xiàn)[4]和文獻(xiàn)[5]分別研究計算機基礎(chǔ)和JAVA程序設(shè)計語言課程知識的本體.文獻(xiàn)[6-10]討論單一課程的知識圖譜構(gòu)建,但不全是以知識概念為基本單位而是以課程知識章節(jié)作為基本構(gòu)建單位.因此,這些課程知識圖譜中存在以下問題:知識粒度不細(xì)、本體不明確;構(gòu)建的本體移植性差,面對不同的課程往往需要重新設(shè)計本體,難以適用于多門課程;構(gòu)建的課程單一,難以形成領(lǐng)域體系.
針對上述課程知識圖譜中出現(xiàn)的問題,本文選取3種主流的程序設(shè)計語言作為研究對象,利用Gruber所提的本體構(gòu)建準(zhǔn)則[11]和七步法[12]構(gòu)建程序設(shè)計語言課程本體;然后考慮程序設(shè)計語言課程特點采用自頂向下方式構(gòu)建課程知識圖譜.具體而言,在Gruber所提準(zhǔn)則的基礎(chǔ)上制定課程本體4個準(zhǔn)則,即客觀準(zhǔn)則、邏輯準(zhǔn)則、通用準(zhǔn)則和可拓展準(zhǔn)則,這保障了課程知識本體構(gòu)建的合理性.在七步法的框架下抽象出C、JAVA和Python 3門語言的共性,并引入了專家質(zhì)量評估機制,這保障程序設(shè)計課程本體的清晰性和可復(fù)用性,提高知識本體的構(gòu)建質(zhì)量.進(jìn)一步,提出程序設(shè)計語言課程知識圖譜的構(gòu)建方法,構(gòu)建了包含6類知識點概念和4類知識點關(guān)系,實例化了C、JAVA和Python的程序設(shè)計語言課程知識圖譜.最后實現(xiàn)了知識圖譜的存儲、查詢與可視化.
2012年5月17日由Google正式提出知識圖譜的概念,并用于搜索引擎中以提高語義分析能力[13].知識圖譜源于傳統(tǒng)知識工程和專家系統(tǒng),吸收了語義網(wǎng)絡(luò)、本體論、萬維網(wǎng)、語義網(wǎng)等的理論與技術(shù).隨著大數(shù)據(jù)時代的到來,知識圖譜的發(fā)展進(jìn)入新的階段.
從知識涉及的范圍來看,可將知識圖譜分為通用知識圖譜與領(lǐng)域知識圖譜兩種類型.通用知識圖譜在于知識的廣度,國外典型的通用知識圖譜有百科圖譜DBpedia[14]、詞匯圖譜BabelNet[15]、概念圖譜Probase[16]等;國內(nèi)的通用知識圖譜通用有開放知識圖譜openKG[17]、百科類圖譜Zhishi.me[18]和CN-DBpedia[19]等.領(lǐng)域知識圖譜在于知識的深度,目前在一些垂直領(lǐng)域已得到應(yīng)用,如電影知識圖譜IMDB[20]、醫(yī)學(xué)知識圖譜UMLS[21]和電商知識圖譜[22]等.除了組織領(lǐng)域知識的知識圖譜應(yīng)用外,還應(yīng)用于互聯(lián)網(wǎng)技術(shù)中,典型技術(shù)如智能搜索[23]、個性化推薦[24-25]和問答系統(tǒng)[26-27]等.隨著對知識圖譜的深入研究,知識圖譜技術(shù)取得巨大進(jìn)步,各環(huán)節(jié)中使用的技術(shù)方法不斷創(chuàng)新發(fā)展,但如何自動構(gòu)建高質(zhì)量的知識圖譜依然是一大難題.
知識圖譜的構(gòu)建方法分為自頂向下和自底向上的構(gòu)建[28].由于課程知識的專業(yè)性,通常利用自頂向下的方法構(gòu)建知識本體,再構(gòu)建課程知識圖譜.本體構(gòu)建成為知識圖譜構(gòu)建中必不可少的環(huán)節(jié).
在課程知識圖譜的本體構(gòu)建方面,Lee等[4]構(gòu)建JAVA程序設(shè)計語言課程的知識本體,涵蓋JAVA基本知識與編程技巧,是本體構(gòu)建在此領(lǐng)域的成功應(yīng)用.張萌[5]闡述課程知識本體的概念,按照本體學(xué)習(xí)層次結(jié)構(gòu)進(jìn)行層級抽取,分析課程數(shù)據(jù)與知識本體的組織.
目前,知識圖譜中的知識存儲主要分為3類,即基于關(guān)系型數(shù)據(jù)庫存儲、基于RDF數(shù)據(jù)庫存儲和基于圖數(shù)據(jù)庫存儲.關(guān)系型數(shù)據(jù)庫發(fā)展至今已十分成熟,能夠滿足大多數(shù)的存儲需求,但面對海量的知識及屬性,還存在著查詢效率不高、更新維護(hù)開銷大的問題[30].基于RDF[31]數(shù)據(jù)庫的存儲方案在知識共享方面有著較強的能力,但更新維護(hù)代價仍然較大.圖數(shù)據(jù)庫面對大規(guī)模數(shù)據(jù)存儲表現(xiàn)良好,在多跳查詢等任務(wù)中十分高效,是企業(yè)級知識圖譜存儲實現(xiàn)的重要方法[32].
由節(jié)點和邊組成的節(jié)點鏈接圖是我們較常見的展現(xiàn)形式[33],該形式可視化結(jié)果簡潔、表達(dá)能力強,讓我們更直觀地瀏覽知識.常見的知識圖譜可視化方案有基于現(xiàn)有工具可視化和基于第三方庫可視化.基于現(xiàn)有工具可視化是指使用現(xiàn)有圖數(shù)據(jù)庫等產(chǎn)品,可視化操作便捷、效果好,但需要一定領(lǐng)域知識與技術(shù)基礎(chǔ),對于復(fù)雜數(shù)據(jù)交互有一定局限性,典型的可視化工具如Neo4j[34]和AntV G6[35]等.基于第三方庫的可視化是指引入專門用于數(shù)據(jù)建模的JavaScript庫,通過前端網(wǎng)頁實現(xiàn)數(shù)據(jù)的交互,適用范圍廣,對普通用戶友好,但該方案開發(fā)成本較高,典型的可視化庫如D3js[36]和Cytoscape.js[37]等.
程序設(shè)計語言課程知識圖譜構(gòu)建框架如圖1所示,包括本體構(gòu)建和根據(jù)本體構(gòu)建課程知識圖譜兩個重要步驟.
圖1 課程知識圖譜構(gòu)建步驟
3.1.1 本體構(gòu)建準(zhǔn)則與方法
基于Gruber的5項構(gòu)建原則[4],結(jié)合程序設(shè)計課程知識具有極強的專業(yè)性和實踐性特點,提出程序設(shè)計課程知識本體的4個構(gòu)建準(zhǔn)則:客觀準(zhǔn)則.課程知識是正確、客觀、與實際應(yīng)用一致的,并受到廣大研究人員與實際使用者認(rèn)可.邏輯準(zhǔn)則.將細(xì)粒度化的知識按實際關(guān)系構(gòu)建層次結(jié)構(gòu),以便于循序漸進(jìn)地學(xué)習(xí)與理解.通用準(zhǔn)則.本體框架對于程序設(shè)計領(lǐng)域下的其他類似課程具有可復(fù)用性.可拓展準(zhǔn)則.本體可拓展,便于知識圖譜的完善與改進(jìn).以上準(zhǔn)則能夠保障課程知識圖譜本體有著質(zhì)量良好、結(jié)構(gòu)清晰、可復(fù)用與可拓展的特點.
何良諸提出要求,見見趙集、小勺。公安局爽快地同意了,派車將何良諸送到拘留所。何良諸進(jìn)入高墻電網(wǎng)內(nèi),來到接見室,坐下。趙集走出來,坐在他的對面。何良諸抄起話筒,說:“趙集,多少年沒見面了,來看看你?!?/p>
進(jìn)一步,針對7步法[12]在本體質(zhì)量評估方面較為薄弱的問題進(jìn)行補充,并遵循上述構(gòu)建準(zhǔn)則,提出程序設(shè)計課程知識本體的構(gòu)建方法,具體如下:確定領(lǐng)域范疇.以程序設(shè)計語言課程為范疇,選取C、JAVA、Python 3門程序設(shè)計語言課程的知識內(nèi)容作為構(gòu)建對象.術(shù)語提取.收集課程相關(guān)的資料,參考現(xiàn)有課程知識體系的描述與本體并考慮復(fù)用,提取描述相對標(biāo)準(zhǔn)的術(shù)語.當(dāng)領(lǐng)域中產(chǎn)生新知識時,通過本步驟拓展更新本體.概念與關(guān)系提取.以字或詞為單位,提取在程序設(shè)計過程中常用的或重要的概念以及概念間的關(guān)系,同時使這些概念與關(guān)系整體上能夠概括構(gòu)建對象的主體部分.概念與關(guān)系類型劃分.程序設(shè)計是一項邏輯性極強的工作,本文從程序組成結(jié)構(gòu)的角度出發(fā),為概念與關(guān)系劃分明確的類型.組織本體框架.將第步中劃分的不同類型的概念與關(guān)系進(jìn)行關(guān)聯(lián),形成層次結(jié)構(gòu),構(gòu)成本體框架的主體.本體屬性補全.補全各概念與關(guān)系屬性,如唯一標(biāo)識ID、定義與特點等,通過若干屬性通用地描述每個概念與關(guān)系的含義.質(zhì)量評估.通過專家工作對構(gòu)建出的本體進(jìn)行審核評估,判斷概念或關(guān)系是否符合實際、需要調(diào)整或刪除,調(diào)整則返回到第步并繼續(xù)執(zhí)行.
從程序設(shè)計的角度來看,不同程序設(shè)計語言存在共性,即通過何種程序設(shè)計語言來實現(xiàn)一個程序,程序都擁有類似的生命周期,其中每個環(huán)節(jié)都由不同的知識組成.通過這種“尋找共性”思想構(gòu)建的本體框架對其他程序設(shè)計語言具有適用性,同時將不同程序設(shè)計語言的知識聯(lián)系起來對比學(xué)習(xí),增強程序設(shè)計領(lǐng)域知識與程序設(shè)計課程體系內(nèi)的緊密性.
3.1.2 程序設(shè)計語言知識本體
構(gòu)建的程序設(shè)計語言知識本體將所有知識點概念分為2部分:靜態(tài)概念與動態(tài)關(guān)系.靜態(tài)概念指程序設(shè)計課程中的事物或方法等知識,例如“函數(shù)”“數(shù)組”等,本文將其作為知識圖譜中的節(jié)點.動態(tài)關(guān)系本質(zhì)上也是知識點概念,但其具有動態(tài)的特性,能描述具體的行為動作,例如“調(diào)用”“聲明”等,本文將其作為知識圖譜中的邊.
圖2 靜態(tài)概念
動態(tài)關(guān)系如圖3所示,分為4類:包含關(guān)系、組成關(guān)系、實例化關(guān)系與操作關(guān)系.包含關(guān)系指兩者屬于同一類型的概念且前者所指的范圍將后者包含著,如“基本數(shù)據(jù)類型”與“整型數(shù)據(jù)”的關(guān)系,“整型數(shù)據(jù)”就是一種“基本數(shù)據(jù)類型”.組成關(guān)系指兩者存在整體與部分的關(guān)系,如“自定義函數(shù)”與“語句”的關(guān)系,“語句”是“自定義函數(shù)”的一部分.實例化關(guān)系指本體中的節(jié)點與其在某個課程領(lǐng)域中實例化得到的實體節(jié)點間的關(guān)系,如“整型數(shù)據(jù)”與C語言程序設(shè)計課程中的某個整型變量.
圖3 動態(tài)關(guān)系
操作關(guān)系主要表達(dá)不同類型靜態(tài)概念間的關(guān)系,而其它3種關(guān)系主要表達(dá)各個類型靜態(tài)概念內(nèi)的關(guān)系.更詳細(xì)地,本文將操作關(guān)系按照主體的不同分為3種類型:人對程序的操作,如“運行”“調(diào)試”等.程序與外部資源間的操作,與文件相關(guān)的如“讀”“寫”等.程序內(nèi)的操作,與數(shù)據(jù)相關(guān)的如“初始化”“聲明”“定義”等.這3種類型的操作關(guān)系基本涵蓋了程序生命周期的相關(guān)行為動作,能夠詳細(xì)地表達(dá)概念間的具體關(guān)系.如圖4所示,“函數(shù)”與“自定義函數(shù)”“庫函數(shù)”是包含關(guān)系,可轉(zhuǎn)化成<函數(shù),包含,自定義函數(shù)>和<函數(shù),包含,庫函數(shù)>的三元組形式.“自定義函數(shù)”與“數(shù)組”間存在著操作關(guān)系,可轉(zhuǎn)化為<自定義函數(shù),操作,數(shù)組>的三元組形式.操作關(guān)系的引入使得概念間語義關(guān)系更加豐富.
圖4 概念和關(guān)系示例
3.2.1 構(gòu)建方法
與通用知識圖譜相比,程序設(shè)計語言課程知識圖譜是針對程序設(shè)計特定領(lǐng)域,其概念相對固定且概念數(shù)量較少;另外,它幾乎不允許出現(xiàn)錯誤,構(gòu)建質(zhì)量要求高.因此,本文采用自頂向下的人工方式構(gòu)建程序設(shè)計語言課程知識圖譜.具體步驟如下:
課程知識實例化是從本體框架到課程領(lǐng)域范圍內(nèi)知識的映射,以本體框架為骨架,將本體框架中的知識概念在課程中具體化.將本體框架中七類靜態(tài)概念逐一實例化,按關(guān)系指向方向即抽象程度由高到低的順序進(jìn)行.
以C語言程序設(shè)計課程為例,圖5描述對本體框架靜態(tài)概念中“數(shù)據(jù)模型”的部分分支進(jìn)行實例化,實例化的先后順序為:“數(shù)據(jù)模型”“數(shù)據(jù)類型”“構(gòu)造數(shù)據(jù)類型”“結(jié)構(gòu)體”“聯(lián)合體”“數(shù)組”“指針”“枚舉”.在這里不對“類”進(jìn)行實例化的原因是C語言不支持類和對象的概念.由此可見,對于一門課程而言,并不是本體框架中所有的概念都能在該課程領(lǐng)域內(nèi)實例化,需要根據(jù)課程知識的實際情況處理.由于本體框架針對程序設(shè)計語言領(lǐng)域的通用性設(shè)計,以上課程實例化的方法可以應(yīng)用到其他課程.
圖5 課程知識實例化示例
課程知識關(guān)系補全是為課程實例化后得到的所有課程知識節(jié)點關(guān)聯(lián)關(guān)系,在添加關(guān)系的過程中同時要按照課程實際情況進(jìn)行.按照本體框架實例化出來的課程知識節(jié)點之間,存在著與本體框架中同樣的關(guān)系,因此為課程知識節(jié)點間添加的關(guān)系在程序設(shè)計課程知識本體中4種動態(tài)關(guān)系的范圍內(nèi).關(guān)系補全按照概念的抽象程度,由抽象到具體的順序進(jìn)行.
以C語言程序設(shè)計課程中的“構(gòu)造數(shù)據(jù)類型”和“數(shù)組”2個概念間的關(guān)系補全為例(如圖6所示).2個節(jié)點分別由本體框架中的“構(gòu)造數(shù)據(jù)類型”和“數(shù)組”2個概念實例化而來,在本體框架中兩者存在著包含關(guān)系,由它們實例化得到的節(jié)點間同樣存在著包含關(guān)系.對于其他課程,同樣采取本方法進(jìn)行課程內(nèi)的知識關(guān)系補全.
圖6 課程知識關(guān)系補全
對所有的課程知識節(jié)點的屬性進(jìn)行補全,每個節(jié)點擁有標(biāo)識、定義、特點等屬性.“標(biāo)識”屬性由工具生成唯一字符串.“定義”屬性是用于描述知識節(jié)點的本質(zhì)特征,通俗來說是解釋該概念是什么的問題.“特點”屬性是用于描述知識節(jié)點的規(guī)則、特性等特殊之處.
例如C語言程序設(shè)計課程中的概念“數(shù)據(jù)類型”,其定義為“指在C語言中用于聲明不同類型的變量或函數(shù)的一個廣泛的系統(tǒng)”,其特點為“一個數(shù)值的數(shù)據(jù)類型決定了它存儲所占用的空間,不同數(shù)據(jù)類型的數(shù)據(jù)需要不同大小的空間來存儲”.此外,還可按照節(jié)點的類型或需求設(shè)置其他屬性.
3.2.2 構(gòu)建結(jié)果
通過上述方式,構(gòu)建程序設(shè)計語言知識本體,包含6類概念和4種關(guān)系,共計80個概念(節(jié)點)和79條關(guān)系(邊),具體數(shù)據(jù)如表1所示.6類概念包括數(shù)據(jù)模型概念、表達(dá)式概念、輸入輸出概念、執(zhí)行方式概念、函數(shù)概念、程序設(shè)計方法概念.4種關(guān)系包括包含關(guān)系、組成關(guān)系、實例化關(guān)系、操作關(guān)系.目前,程序設(shè)計語言課程知識圖譜中的有C、JAVA、Python,共計395個概念(節(jié)點)和391條關(guān)系(邊),其中包含的概念和關(guān)系類型與本體一致.
表1 構(gòu)建結(jié)果
與其它課程知識圖譜相比,本文沒有單純采用以章節(jié)為單位的目錄式本體結(jié)構(gòu),而是以單個概念為節(jié)點,細(xì)化知識粒度,強調(diào)概念間的關(guān)聯(lián)關(guān)系.概念與關(guān)系的類型更加多樣,尤其是動態(tài)關(guān)系中操作關(guān)系的引入,使得圖譜更加豐富.隨著新課程的引入,本文的知識圖譜包含的概念與關(guān)系的數(shù)量將不斷上升并發(fā)展完善.
為滿足復(fù)雜查詢與大量課程知識存儲需求,選擇圖數(shù)據(jù)管理方式自由、支持ACID事務(wù)和Cypher查詢語言的圖數(shù)據(jù)庫Neo4j來存儲課程知識圖譜.首先將課程知識圖譜中所有節(jié)點與邊的內(nèi)容整理成表格形式的結(jié)構(gòu)化數(shù)據(jù),然后用計算機程序批量拼接Cypher語句把這些數(shù)據(jù)持久化到Neo4j圖數(shù)據(jù)庫.數(shù)據(jù)的存儲過程如圖7所示.
圖7 課程知識圖譜的存儲
選用Neo4j圖數(shù)據(jù)庫中自帶的Neo4j Browser工具實現(xiàn)課程知識圖譜的可視化.構(gòu)建的程序設(shè)計語言知識本體和C、JAVA、Python程序設(shè)計語言課程知識圖譜可視化結(jié)果如圖8、圖9.
圖8 本體可視化 圖9 本體可視化
本文對C、JAVA、Python程序設(shè)計語言課程知識建模,構(gòu)建課程知識本體與課程知識圖譜,并提出相應(yīng)的構(gòu)建準(zhǔn)則、方法和結(jié)果,以此為課程教學(xué)提供知識服務(wù).在今后的研究中,我們將引入人工智能方法輔助知識實體識別與關(guān)系抽取,進(jìn)一步完善和豐富程序設(shè)計語言知識圖譜,為課程教學(xué)、課程知識問答等應(yīng)用提供更加豐富的語義信息與技術(shù)支持.