CN107729925B - 对程序竞赛型源代码按照解题方法做自动分类与评分的方法 - Google Patents
对程序竞赛型源代码按照解题方法做自动分类与评分的方法 Download PDFInfo
- Publication number
- CN107729925B CN107729925B CN201710883195.2A CN201710883195A CN107729925B CN 107729925 B CN107729925 B CN 107729925B CN 201710883195 A CN201710883195 A CN 201710883195A CN 107729925 B CN107729925 B CN 107729925B
- Authority
- CN
- China
- Prior art keywords
- program
- statement
- node
- transformation
- operator
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
- G06F18/241—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/21—Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
- G06F18/217—Validation; Performance evaluation; Active pattern learning techniques
- G06F18/2193—Validation; Performance evaluation; Active pattern learning techniques based on specific statistical tests
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/23—Clustering techniques
- G06F18/232—Non-hierarchical techniques
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Evolutionary Computation (AREA)
- Quality & Reliability (AREA)
- Computer Hardware Design (AREA)
- Probability & Statistics with Applications (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种对程序竞赛型源代码按照解题方法做自动分类与评分的方法,包括:对数据库中针对问题P的各程序在抽象语法树上做程序变换,获得标准化后的程序;从标准化后的程序或程序片段中提取特征,获得所有的特征集合;基于提取的所有的特征集合进行多实例多分类学习,获得分类模型;利用分类模型对新输入的针对问题P的各程序进行自动分类,并进行评分。该方法可以根据程序源代码按照解题方法准确的实现分类与评分。
Description
技术领域
本发明涉及计算机应用技术领域,尤其涉及一种对程序竞赛型源代码按照解题方法做自动分类与评分的方法。
背景技术
目前主要有如下两种方式实现程序解题方法的分类与评分:
现有技术一:将程序源代码代入多组测试数据运行,按照通过的测试点数据数目给程序做评分。不足之处在于死板、机械地按照程序源代码通过的测试点数据数目给程序做评分会导致评分的不公平,比如通过测试数据少的源代码有可能非常接近正确的程序,只是存在一些小错误。
现有技术二:使用机器学习方法做程序评分:特征从程序的抽象语法树、控制流图、数据依赖图中提取,程序由好到差被分为五个等级。不足之处在于无法对多解法的程序进行评分。
现有技术三:使用无监督学习方法对语义相似的程序做聚类。不足之处在于这种分类的粒度过细,是语言层次上的分类,而不是算法层次上的,相同的解法不同的实现也会被分到不同的类别。
发明内容
本发明的目的是提供一种对程序竞赛型源代码按照解题方法做自动分类与评分的方法,可以根据程序源代码按照解题方法准确的实现分类与评分。
本发明的目的是通过以下技术方案实现的:
一种对程序竞赛型源代码按照解题方法做自动分类与评分的方法,包括:
对数据库中针对问题P的各程序在抽象语法树上做程序变换,获得标准化后的程序;
从标准化后的程序或程序片段中提取特征,获得所有的特征集合;
基于提取的所有的特征集合进行多实例多分类学习,获得分类模型;
利用分类模型对新输入的针对问题P的各程序进行自动分类,并进行评分。
由上述本发明提供的技术方案可以看出,使用多实例学习技术可以对程序源代码按照解题方法准确的进行准确的分类,在此基础上,可以对多解法题目的程序做自动评分,可以避免几乎完整地按照某种解法写出的程序,不会因为一点小错误而得低分,从而提高评分的准确性。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他附图。
图1为本发明实施例提供的对程序竞赛型源代码按照解题方法做自动分类与评分的方法框架图;
图2为本发明实施例提供的为运算符’*’和’+’在语法树上的一次出现的示意图;
图3为本发明实施例提供的为运算符’*’和’+’在数据依赖图上的一次出现的示意图;
图4为本发明实施例提供的五道题目的混淆矩阵。
具体实施方式
下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明的保护范围。
本发明实施例提供一种对程序竞赛型源代码按照解题方法做自动分类与评分的方法,整个方法的框架图如图1所示,其主要包括如下几个步骤:
步骤1、对数据库中针对问题P的各程序在抽象语法树上做程序变换,获得标准化后的程序。
本发明实施例中,程序变换的目的是在确保语义不变的前提下减少语法的差异性。在做变换之前,给主体部分只有一条语句的if/switch/for/while/do-while语句添加一对大括号“{}”。
示例性的,对for语句添加大括号的情况如下所示:
for(表达式1;表达式2;表达式3)语句1
→for(表达式1;表达式2;表达式3){语句1}
本领域技术人员可以理解,上述示例中的符号“→”表示处理(或者变换)结果,后文类似。
本发明实施例的程序变换主要包括六个方面:控制语句变换、运算顺序敏感的运算符的变换、有副作用的运算符的变换、算术表达式的变换、逻辑表达式的变换和其他表达式的变换;其中:
1)控制语句变换:C语言中控制语句包含if语句、switch语句、for语句、while语句和do-while语句;将switch语句转化为if语句,将for语句和do-while语句转化为while语句。即共有三种变换规则,下面给出两种变换示例:
示例1:
for(表达式1;表达式2;表达式3){...}
→表达式1;while(表达式2){...表达式3;}
示例2:
do{...}while(表达式);
→while(true){...if(!表达式)break;}
2)运算顺序敏感的运算符的变换:C语言中,规定运算顺序的运算有:“&&”、“||”、“?:”和“,”。“&&”与“||”运算符是逻辑运算符,后文介绍逻辑表达式的变换时也会提到。对运算顺序敏感的运算符做变换的主要思想是引入临时变量,将一条语句分割成运算顺序不敏感的多条语句。
变换规则一共有三条,同样给出两条变换示例:
示例1:
...表达式0,表达式1...;
→...表达式0;临时变量1=表达式1;临时变量1...;
示例2:
...表达式0?表达式1:表达式2...;
→if(表达式0){临时变量1=表达式1;}
else{临时变量1=表达式2;}...临时变量1...;
3)有副作用的运算符的变换:C语言中有副作用的运算符有:“++(前缀)”、“–-(前缀)”、“++(后缀)”、“–-(后缀)”、“=”、“+=”、“-=”、“*=”、“/=”、“%=”、“<<=”、“>>=”、“&=”、“^=”和“|=”。变换的目标是将所有副作用的运算符统一为“=”运算符,且每条语句最多只有一个赋值运算符。
这种变换的变换规则共有22条,同样给出两条变换示例:
示例1:
while(...++左值表达式...){...}
→左值表达式+=1;
示例2:
左值+=表达式;
→左值=左值+表达式;
4)算术表达式的变换:算术表达式是含有以下运算符的表达式:“+(双目)”、“-(双目)”、“*”、“/”、“%”、“+(单目)”和“-(单目)”。按照下面的思路做变换:先用分配率展开表达式,然后消去单目的“+”(即“+(单目)”)运算符,并将双目的“-”(即“+(双目)”)运算符转化为单目的“-”(即“-(单目)”)运算符和双目的“+”(即“+(双目)”)运算符,最后将单目的“-”运算符上移,即将负号往语法树根部移动。
使用的变换规则共有九条,下面给出六条变换示例:
示例1:+表达式→表达式
示例2:表达式1-表达式2→表达式1+(-表达式2)
示例3:(-表达式1)+(-表达式2)→-(表达式1+表达式2)
示例4:(-表达式1)*(-表达式2)→表达式1*表达式2
示例5:(-表达式1*表达式2)→-(表达式1*表达式2)
示例6:--表达式→表达式
5)逻辑表达式的变换:由于C语言的逻辑运算符中的被运算数的值对运算有影响,因此大量逻辑运算定律规则无法使用,常见的只有双重否定律和德·摩根律可以使用,因此他们成了在变换过程中使用的规则。
下面给出三条变换规则示例:
示例1(双重否定律):!!表达式1→表达式1
示例2(德·摩根律1):
!(表达式1&&表达式2)→(!表达式1||!表达式2)
示例3(德·摩根律2):
!(表达式1||表达式2)→(!表达式1&&!表达式2)
6)其他表达式的变换。
包括:分别为对数组表达式的标准化,对结构体成员运算符的标准化和两条对关系表达式的标准化。
有如下四条变换规则应用于程序标准化:
示例1:左值[表达式]→*(左值+表达式)
示例2:a->b→*(a).b
示例3:(表达式1>=表达式2)→!(表达式1<表达式2)
示例4:(表达式1<=表达式2)→!(表达式1>表达式2)
步骤2、从标准化后的程序或程序片段中提取特征,获得所有的特征集合。
在这一步骤中,将从标准化后的程序或程序片段中提取特征。将提取的特征分为四类:简单特征、语法树特征、数据依赖图特征和控制语句特征。在介绍之前,先形式化定义一些变量,这可以为后面形式化介绍特征提供便利。
其中,TYPE∈{KW,OP,VAR,CONST}代表节点的类型,value∈TYPE代表节点的具体取值;nson∈N代表子节点的个数,N为自然数集合,nson元组代表nson个子节点,将语法树节点的定义简化为:
数据依赖图节点集合记为NODEDDG,数据依赖图节点nodeDDG∈NODEDDG定义为如下形式的六元组:
其中,op∈OP是运算符,是操作数,nvalue是运算符op的操作数,lvalue∈VAR是存储运算结果的变量;这里l为任意的1到nnext之间任意的整数,nodeDDG被一条有向边关联,并且nodeDDG是头节点,nextl是尾节点,将数据依赖图节点的定义简化为:
提取各特征方法(主要是提取特征的次数)如下:
a、提取简单特征:简单特征包括不同保留字和运算符在程序或者程序片段中出现的次数;比如,运算符“+”在程序中出现的次数。
保留字kwo程序或者程序片段中出现的次数由下式定义:
其中,函数1{x}(x为逻辑表达式)的取值范围为{0,1};符号“.”是一个二元运算符,第一个被操作成员是一个多元组,第二个被操作成员是该多元组中的某一项,运算结果是该多元组中该项的值;
运算符opt在程序中出现的次数由下式定义,其中t为任意的1到nop之间任意的整数:
和:
上述两式中t均表示为任意的1到nop之间任意的整数,共有67个简单特征,包含所提取的简单特征的集合记为XSimple;
b、提取语法树特征:语法树特征包括不同运算符对(二元组)出现在语法树同一条边的两个节点上的数目,定义为:
上述两式中t和s均表示为任意的1到nop之间任意的整数,node0和node1为某两个语法树上的节点。共有441个语法树特征,包含所提取的语法树特征的集合记为XAST;
如图2所示,为运算符’*’和’+’在语法树上的一次出现的示意图。
c、提取数据依赖图特征:数据依赖图特征包括不同运算符对(二元组)出现在数据依赖图同一条边的两个节点上的数目,定义为:
上述两式中t和s均表示为任意的1到nop之间任意的整数,l为1到nnext之间任意的整数共有441个数据依赖图特征,包含所提取的数据依赖图特征的集合记为XDDG;
如图3所示,为运算符’*’和’+’在数据依赖图上的一次出现的示意图。
d、提取控制语句特征:
1)不同的控制结构和控制结构组合在程序中出现的次数,其中控制结构组合while-if出现的次数:
其中,f为1到node0节点的深度之间的任意值;
2)不同保留字和运算符在控制语句的条件表达式中出现的次数;
共有25个控制语句特征,包含所提取的控制语句特征的集合记为XControl;
则提取的所有的特征集合Xall为:
Xall=Xsimple∪XAST∪XDDG∪XControl。
后续模型中使用的947维特征向量x按固定顺序包含了集合Xall的所有元素。
步骤3、基于提取的所有的特征集合进行多实例多分类学习,获得分类模型。
在多实例多分类学习中,训练集中的元素被称为包裹,一个包裹包含多个被称为实例的特征向量;特征向量按照固定顺序包含了提取的所有的特征集合Xall中的所有元素;一个包裹被标记为正类当且仅当它包含至少一个正类实例,其余情况皆被标记为负类,目标是对未做标号的包裹做分类(正类或负类);
将程序的源代码看成包裹,将程序的每一块看成实例,使用某个确定的解题方法的程序被标为正类;程序块是按照大括号来划分的,在同一个大括号中的程序段被分为一块;
再介绍模型之前,先针对模型中所涉及的数学符号进行介绍,假设问题(题目)P∈P,其中P为编程题目集合。在训练集中,问题P共有NP份源代码,有mP种解法,第i种解法的源代码的数目为 用符号Progij表示第i种解法的第j个程序,1≤i≤mP;CP(Progij)和分别表示程序Progij的真实类别和预测类别,程序的块数为程序的第k块的特征向量为程序所有块的特征向量组成的集合即为一个包裹,表示为:
采用多实例支持向量机模型来做分类,在单实例支持向量机模型中,我们的目标是寻找一个使正例点和负例点分得最开(最大间隔)的超平面。而在多实例支持向量机模型中,实例的类别是未知的,只有包裹的类别已知。所以最大间隔不仅依赖于超平面,还依赖于实例的标签。具体到本发明实施例中,需要优化下列表达式:
式中,是松弛变量集合,为单个变量,假设x′P是待预测的程序的特征向量,φ(x′P)是使用原始空间到特征空间的映射后的特征向量,也就是将函数φ作用于特征向量上;假设超平面每个维度的斜率和截距固定,那么φ(x′P)到超平面的距离用下式计算:
上述训练过程可以通过常规方式实现,简述如下:1、实例的标签的初始化为实例所在包裹的标签;2、使用目前的实例的标签训练一个支持向量机分类器;3、更新包裹的标签,更新后如果包裹标签无变化则结束,否则转到第2步。
步骤4、利用分类模型对新输入的针对问题P的各程序进行自动分类,并进行评分。
在训练完成之后,就可以进行分类预测工作。当然,对于对新输入的针对问题P的各程序也需要进行步骤1~步骤2的标准化与特征提取操作。
假设某一新输入的针对问题P的程序为Prog′P,实例数目为L,则程序Prog′P的实例集是B′={x′h:1≤h≤H},则结合Prog′P、B′={x′h:1≤h≤H}以及函数进行计算,从而输出分类预测结果
举例来说:现有技术二提出了使用无监督方法对单解法问题的程序做自动评分的方法。对于多解法程序,我们在对程序分类之后,对每一类分别使用现有技术二中提出的方法做评分。具体地,对问题P的一个新的程序被分到的类别为:记这个程序在该类别内的得分为: 对应现有技术二中五档。另外,我们记算法的得分(优劣)为SMS,类别C的SMS记作SMS由专家来给出。最终,程序的得分为:
这里所提到的基于分类预测结果进行评分只是其中一种应用,还可以自动给学生推荐相似且正确的程序,也可以筛选新型解法来辅助老师教学。具体来说:所述问题P为多解法题目,对新输入的针对问题P的各程序进行自动分类后,如果相应的分类结果表示对应程序源代码错误,则推荐与对应程序源代码解法相同,内容最接近的正确程序源代码;或者,多实例多分类的学习结果包含mP个分类器,如果所有的分类器都把某个程序源代码分到负类,则向老师发出消息,提示相关程序源代码为问题P的新型解法。
以自动给学生推荐相似且正确的程序为例:
如果一个程序被系统判定为错误的,且学生向系统提出需求,系统将会给学生推荐一个和他解法相同,内容与他最接近的正确程序。具体地,假设一个学生提交了针对问题P的错误程序系统分的类别为程序“包裹”中的正例特征向量为:则被推荐的程序为:
本发明实施例提供的上述方案将程序按照解题方法自动分类的方法属于首次提出,结合相关应用,主要具有如何优点:
1、对多解法题目的程序做自动评分的优点。自动评分使用现有技术一将程序源代码代入多组测试数据运行也能完成,但这样程序做评分会导致评分的不公平,比如通过测试数据少的源代码有可能非常接近正确的程序,只是存在一些小错误。使用本技术对多解法题目的程序做自动评分则克服了这一缺点,使得几乎完整地按照某种解法写出程序的学生,不会因为一点小错误而得低分。
2、推荐与学生解法相同的语义最接近他的正确程序的优点。学生特别是刚入门的学生在使用自动评测系统做题常常在一道题目上卡了很久而束手无策,而老师、助教的资源有限,不可能做到随时随地提供服务,因此自动给学生推荐与学生解法相同的语义最接近他的正确程序可以帮助学生提高学习效率。
3、自动将使用新型解法解题的程序推荐给教师的优点。了解学生使用的解题方法对教师改进教学工作意义重大,但教师精力有限,不可能逐个阅读所有学生的程序。因此自动将使用常规解法的程序过滤掉,帮助教师筛选出新颖解法的程序很有必要,教师可以因此获得更高的工作效率。
为了便于理解,下面针对本发明的自动分类过程做举例说明。
本示例中,假设训练集中如下问题:求1~N这N个数的和,学生提交了如下程序:
经过步骤1做程序变换后,得到如下程序,实际上的程序变换是作用在语法树上的,本示例中为方便阅读又将语法树重新转化为程序。
然后基于步骤2,对变换之后的程序提取特征,特征数量太多,无法一一列举,仅举以下两例,以下特征都是把整个程序看成一个程序块所提取的:
例1:程序中含有关键字while的数目:
例2:运算符对(赋值-加法)出现在语法树同一条边的两个节点上的数目:
用一个程序无法对第三步进行举例,用以下五道题目及学生针对这五道题目做的共2267份源代码做说明。其中,第一道题目509份源代码,第二道452份,第三道356份,第四道336份,第五道614分。五道题目的具体描述如表1:
表1五道用于测试的题目大致描述
使用发明实施例提供的方案做分类的结果如图4所示,其中的混淆矩阵指的是做五折交叉验证后将每一折的混淆矩阵相加的结果。准确率、召回率、F1值均在该混淆矩阵下计算。最终分类预测结果如表2所示。
表2五道用于测试的题目的预测结果
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例可以通过软件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,上述实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明披露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。
Claims (6)
1.一种对程序竞赛型源代码按照解题方法做自动分类与评分的方法,其特征在于,包括:
对数据库中针对问题P的各程序在抽象语法树上做程序变换,获得标准化后的程序;
从标准化后的程序或程序片段中提取特征,获得所有的特征集合;
基于提取的所有的特征集合进行多实例多分类学习,获得分类模型;
利用分类模型对新输入的针对问题P的各程序进行自动分类,并进行评分;
其中,所述对数据库中针对问题P的各程序在抽象语法树上做程序变换包括:控制语句变换、运算顺序敏感的运算符的变换、有副作用的运算符的变换、算术表达式的变换和逻辑表达式的变换;其中:
控制语句变换:C语言中控制语句包含if语句、switch语句、for语句、while语句和do-while语句;将switch语句转化为if语句,将for语句和do-while语句转化为while语句;
运算顺序敏感的运算符的变换:C语言中,规定运算顺序的运算有:“&&”、“||”、“?:”和“,”,引入临时变量,将一条语句分割成运算顺序不敏感的多条语句;
有副作用的运算符的变换:将所有副作用的运算符统一为“=”运算符,且每条语句最多只有一个赋值运算符;
算术表达式的变换:先用分配律展开表达式,然后消去单目的“+”运算符,并将双目的“-”运算符转化为单目的“-”运算符和双目的“+”运算符,最后将单目的“-”运算符上移,即将负号往语法树根部移动;
逻辑表达式的变换:将逻辑运算定律规则变换为双重否定律或者德·摩根律。
2.根据权利要求1所述的一种对程序竞赛型源代码按照解题方法做自动分类与评分的方法,其特征在于,在做程序变换之前,给主体部分只有一条语句的if、switch、for、while以及do-while语句添加一对大括号。
3.根据权利要求1所述的一种对程序竞赛型源代码按照解题方法做自动分类与评分的方法,其特征在于,所提取的特征分为四类:简单特征、语法树特征、数据依赖图特征和控制语句特征;
其中,TYPE∈{KW,OP,VAR,CONST}代表节点的类型,value∈TYPE代表节点的具体取值;nson∈N代表子节点的个数,N为自然数集合,nson元组代表nson个子节点,将语法树节点的定义简化为:
数据依赖图节点集合记为NODEDDG,数据依赖图节点nodeDDG∈NODEDDG定义为如下形式的六元组:
其中,op∈OP是运算符,是操作数,nvalue是运算符op的操作数,lvalue∈VAR是存储运算结果的变量;nodeDDG被一条有向边关联,并且nodeDDG是头节点,nextl是尾节点,将数据依赖图节点的定义简化为:
提取各特征方法如下:
a、提取简单特征:简单特征包括不同保留字和运算符在程序或者程序片段中出现的次数;
保留字kwo在程序或者程序片段中出现的次数由下式定义:
其中,函数1{x}的取值范围为{0,1},符号.是一个二元运算符;
运算符opt在程序中出现的次数由下式定义:
将运算数全为变量的运算符出现的数目和存在常量运算数的运算符出现的数目分开统计,分别定义为:
和:
包含所提取的简单特征的集合记为XSimple;
b、提取语法树特征:语法树特征包括不同运算符对出现在语法树同一条边的两个节点上的数目,定义为:
其中,node0和node1为某两个语法树上的节点;
包含所提取的语法树特征的集合记为XAST;
c、提取数据依赖图特征:数据依赖图特征包括不同运算符对出现在数据依赖图同一条边的两个节点上的数目,定义为:
包含所提取的数据依赖图特征的集合记为XDDG;
d、提取控制语句特征:
1)不同的控制结构和控制结构组合在程序中出现的次数,其中控制结构组合while-if出现的次数:
其中,f为1到node0节点的深度之间的任意值;
2)不同保留字和运算符在控制语句的条件表达式中出现的次数;
包含所提取的控制语句特征的集合记为XControl;
则提取的所有的特征集合Xall为:
Xall=Xsimple∪XAST∪XDDG∪XControl。
4.根据权利要求1所述的一种对程序竞赛型源代码按照解题方法做自动分类与评分的方法,其特征在于,所述基于提取的所有的特征集合进行多实例多分类学习,获得分类模型包括:
在多实例多分类学习中,训练集中的元素被称为包裹,一个包裹包含多个被称为实例的特征向量;特征向量按照固定顺序包含了提取的所有的特征集合Xall中的所有元素;一个包裹被标记为正类当且仅当它包含至少一个正类实例,其余情况皆被标记为负类,目标是对未做标号的包裹做分类;
将程序的源代码看成包裹,将程序的每一块看成实例,使用某个确定的解题方法的程序被标为正类;程序块是按照大括号来划分的,在同一个大括号中的程序段被分为一块;
假设问题P有mP种解法,则用符号Progij表示第i种解法的第j个程序,1≤i≤mP;CP(Progij)和分别表示程序Progij的真实类别和预测类别,程序Progij的块数为程序Progij的第k块的特征向量为程序Progij所有块的特征向量组成的集合即为一个包裹,表示为:1≤i≤mP,
采用多实例支持向量机模型来做分类,表示为:
式中,是松弛变量集合,为单个变量,假设x′P是待预测的程序的特征向量,φ(x′P)是使用原始数据空间到特征空间的映射后的特征向量,也就是将函数φ作用于特征向量上;假设超平面每个维度的斜率和截距固定,那么φ(x′P)到超平面的距离用下式计算:
6.根据权利要求1所述的一种对程序竞赛型源代码按照解题方法做自动分类与评分的方法,其特征在于,
所述问题P为多解法题目,对新输入的针对问题P的各程序进行自动分类后,如果相应的分类结果表示对应程序源代码错误,则推荐与对应程序源代码解法相同,内容最接近的正确程序源代码;或者,多实例多分类的学习结果包含mP个分类器,如果所有的分类器都把某个程序源代码分到负类,则向老师发出消息,提示相关程序源代码为问题P的新型解法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710883195.2A CN107729925B (zh) | 2017-09-26 | 2017-09-26 | 对程序竞赛型源代码按照解题方法做自动分类与评分的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710883195.2A CN107729925B (zh) | 2017-09-26 | 2017-09-26 | 对程序竞赛型源代码按照解题方法做自动分类与评分的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107729925A CN107729925A (zh) | 2018-02-23 |
CN107729925B true CN107729925B (zh) | 2020-03-31 |
Family
ID=61206954
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710883195.2A Active CN107729925B (zh) | 2017-09-26 | 2017-09-26 | 对程序竞赛型源代码按照解题方法做自动分类与评分的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107729925B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108389147B (zh) * | 2018-02-26 | 2020-11-03 | 浙江创课教育科技有限公司 | 试题难度分级处理方法及系统 |
CN108830376B (zh) * | 2018-06-13 | 2021-12-14 | 中国科学技术大学 | 针对时间敏感的环境的多价值网络深度强化学习方法 |
CN109491915B (zh) * | 2018-11-09 | 2022-02-08 | 网易有道信息技术(杭州)有限公司 | 数据处理方法及装置、介质和计算设备 |
CN109977205B (zh) * | 2019-03-08 | 2021-06-22 | 中南大学 | 一种计算机自主学习源代码的方法 |
CN110245860B (zh) * | 2019-06-13 | 2022-08-23 | 桂林电子科技大学 | 一种基于虚拟实验平台的自动评分的方法 |
CN110955606B (zh) * | 2019-12-16 | 2023-07-25 | 湘潭大学 | 一种基于随机森林的c语言源代码静态评分方法 |
CN112905186B (zh) * | 2021-02-07 | 2023-04-07 | 中国科学院软件研究所 | 适用于开源软件供应链的高信噪比代码分类方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102023921A (zh) * | 2010-12-17 | 2011-04-20 | 江苏大学 | Sql程序自动评分方法及装置 |
CN103886780A (zh) * | 2013-11-26 | 2014-06-25 | 天津思博科科技发展有限公司 | 一种c语言程序题自动评分系统 |
CN106021410A (zh) * | 2016-05-12 | 2016-10-12 | 中国科学院软件研究所 | 一种基于机器学习的源代码注释质量评估方法 |
-
2017
- 2017-09-26 CN CN201710883195.2A patent/CN107729925B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102023921A (zh) * | 2010-12-17 | 2011-04-20 | 江苏大学 | Sql程序自动评分方法及装置 |
CN103886780A (zh) * | 2013-11-26 | 2014-06-25 | 天津思博科科技发展有限公司 | 一种c语言程序题自动评分系统 |
CN106021410A (zh) * | 2016-05-12 | 2016-10-12 | 中国科学院软件研究所 | 一种基于机器学习的源代码注释质量评估方法 |
Non-Patent Citations (1)
Title |
---|
基于程序理解的编程题自动评分方法;马培军等;《计算机研究与发展》;20091231;第46卷(第7期);第1136-1141页 * |
Also Published As
Publication number | Publication date |
---|---|
CN107729925A (zh) | 2018-02-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107729925B (zh) | 对程序竞赛型源代码按照解题方法做自动分类与评分的方法 | |
US7685082B1 (en) | System and method for identifying, prioritizing and encapsulating errors in accounting data | |
Terechshenko et al. | A comparison of methods in political science text classification: Transfer learning language models for politics | |
CN110532353B (zh) | 基于深度学习的文本实体匹配方法、系统、装置 | |
CN109710744B (zh) | 一种数据匹配方法、装置、设备及存储介质 | |
CN108228758A (zh) | 一种文本分类方法及装置 | |
Kaur | Incorporating sentimental analysis into development of a hybrid classification model: A comprehensive study | |
Shi et al. | Chatgraph: Interpretable text classification by converting chatgpt knowledge to graphs | |
Zhang et al. | Sparse population code models of word learning in concept drift | |
Lee et al. | Use of training, validation, and test sets for developing automated classifiers in quantitative ethnography | |
CN104933158A (zh) | 数学问题求解模型的训练方法和装置、推理方法和装置 | |
CN111222318A (zh) | 基于双通道双向lstm-crf网络的触发词识别方法 | |
JP2016170636A (ja) | 接続関係推定装置、方法、及びプログラム | |
Rooshenas et al. | Discriminative structure learning of arithmetic circuits | |
Kathuria et al. | AOH-Senti: aspect-oriented hybrid approach to sentiment analysis of students’ feedback | |
CN112214597B (zh) | 基于多粒度建模的半监督文本分类方法和系统 | |
Lin et al. | Robust educational dialogue act classifiers with low-resource and imbalanced datasets | |
Nudelman et al. | Using bayesian networks and machine learning to predict computer science success | |
Alexander et al. | Quantum text encoding for classification tasks | |
Pathuri et al. | Feature based sentimental analysis for prediction of mobile reviews using hybrid bag-boost algorithm | |
CN112446206A (zh) | 一种菜谱标题的生成方法及装置 | |
CN110750712A (zh) | 基于数据驱动的软件安全需求推荐方法 | |
Bai et al. | Gated character-aware convolutional neural network for effective automated essay scoring | |
Bartička et al. | Evaluating attribution methods for explainable nlp with transformers | |
Moodley | Language identification with decision trees: Identification of individual words in the south african languages |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |