APP下载

程序设计语言课程知识图谱构建研究*

2022-12-12肖明胜郭英清罗家梅

赣南师范大学学报 2022年6期
关键词:程序设计实例本体

肖明胜,王 敏,2,†,郭英清,罗家梅

(1.赣南师范大学 数学与计算机科学学院;2.江西省数值模拟与仿真技术重点实验室,江西 赣州 341000)

1 引言

课程知识图谱是知识图谱(Knowledge Graph,KG)在教育领域的特例,是教育知识图谱的重要组成部分,旨在为课程教学提供帮助.作为一种基础性教育资源,课程知识图谱对课程知识及复杂语义关系建模,为教学提供优质知识网络,以及内含前驱后继关系的知识点序列,帮助学习者建立个人学习路径和形成课程知识体系;为知识问答、认知诊断、个性推荐等提供语义支持,从而满足学习者个性化学习的需要.

近年来,研究者们不断研讨课程知识图谱的定义与内涵并提出相应的构建方式[1-3],课程知识图谱越来越受到关注.其中,文献[4]和文献[5]分别研究计算机基础和JAVA程序设计语言课程知识的本体.文献[6-10]讨论单一课程的知识图谱构建,但不全是以知识概念为基本单位而是以课程知识章节作为基本构建单位.因此,这些课程知识图谱中存在以下问题:知识粒度不细、本体不明确;构建的本体移植性差,面对不同的课程往往需要重新设计本体,难以适用于多门课程;构建的课程单一,难以形成领域体系.

针对上述课程知识图谱中出现的问题,本文选取3种主流的程序设计语言作为研究对象,利用Gruber所提的本体构建准则[11]和七步法[12]构建程序设计语言课程本体;然后考虑程序设计语言课程特点采用自顶向下方式构建课程知识图谱.具体而言,在Gruber所提准则的基础上制定课程本体4个准则,即客观准则、逻辑准则、通用准则和可拓展准则,这保障了课程知识本体构建的合理性.在七步法的框架下抽象出C、JAVA和Python 3门语言的共性,并引入了专家质量评估机制,这保障程序设计课程本体的清晰性和可复用性,提高知识本体的构建质量.进一步,提出程序设计语言课程知识图谱的构建方法,构建了包含6类知识点概念和4类知识点关系,实例化了C、JAVA和Python的程序设计语言课程知识图谱.最后实现了知识图谱的存储、查询与可视化.

2 相关工作

2.1 知识图谱

2012年5月17日由Google正式提出知识图谱的概念,并用于搜索引擎中以提高语义分析能力[13].知识图谱源于传统知识工程和专家系统,吸收了语义网络、本体论、万维网、语义网等的理论与技术.随着大数据时代的到来,知识图谱的发展进入新的阶段.

从知识涉及的范围来看,可将知识图谱分为通用知识图谱与领域知识图谱两种类型.通用知识图谱在于知识的广度,国外典型的通用知识图谱有百科图谱DBpedia[14]、词汇图谱BabelNet[15]、概念图谱Probase[16]等;国内的通用知识图谱通用有开放知识图谱openKG[17]、百科类图谱Zhishi.me[18]和CN-DBpedia[19]等.领域知识图谱在于知识的深度,目前在一些垂直领域已得到应用,如电影知识图谱IMDB[20]、医学知识图谱UMLS[21]和电商知识图谱[22]等.除了组织领域知识的知识图谱应用外,还应用于互联网技术中,典型技术如智能搜索[23]、个性化推荐[24-25]和问答系统[26-27]等.随着对知识图谱的深入研究,知识图谱技术取得巨大进步,各环节中使用的技术方法不断创新发展,但如何自动构建高质量的知识图谱依然是一大难题.

2.2 课程知识图谱

知识图谱的构建方法分为自顶向下和自底向上的构建[28].由于课程知识的专业性,通常利用自顶向下的方法构建知识本体,再构建课程知识图谱.本体构建成为知识图谱构建中必不可少的环节.

