APP下载

基于Neo4j的C++课程知识图谱的构建和推理

2021-12-07郎亚坤苏超王国中李国平

智能计算机与应用 2021年7期
关键词:知识图谱

郎亚坤 苏超 王国中 李国平

摘 要: 当前教育领域对知识图谱的研究大多停留在对学科间知识图谱的研究上,而这类知识图谱普遍存在节点、关系和属性单一,以及知识点划分颗粒度较粗等问题。然而,在实际教学过程中,学科内的知识图谱对学生的作用更大,比如:当学生对某一知识点掌握程度不够的情况下,可以根据知识图谱找到与当前知识点相似的知识点或者基础知识点进行补充学习;或者对某一知识点已经掌握的情况下,可以根据知识图谱找出下一个要学的知识点等等。因此,本文基于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语句块进行处理。用三元组的形式可以描述为,如图8所示。

经过知识点关系抽取后,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

猜你喜欢

知识图谱
国内外智库研究态势知识图谱对比分析
国内信息素养研究的知识图谱分析
国内图书馆嵌入式服务研究主题分析
国内外政府信息公开研究的脉络、流派与趋势
基于知识图谱的产业集群创新绩效可视化分析
基于知识图谱的产业集群创新绩效可视化分析
基于知识图谱的智慧教育研究热点与趋势分析
国内酒店品牌管理研究进展的可视化分析
从《ET&S》与《电化教育研究》对比分析中管窥教育技术发展
专家知识图谱构建研究