郎亞坤 蘇超 王國中 李國平



摘 要: 當前教育領域對知識圖譜的研究大多停留在對學科間知識圖譜的研究上,而這類知識圖譜普遍存在節點、關系和屬性單一,以及知識點劃分顆粒度較粗等問題。然而,在實際教學過程中,學科內的知識圖譜對學生的作用更大,比如:當學生對某一知識點掌握程度不夠的情況下,可以根據知識圖譜找到與當前知識點相似的知識點或者基礎知識點進行補充學習;或者對某一知識點已經掌握的情況下,可以根據知識圖譜找出下一個要學的知識點等等。因此,本文基于Neo4j圖數據庫構建了C++課程知識圖譜并給出相應的知識點推理。實驗結果表明:構造后的課程知識圖譜包含C++課程領域的所有知識點及知識點間的關系,可以很好地進行知識點和學習路徑的相關推理。
關鍵詞: Neo4j; C++; 知識圖譜; 知識推理
文章編號: 2095-2163(2021)07-0144-08中圖分類號:TP183文獻標志碼: A
The construction and reasoning of C++ course knowledge graph based on Neo4j
LANG Yakun, SU Chao, WANG Guozhong, LI Guoping
(School of Electronic and Electrical Engineering, Shanghai University of Engineering Science, Shanghai 201620, China)
【Abstract】The current research on knowledge graphs in the education field mostly stays on the research of interdisciplinary knowledge graphs. However, this kind of knowledge graph generally has problems such as single node, relationship and attribute, and coarse granularity of knowledge points. And in the actual teaching process, the knowledge graph within the subject has a greater effect on students. For example, when students do not have enough mastery of a certain knowledge point, they can find knowledge points similar to the current knowledge points or basic knowledge points according to the knowledge graph for supplementary learning. Or when they have mastered a certain knowledge point, they can find the next knowledge point to learn based on the knowledge graph, etc. Therefore, this paper constructs a C++ curriculum knowledge graph based on the Neo4j graph database and gives the reasoning of the corresponding knowledge points. The experimental results show that the constructed curriculum knowledge graph contains all the knowledge points in the C++ course field and the relationships between the knowledge points, and can be used to perform relevant reasoning about the knowledge points and learning paths.
【Key words】Neo4j; C++; knowledge graph; knowledge reasoning
0 引 言
知識圖譜(knowledge graph, KG)自2012年由Google公司提出以來,目前已受到工業界和學術界的廣泛關注。知識圖譜最初提出的目的在于優化搜索引擎,而隨著近些年的快速發展,目前已廣泛應用于電商、金融、醫學等領域,在智能搜索、智能問答、智能決策和推薦系統等方面發揮著重要的作用[1]。
近年來,隨著互聯網技術的迅猛發展以及“互聯網+”理念在各領域的應用,同時隨著大數據、云計算、人工智能等新一代信息技術的發展,將新一代信息技術應用在教育領域,打造教育信息化已是必然趨勢[2]。而無論是傳統教育、還是以“互聯網+”為背景的新型教育,教育本身都是一個數據密集型行業,而知識圖譜的本質也是將事物和概念通過相互之間的關系連接起來,因此,將知識圖譜應用在教育領域是一種必然的趨勢[3]。
當前,知識圖譜在教育領域中應用的研究越來越多。如,孫涵等人[3]根據老年教育的特征,探索分析了知識圖譜在老年教育領域的可能性。吉婷婷[4]基于CNKI期刊文獻關鍵詞搜索,運用關鍵詞共現的知識圖譜可視化分析方法分析了我國地理學科核心素養研究的格局與演進特征,以期為地理學科核心素養研究的演進方向與發展趨勢提供參考。王蘭成[5]認為多學科協同開展網絡輿情知識圖譜研究,將形成相互補充和相互驗證的有機整體成果,具有重要的理論價值和現實意義。張春霞等人[6]設計了基于數學課程本體的數學課程知識圖譜構建方法,提出了一種基于數學課程知識圖譜的知識推理方法等等。
綜上所述,知識圖譜應用在教育領域的研究已越來越多,但是現有的教育知識圖譜更多的是針對學科間的研究,缺乏對單一課程知識點的分析,然而在學生的真實學習環境中,學生更想獲得課程中知識點的分布情況、學習順序以及難易程度等。本文以學生在課程中的學習為背景,設計構建出一種基于Neo4j的C++課程知識圖譜,并根據構建的知識圖譜給出詳細的C++知識點推理過程,旨在將構建后的知識圖譜應用于學生的課程設計、學習路徑推薦等方面,實現個性化教學。
1 知識圖譜相關研究
1.1 知識圖譜的定義
知識圖譜是以大量的數據為基礎,將其整理成機器能處理的知識庫能夠以可視化的形式展示的網絡組織結構[7]。具體是以科學知識為對象,顯示學科的發展進程與結構關系的一種圖形,并同時具有“圖”和“譜”的雙重性質和特征[8],本質上是一個存儲知識實體與實體之間關系的結構化網絡,可以幫助形式化描述、理解現實世界的事物及其相互關系。知識圖譜由“頭實體—關系—尾實體”三元組構成,以三元組的方式來表示以及存儲實例數據,構建數據間的語義鏈接[9]。知識圖譜的三元組通常可以表示為G={E,R,S},其中E={e1,e2,…,en}表示知識圖譜中的實體集合;R={r1,r2,…,rn}表示知識圖譜中的關系集合;而SE×R×E表示知識圖譜中的三元組集合[10]。
1.2 知識圖譜的分類
根據知識圖譜的應用領域,一般將知識圖譜分為以下2種,即:通用知識圖譜(General-purpose Knowledge Graph, GKG)和領域知識圖譜(Domain-Specific Knowledge Graph, DKG)[11]。其中,通用知識圖譜是指不面向特定領域的知識圖譜,具有一定的普適性,而領域知識圖譜是指面向特定領域的知識圖譜,具有特殊性。對于通用知識圖譜的構建,當前已有如:谷歌公司構建的Freebase、萊比錫大學和曼海姆大學共同開發的DBpedia、百度知心和搜狗知立方等代表性的通用知識圖譜。而對于領域知識圖譜的構建,目前依然處于一種探索階段,一方面在于領域知識圖譜的構建過程中需要有專業的領域知識為前提,另一方面也在于專業領域內的數據資源體量比較小,滿足不了數據量的需求,當前,領域內的知識圖譜主要包含有:音樂領域圖譜MusicBrainz、地理領域圖譜GeoNames等等[12]。
1.3 知識圖譜的構建方式
知識圖譜的構建方式主要有自上而下和自下而上兩種方式。其中,自上而下的構建方式是先定義所需要的模式,再將各種實體知識加入到知識庫中;而自下而上的方式是先從各種數據中抽取出知識實體,再篩選出置信度較高的知識實體去構建頂層的模式[13]。知識圖譜的構建主要包括數據獲取、知識抽取、知識融合、知識推理和知識應用等步驟[10],如圖1所示。數據的獲取是知識圖譜構建的前提,常見的數據格式有結構化的數據、非結構化和半結構化數據,結構化數據可以直接對數據提取,而非結構化數據和半結構化數據在提取前需要先轉換為結構化數據;當獲取到數據后,便可以進行數據的抽取以獲取知識實體及實體之間的關系,然后對知識實體進行鏈接并進行本體推理、路徑推理等,最終構建完成的知識圖譜可以應用在如推薦系統、語義搜索等領域。
2 C++課程知識圖譜的構造
2.1 方法概述
當前,針對專業知識領域知識圖譜的構建依然處于一種探索階段,大部分專業知識領域的圖譜構造僅僅是一種概念間的關系建模,即針對概念中的顯性知識進行構建。李光明[14]認為課程知識圖譜的構造不僅要構建基本知識中的顯性知識點,而且要在此基礎上根據知識概念間的關系進行推理演繹,從而獲取知識圖譜中的隱性知識點。因此,在構建C++課程知識圖譜的過程中,不僅要針對領域概念這類基礎性知識進行劃分,同時也要考慮隱性知識的獲取。此外,專業知識領域的知識圖譜的構造過程中還需要專業教師和專家學者指導審核,并根據其建議進行相應的調整與改進。綜上所述,本文基于Neo4j圖數據庫構建一種C++課程的知識圖譜,整體流程圖如圖2所示。
從圖2可知,構建C++課程的知識圖譜,首先需要設計C++課程的知識模型,并獲取各知識模塊之間的關系,然后抽取課程中的知識點和知識點間的關系,并進行知識點層級和順序的分析,最后可視化出C++課程的知識圖譜。
2.2 知識模塊的設計以及模塊之間的關系
針對具體的課程,由于每個學生的學習能力和先驗知識的不同,因此,對于課程知識點的學習所需要的時間和精力也是不同的。但是不管學生如何學習,學生對課程知識點的學習必須符合教學大綱的要求。因此,對于C++課程而言,必須先充分了解課程大綱的需求和掌握各知識模塊以及模塊之間的關系。本文以《C++Primer(第五版)》課程大綱為主,以《Visual C++面向對象程序設計教程與實驗》和《C++面向對象程序設計》為輔,同時參考網絡上相關的C++課程資料作為補充,以此整體把握C++課程的大綱需求。
經過分析,本文將C++課程知識模塊分成以下5種,分別為:基本語法模塊、容器和算法模塊、類和數據抽象模塊、面向對象編程與泛型編程模塊以及高級主題模塊。見表1。
由表1可知,這5種知識模塊涵蓋了整個C++課程的所有知識,同時,大綱要求課程中的各個知識模塊的學習是按照一定的順序進行的,如圖3所示。除此之外,不同知識模塊又有各自的子模塊,以“類和數據抽象”為例進行說明,如圖4所示。
2.3 課程知識點的抽取
課程知識點的抽取需要參考相關的課程大綱和課程目錄,一方面在于課程大綱通常是由本專業的授課教師編寫,能夠以系統性、連貫性的形式敘述該課程的主要學習內容,另一方面在于課程目錄不僅可以反映課程的知識結構,同時也考慮了知識點間的學習順序。因此,根據課程大綱和課程目錄構造知識圖譜可以更好地反映學生完成相應的學習目標需要掌握的知識,幫助學生更好地梳理整個課程的知識脈絡。
根據課程大綱進行知識點的抽取主要是針對課程大綱中的文本關鍵詞進行提取,通常采用jeba中文分詞工具進行中文的分詞,并去除停用詞以及不相關的詞。本文以《C++》的課程大綱為例,對課程大綱中的學習目標及每一章節做分詞處理。課程大綱中的部分章節做分詞處理前、后對比表見表2。
從表2可以看出,切分后的知識點與原本知識點產生了很大的誤差,比如知識點“構造函數”,分詞后變成了“構造”、“函數”;知識點“對象數組”,分詞后變成了“對象”、“數組”。造成這種現象的原因在于分詞工具只是對通用詞進行處理,在傳統的分詞字典中并不包含這類專業詞語。所以對專業領域的數據處理,要有專業的語料。因此,對于C++課程知識點的提取,本文構建了自定義分詞典,并在分詞工具和課程目錄的輔助下,對分詞后的知識點重新定義和補充。得到新的知識點集合見表3。
通過對比表2和表3可以看出,重新定義后的知識點詞典能夠準確地切分出課程中的專業術語,進一步提高提取知識點的準確性。本文對《C++》課程中的所有章節進行相同的知識點提取及補充,共得到有效知識點的數量為316個。
2.4 關系抽取
2.4.1 知識點關系抽取
關系抽取的目的是為了獲取知識點間的關系,而采用分詞工具獲得知識點間的關系誤差較大,為了確保準確性,需要手動定義知識點間的關系,主要包括有:包含關系、屬于關系、進階關系、基礎關系、并列關系以及同義關系。其中“包含”和“屬于”,“進階”和“基礎”是一組相對關系,只要知道其中一種關系便可以推導出另外一種關系。對此擬做詳述如下。
(1)包含和屬于關系。包含和屬于這兩種關系用于描述知識點的從屬關系,表現為知識點間的層級性。課程中的粗粒度知識點可以拆分成更細粒度的知識點,如知識點A包含知識點B,也就是說知識點B是知識點A的進一步細化,B表示更具體的知識。在《C++》課程中,以“參數傳遞”知識點為例:參數傳遞可以拆分成“傳值參數”和“傳引用參數”,用三元組的形式可以描述為<參數傳遞,包含,引用參數>,<引用參數,屬于,參數傳遞>,如圖5所示。
(2)進階和基礎關系。進階和基礎這兩種關系用于描述知識點間的依賴關系,表現為知識點間的順序性。如知識點A是在知識點B已經掌握的基礎上進行學習的,則知識點A是知識點B的進階知識,基礎關系則相反,即知識點B是知識點A的基礎知識。這里以學習C++“語句”知識點為例:在掌握C++“語句”基礎上,才能學習“函數”這個知識點,用三元組的形式可以描述為<語句,進階,函數>,<函數,基礎,語句>,如圖6所示。
(3)并列關系。并列關系表示為課程中的知識點的學習不存在順序依賴性。如《C++》中的“控制邏輯運算符”和“算術運算符”知識點,用三元組的形式可以描述為<邏輯運算符,并列,算術運算符>,如圖7所示。
(4)同義關系。同義關系表現為多個知識點都可以對同一個概念進行描述。如知識點A可以對概念X描述,知識點B也可對概念X描述,則A和B具有同義關系。如對某個語句塊進行“異常處理”,可以使用throw表達式,也可以使用try語句塊進行處理。用三元組的形式可以描述為
經過知識點關系抽取后,4種關系數量對應見表4。
2.4.2 知識點層級和順序關系建模
為了統一描述,本研究從課程大綱中提取的實體統稱為知識點,然而在實際的學習中,知識點的學習應該由點到面,最終形成一個知識網絡。本文采用袁滿等人[15]提出的細粒度課程知識組織模型定義知識點的順序和層級關系,模型的定義如下。
定義1 知識點模型 該知識點不可分割成其它知識點,即語義層級最低,用Kp(Knowledge point)表示。
定義2 知識鏈模型 用Kc(Knowledge Chain)表示,是知識點的上一層級,知識鏈是知識點之間按照不同的邏輯關系組成的鏈狀結構。如式(1)所示:
其中,Kpi和Kpj表示不同的知識點,R表示知識點間的關系,分別為順序關系和層級關系。
定義3 知識單元Ku[WT5HZ](Knowledge Unit) 表示知識鏈的上一層級,知識單元是知識鏈組成。如式(2)所示:
定義4課程實體模型Kckem (Course Knowledge Entity Model,CKEM),表示知識單元的上一層級,由不同的知識單元構成。如式(3)所示:
本文將課程中的學習內容按照“知識點—知識鏈—知識單元”的形式組成知識實體模型,如圖9所示。
2.5 知識圖譜的可視化
本文采用Neo4j圖數據庫進行知識點的存儲,不同于傳統的關系型數據庫將數據存在庫表字段中,圖數據庫將數據和數據之間的關系存在節點和邊中,在圖數據庫中這被稱作“節點”和“關系”。任何一個關系包含一個開始節點、一個結束節點和一個由開始節點指向結束節點的邊組成,數據庫中所有節點通過各種關系聯系在一起。傳統數據庫的一些特性如增刪改查(CRUD)、處理事務的能力在圖數據庫中也都支持。Neo4j的圖模型如圖10所示。
圖10中的圓圈表示節點,節點間的有向連接線表示節點間的關系。根據提取到的知識點及知識點間的關系,結合節點和關系的固有屬性便可以構造知識圖譜,以三元組的形式<實體1,關系,實體2>存儲在圖數據庫Neo4j中。本文依據《C++》提取的知識點實體及其關系分別構造實體文件和關系文件,見表5和表6。將實體文件和實體關系文件導入Neo4j數據庫,最終C++課程知識圖譜可視化如圖11所示。
圖11展示了C++課程知識圖譜的局部知識點關系。圖11中的綠色節點表示C++課程名,紅色節點表示知識點單元,藍色節點表示知識鏈,黃色部分表示具體的知識點。
3 C++課程知識點的推理實驗
知識點在知識圖譜中的快速檢索依賴于知識點間的錯綜復雜的關系,本文在構造《C++》課程知識圖譜時建模了4類關系,分別是:包含(include)和屬于、進階(advance)和基礎、并列(prarllel)和同義(synonym)。針對4種關系的實驗結果分述如下。
(1)包含和屬于關系。包含和屬于是一組相對關系,知道其中一個關系就可以推導出另外一個關系,在構造知識圖譜時只需構造其中一個關系即可。這類關系描述的是知識點的層級性。以知識點“表達式”為例,該知識點的包含和屬于關系實驗結果如圖12所示。
圖12表明了知識點“表達式”既屬于 “C++11”, 同時又包含知識點集合{“位運算符”,“算術運算符”,……}等12個知識點。
(2)進階和基礎關系。進階和基礎也是一組相對關系,同理,在構造知識圖譜時只需要構造其中一個關系即可。這類關系描述的是知識點的順序性。以知識點“條件語句”為例,該知識點的進階和基礎關系實驗結果如圖13所示。
圖13表明了知識點“條件語句”的進階知識點集合為{“迭代語句”,“跳轉語句”},基礎知識點集合為{“語句作用域”,“簡單語句”}。需要注意的是,本文默認的進階和基礎知識點的輸出深度為2。
(3)并列關系。并列關系描述的是知識點的學習既不存在順序關系、也不存在層級關系,如知識點“break語句”、“continue語句”和“goto語句”,這3類知識點都表示語句的跳轉,而“break語句”強調的是跳出剩余的循環、“continue語句”強調跳出當前循環;“goto語句”則強調跳入指定的語句內執行。并列關系實驗結果如圖14所示。
(4)同義關系。同義關系描述的是不同的知識點可以對同一個概念進行解釋,如知識點“if語句”和“switch語句”,這2個知識點都可以對語句的執行進行條件判斷。同義關系實驗結果如圖15所示。
4 結束語
本文詳細介紹了C++課程領域知識圖譜的構建過程,主要包括本體數據模型搭建、知識點獲取、關系抽取和知識圖譜可視化四個部分。首先分析了課程大綱中對知識點內容的概括,使用jieba分詞工具和人工輔助的方式從數據集中獲取知識實體,然后根據人工構建的關系詞典抽取了實體間的關系,最后用Neo4j圖數據庫將獲取的實體信息以及關系信息進行知識存儲并可視化。雖然構造好的知識圖譜可以根據具體學習場景完成知識點的推理,但是構造知識圖譜的過程中需要專業教師的干預,降低了構建過程的智能化。下一步將重點研究在不影響推理準確率的基礎上,提高知識圖譜的構造流程智能化。
參考文獻
[1]阮彤,孫程琳,王昊奮,等. 中醫藥知識圖譜構建與應用[J]. 醫學信息學雜志,2016,37(4):8-13.
[2]董小倩,張小花. 傳統課堂與智慧課堂教學對比研究[J]. 現代交際,2019(2):12-13.
[3]孫涵,齊悅. 知識圖譜在老年教育中的應用[J]. 電子技術與軟件工程,2020(19):186-188.
[4] 吉婷婷. 我國地理學科核心素養研究的格局演進—基于關鍵詞的知識圖譜分析[J]. 地理教學,2020(17):4-9,61.
[5]王蘭成. 多學科視域網絡輿情知識圖譜研究的現狀和展望[J]. 情報學報,2020,39(10):1104-1113.
[6]張春霞,彭成,羅妹秋,等. 數學課程知識圖譜構建及其推理[J]. 計算機科學,2020,47(S2):573-578.
[7] 覃曉,廖兆琪,施宇,等. 知識圖譜技術進展及展望[J]. 廣西科學院學報,2020,36(3):242-251.
[8]HE X, LIAO L, ZHANG H, et al. Neural collaborative filtering[C]// Proceedings of the 26th International Conference on World Wide Web. Perty,Australia:ACM, 2017:173-182.
[9]姚萍,李坤偉,張一帆. 知識圖譜構建技術綜述[J]. 信息系統工程,2020(5):121,123.
[10]曹皓偉,徐建良,竇方坤. 基于Neo4j生物醫藥知識圖譜的構建[J]. 計算機時代,2020(6):35-38.
[11]王毅,沈喆,姚毅凡,等. 領域事件圖譜構建方法綜述[J]. 數據分析與知識發現,2020,4(10):1-13.
[12]CAO Yixin, WANG Xiang, HE X, et al. Unifying knowledge graph learning and recommendation: towards a better understanding of user preferences[C]// Proceedings of the International Conference on World Wide Web. SAN FRANCISCO CA USA:ACM, 2019:151-161.
[13]劉嶠,李楊,楊段宏,等. 知識圖譜構建技術綜述[J]. 計算機研究與發展,2016,53(3):582-600.
[14]李光明. 初中化學學科知識圖譜的構建與可視化查詢系統的實現[D]. 上海:上海師范大學,2020.
[15]袁滿,仇婷婷,胡超. 細粒度課程知識元組織模型及知識圖譜實現[J]. 吉林大學學報(信息科學版),2019,37(5):526-532.
基金項目: 國家重點研發計劃資助(2019YFB1802700); 上海工程技術大學研究生創新計劃資助項目(19KY0232)。
作者簡介: 郎亞坤(1994-),男,碩士研究生,主要研究方向:推薦系統、智能教育;蘇 超(1993-),男,碩士研究生,主要研究方向:圖像處理、智能教育;王國中(1962-),男,博士,教授,博士生導師,主要研究方向:數字音視頻信息處理、智能信息處理、智慧教育等;李國平(1974-),男,博士,高級工程師,主要研究方向:音視頻編碼、智能媒體處理、機器學習與識別等。
通訊作者: 王國中Email:wanggz@sues.edu.cn
收稿日期: 2020-12-20