在课程知识图谱的本体构建方面,Lee等[4]构建JAVA程序设计语言课程的知识本体,涵盖JAVA基本知识与编程技巧,是本体构建在此领域的成功应用.张萌[5]阐述课程知识本体的概念,按照本体学习层次结构进行层级抽取,分析课程数据与知识本体的组织.

2.3 知识图谱的存储与可视化

目前,知识图谱中的知识存储主要分为3类,即基于关系型数据库存储、基于RDF数据库存储和基于图数据库存储.关系型数据库发展至今已十分成熟,能够满足大多数的存储需求,但面对海量的知识及属性,还存在着查询效率不高、更新维护开销大的问题[30].基于RDF[31]数据库的存储方案在知识共享方面有着较强的能力,但更新维护代价仍然较大.图数据库面对大规模数据存储表现良好,在多跳查询等任务中十分高效,是企业级知识图谱存储实现的重要方法[32].

由节点和边组成的节点链接图是我们较常见的展现形式[33],该形式可视化结果简洁、表达能力强,让我们更直观地浏览知识.常见的知识图谱可视化方案有基于现有工具可视化和基于第三方库可视化.基于现有工具可视化是指使用现有图数据库等产品,可视化操作便捷、效果好,但需要一定领域知识与技术基础,对于复杂数据交互有一定局限性,典型的可视化工具如Neo4j[34]和AntV G6[35]等.基于第三方库的可视化是指引入专门用于数据建模的JavaScript库,通过前端网页实现数据的交互,适用范围广,对普通用户友好,但该方案开发成本较高,典型的可视化库如D3js[36]和Cytoscape.js[37]等.

3 课程知识图谱构建方法

程序设计语言课程知识图谱构建框架如图1所示,包括本体构建和根据本体构建课程知识图谱两个重要步骤.

图1 课程知识图谱构建步骤

3.1 本体构建

3.1.1 本体构建准则与方法

基于Gruber的5项构建原则[4],结合程序设计课程知识具有极强的专业性和实践性特点,提出程序设计课程知识本体的4个构建准则:客观准则.课程知识是正确、客观、与实际应用一致的,并受到广大研究人员与实际使用者认可.逻辑准则.将细粒度化的知识按实际关系构建层次结构,以便于循序渐进地学习与理解.通用准则.本体框架对于程序设计领域下的其他类似课程具有可复用性.可拓展准则.本体可拓展,便于知识图谱的完善与改进.以上准则能够保障课程知识图谱本体有着质量良好、结构清晰、可复用与可拓展的特点.

何良诸提出要求,见见赵集、小勺。公安局爽快地同意了,派车将何良诸送到拘留所。何良诸进入高墙电网内,来到接见室,坐下。赵集走出来,坐在他的对面。何良诸抄起话筒,说:“赵集,多少年没见面了,来看看你。”

进一步,针对7步法[12]在本体质量评估方面较为薄弱的问题进行补充,并遵循上述构建准则,提出程序设计课程知识本体的构建方法,具体如下:确定领域范畴.以程序设计语言课程为范畴,选取C、JAVA、Python 3门程序设计语言课程的知识内容作为构建对象.术语提取.收集课程相关的资料,参考现有课程知识体系的描述与本体并考虑复用,提取描述相对标准的术语.当领域中产生新知识时,通过本步骤拓展更新本体.概念与关系提取.以字或词为单位,提取在程序设计过程中常用的或重要的概念以及概念间的关系,同时使这些概念与关系整体上能够概括构建对象的主体部分.概念与关系类型划分.程序设计是一项逻辑性极强的工作,本文从程序组成结构的角度出发,为概念与关系划分明确的类型.组织本体框架.将第步中划分的不同类型的概念与关系进行关联,形成层次结构,构成本体框架的主体.本体属性补全.补全各概念与关系属性,如唯一标识ID、定义与特点等,通过若干属性通用地描述每个概念与关系的含义.质量评估.通过专家工作对构建出的本体进行审核评估,判断概念或关系是否符合实际、需要调整或删除,调整则返回到第步并继续执行.

从程序设计的角度来看,不同程序设计语言存在共性,即通过何种程序设计语言来实现一个程序,程序都拥有类似的生命周期,其中每个环节都由不同的知识组成.通过这种“寻找共性”思想构建的本体框架对其他程序设计语言具有适用性,同时将不同程序设计语言的知识联系起来对比学习,增强程序设计领域知识与程序设计课程体系内的紧密性.

3.1.2 程序设计语言知识本体

构建的程序设计语言知识本体将所有知识点概念分为2部分:静态概念与动态关系.静态概念指程序设计课程中的事物或方法等知识,例如“函数”“数组”等,本文将其作为知识图谱中的节点.动态关系本质上也是知识点概念,但其具有动态的特性,能描述具体的行为动作,例如“调用”“声明”等,本文将其作为知识图谱中的边.

图2 静态概念

动态关系如图3所示,分为4类:包含关系、组成关系、实例化关系与操作关系.包含关系指两者属于同一类型的概念且前者所指的范围将后者包含着,如“基本数据类型”与“整型数据”的关系,“整型数据”就是一种“基本数据类型”.组成关系指两者存在整体与部分的关系,如“自定义函数”与“语句”的关系,“语句”是“自定义函数”的一部分.实例化关系指本体中的节点与其在某个课程领域中实例化得到的实体节点间的关系,如“整型数据”与C语言程序设计课程中的某个整型变量.

图3 动态关系

操作关系主要表达不同类型静态概念间的关系,而其它3种关系主要表达各个类型静态概念内的关系.更详细地,本文将操作关系按照主体的不同分为3种类型:人对程序的操作,如“运行”“调试”等.程序与外部资源间的操作,与文件相关的如“读”“写”等.程序内的操作,与数据相关的如“初始化”“声明”“定义”等.这3种类型的操作关系基本涵盖了程序生命周期的相关行为动作,能够详细地表达概念间的具体关系.如图4所示,“函数”与“自定义函数”“库函数”是包含关系,可转化成<函数,包含,自定义函数>和<函数,包含,库函数>的三元组形式.“自定义函数”与“数组”间存在着操作关系,可转化为<自定义函数,操作,数组>的三元组形式.操作关系的引入使得概念间语义关系更加丰富.

图4 概念和关系示例

3.2 课程知识图谱构建

3.2.1 构建方法

与通用知识图谱相比,程序设计语言课程知识图谱是针对程序设计特定领域,其概念相对固定且概念数量较少;另外,它几乎不允许出现错误,构建质量要求高.因此,本文采用自顶向下的人工方式构建程序设计语言课程知识图谱.具体步骤如下:

课程知识实例化是从本体框架到课程领域范围内知识的映射,以本体框架为骨架,将本体框架中的知识概念在课程中具体化.将本体框架中七类静态概念逐一实例化,按关系指向方向即抽象程度由高到低的顺序进行.

以C语言程序设计课程为例,图5描述对本体框架静态概念中“数据模型”的部分分支进行实例化,实例化的先后顺序为:“数据模型”“数据类型”“构造数据类型”“结构体”“联合体”“数组”“指针”“枚举”.在这里不对“类”进行实例化的原因是C语言不支持类和对象的概念.由此可见,对于一门课程而言,并不是本体框架中所有的概念都能在该课程领域内实例化,需要根据课程知识的实际情况处理.由于本体框架针对程序设计语言领域的通用性设计,以上课程实例化的方法可以应用到其他课程.

图5 课程知识实例化示例

课程知识关系补全是为课程实例化后得到的所有课程知识节点关联关系,在添加关系的过程中同时要按照课程实际情况进行.按照本体框架实例化出来的课程知识节点之间,存在着与本体框架中同样的关系,因此为课程知识节点间添加的关系在程序设计课程知识本体中4种动态关系的范围内.关系补全按照概念的抽象程度,由抽象到具体的顺序进行.

以C语言程序设计课程中的“构造数据类型”和“数组”2个概念间的关系补全为例(如图6所示).2个节点分别由本体框架中的“构造数据类型”和“数组”2个概念实例化而来,在本体框架中两者存在着包含关系,由它们实例化得到的节点间同样存在着包含关系.对于其他课程,同样采取本方法进行课程内的知识关系补全.

图6 课程知识关系补全

对所有的课程知识节点的属性进行补全,每个节点拥有标识、定义、特点等属性.“标识”属性由工具生成唯一字符串.“定义”属性是用于描述知识节点的本质特征,通俗来说是解释该概念是什么的问题.“特点”属性是用于描述知识节点的规则、特性等特殊之处.

例如C语言程序设计课程中的概念“数据类型”,其定义为“指在C语言中用于声明不同类型的变量或函数的一个广泛的系统”,其特点为“一个数值的数据类型决定了它存储所占用的空间,不同数据类型的数据需要不同大小的空间来存储”.此外,还可按照节点的类型或需求设置其他属性.

3.2.2 构建结果

通过上述方式,构建程序设计语言知识本体,包含6类概念和4种关系,共计80个概念(节点)和79条关系(边),具体数据如表1所示.6类概念包括数据模型概念、表达式概念、输入输出概念、执行方式概念、函数概念、程序设计方法概念.4种关系包括包含关系、组成关系、实例化关系、操作关系.目前,程序设计语言课程知识图谱中的有C、JAVA、Python,共计395个概念(节点)和391条关系(边),其中包含的概念和关系类型与本体一致.

表1 构建结果

与其它课程知识图谱相比,本文没有单纯采用以章节为单位的目录式本体结构,而是以单个概念为节点,细化知识粒度,强调概念间的关联关系.概念与关系的类型更加多样,尤其是动态关系中操作关系的引入,使得图谱更加丰富.随着新课程的引入,本文的知识图谱包含的概念与关系的数量将不断上升并发展完善.

4 课程知识图谱的存储与可视化

4.1 课程知识图谱的存储

为满足复杂查询与大量课程知识存储需求,选择图数据管理方式自由、支持ACID事务和Cypher查询语言的图数据库Neo4j来存储课程知识图谱.首先将课程知识图谱中所有节点与边的内容整理成表格形式的结构化数据,然后用计算机程序批量拼接Cypher语句把这些数据持久化到Neo4j图数据库.数据的存储过程如图7所示.

图7 课程知识图谱的存储

4.2 课程知识图谱可视化

选用Neo4j图数据库中自带的Neo4j Browser工具实现课程知识图谱的可视化.构建的程序设计语言知识本体和C、JAVA、Python程序设计语言课程知识图谱可视化结果如图8、图9.

图8 本体可视化 图9 本体可视化

5 结语

本文对C、JAVA、Python程序设计语言课程知识建模,构建课程知识本体与课程知识图谱,并提出相应的构建准则、方法和结果,以此为课程教学提供知识服务.在今后的研究中,我们将引入人工智能方法辅助知识实体识别与关系抽取,进一步完善和丰富程序设计语言知识图谱,为课程教学、课程知识问答等应用提供更加丰富的语义信息与技术支持.

猜你喜欢

程序设计实例本体
医学专业“Python程序设计”课程教学改革总结与思考
眼睛是“本体”
基于Visual Studio Code的C语言程序设计实践教学探索
从细节入手,谈PLC程序设计技巧
基于本体的机械产品工艺知识表示
高职高专院校C语言程序设计教学改革探索
完形填空Ⅱ
完形填空Ⅰ
专题
Care about the virtue moral education