CN109165040A - 一种基于随机森林模型的代码抄袭嫌疑检测的方法 - Google Patents

一种基于随机森林模型的代码抄袭嫌疑检测的方法 Download PDF

Info

Publication number
CN109165040A
CN109165040A CN201810727986.0A CN201810727986A CN109165040A CN 109165040 A CN109165040 A CN 109165040A CN 201810727986 A CN201810727986 A CN 201810727986A CN 109165040 A CN109165040 A CN 109165040A
Authority
CN
China
Prior art keywords
code
similarity
value
active user
user
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.)
Granted
Application number
CN201810727986.0A
Other languages
English (en)
Other versions
CN109165040B (zh
Inventor
黄秋波
方国正
汤景东
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Donghua University
National Dong Hwa University
Original Assignee
Donghua University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Donghua University filed Critical Donghua University
Priority to CN201810727986.0A priority Critical patent/CN109165040B/zh
Publication of CN109165040A publication Critical patent/CN109165040A/zh
Application granted granted Critical
Publication of CN109165040B publication Critical patent/CN109165040B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • G06F8/751Code clone detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/22Matching criteria, e.g. proximity measures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques
    • G06F18/243Classification techniques relating to the number of classes
    • G06F18/24323Tree-organised classifiers

Abstract

本发明涉及一种基于随机森林模型的代码抄袭嫌疑检测的方法。本发明从大的方面来说可分为两个阶段,第一个是特征提取阶段,第二个为模型的训练和预测阶段。本发明收集两份待检测代码的相关特征数据,待检测用户的特征数据以及相关题目的属性,通过引入随机森林算法进行建模,最终得出当前用户是否具有抄袭嫌疑。

Description

一种基于随机森林模型的代码抄袭嫌疑检测的方法
技术领域
本发明涉及一种基于随机森林模型的代码抄袭嫌疑检测的方法,属于机器学习技术应用领域。
背景技术
现如今,随着计算机技术的快速发展,大量人员涌入计算机行业,从业人员激增带来的一系列诚信问题不容忽视。小到计算机专业的程序设计论文,大到关键性软件工程产品,程序代码中的克隆和抄袭现象愈发严重。抄袭手段主要有以下几种:(1)未更改;(2)修改注释;(3)修改标识符;(4)调整变量的位置;(5)过程组合;(6)调整语句的位置;(7)调整控制结构逻辑等。此外,还有学者在研究过程中推测构拟出其他的一些抄袭手段。虽然抄袭者的抄袭手段各有千秋,但在不了解程序内部逻辑的情况下,抄袭者若想程序正常运行并避过检测,难免要对代码作出改动,代码改动的三种方式可描述为:(1)代码的布局;(2)语法的理解;(3)语义的分析。对于前两种改动方式,可采用代码重新排序、标识符换名以及关键字等价替换等方式,所做的改动相对较容易。至于最后一种语义分析改动方式,如函数分解与结合、语句块的等价替换等,代码改动难度相对较大。
国外对于程序抄袭检测技术的研究始于70年代,如今存在多个行之有效的抄袭检测系统,如斯坦福大学的MOSS、德国Karlsruhe大学的JPlag、威奇塔州立大学的SIM、悉尼大学的YAP3以及伊利诺伊大学的GPLAG等。目前,国内可考证的抄袭检测系统有:北京航空航天大学的BUAASIM系统,中国人民警官大学的PASCAL代码抄袭检测系统等。其中,MOSS系统是Alex Aiken于1994年开发的,主要用于检测C,C++,Java,Pascal,Ada,ML,Lisp,Scheme等编写的源程序的相似性;Michael Wise于1992年开发了YAP1,随后又陆续开发了更为优越的YAP2和最终版本的YAP3,前两个版本用于代码抄袭检测,最终版YAP3不仅可以用于代码抄袭检测,还可以用于自然语言文本间的相似性检测;JPlag是采用Java语言编写的在互联网上提供服务的系统,使用的比较算法与YAP3相同,同样也是Greedy String Tiling,但在时间复杂度上比YAP3略胜一筹。经实验测试验证,JPlag的功能在很多方面与MOSS和YAP3一样强大,但在提交更为复杂的程序时,JPlag明显比MOSS更为出众。然而,大部分抄袭检测系统都是针对程序代码相似度的度量进行检测,即通过计算机计算两个程序代码文件的接近程度,并根据计算结果在一定范围内给出一个度量值,继而根据此度量值进一步检测程序代码是否存在抄袭现象。
经调查发现,目前也存在具有不同检测路径的抄袭检测系统,其基本思想是:搜集待检测的两份代码在不同方面的相似值并以此作为神经网络的输入向量,继而通过BP神经网络学习得出是否抄袭的结论。此发明分为两个阶段,一:特征发生阶段。此阶段主要引入代码注释分离技术、编译技术、优化编译和反汇编技术,将代码集分解或变换成比较样本集,剔除样本中的无关信息,再通过计算公式得出检测程序对的七种相似性结果组成特征向量。二:BP神经网络训练阶段。首先将比较代码的特征向量输入至BP神经网络,输出即为两份代码是否抄袭的预测值。但BP神经网络作为传统的神经网络,其隐藏层中只设立了一层,在训练特征集的过程中,对于神经网络调优输出的各个特征的权重值并不能达到理想的预测效果,准确率也有待考证。且该发明的BP神经网络模型收集的7个特征值中,部分数据具有不稳定性,例如代码风格相似性、统计属性相似性等特征,这些特征本身对于程序语法而言差异相对较小,再加上算法练习所需的代码量较少,因而在模型分类过程中,最终实现的区分度不大,不能较好地发挥模型应有的性能。
发明内容
本发明的目的是:用于教学过程当中检测学生抄袭的代码,同时也为了能提高检测的精准度。
为了达到上述目的,本发明的技术方案是提供了一种基于随机森林模型的代码抄袭嫌疑检测的方法,其特征在于,包括以下步骤:
步骤1、获取针对同一题的所有代码,将所有代码的代码内容和注释内容分离,并剔除代码内容的首尾中的无关信息;
步骤2、提取经过步骤1处理的代码的特征值CPMS,特征值CPMS为当前用户的代码与其他用户代码的最大相似度MSR是否超过相似度阈值SRT的值;
步骤3、提取经过步骤1处理的代码的CPMSP,CPMSP为当前用户的代码与其他用户代码的最大相似度低于阈值的百分比:
步骤4、将CPMSP离散化,求得类别值CPMSPC;
步骤5、提取当前用户的代码的IE值:
若当前用户的代码所对应的题为考试题,则IE=1,若当前用户的代码所对应的题为练习题,则IE=0;
提取当前用户的代码的CPTC值:
CPTC值表示当前用户与最大相似度用户所提交的代码通过的测试用例是否相同,若相同,CPTC值设为1,若不同,CPTC值设为0;
提取当前用户的代码的代码风格相似度ASSR:
代码风格相似度ASSR表示当前用户与最大相似度用户所提交的代码风格相似度;
步骤6、提取当前用户的代码所对应题目的难易程度值DL;
提取当前用户的抄袭率值PR,包括以下步骤:
统计当前用户提交代码总数sum(TNE)及当前用户确认抄袭的提交总数sum(TNPE),则有:
提取当前用户的抄袭集中度PCR,包括以下步骤:
统计当前用户每一道题可能抄袭的其他用户的Id值,设该用户提交题目的数量为n,集合R={r1,r2,…,rn},其中集合元素ri表示该用户的第i题的最大相似度的对象用户的Id值。用PCR表示用户抄题对象Id的集中程度。PCR可用熵或基尼系数等公式进行计算。
提取当前用户的成绩排名RRB,包括以下步骤:
用户每提交成功一道题,就会实时统计当前总得分,然后根据一个班所有用户的总得分值进行排名;
步骤7、利用随机森林模型来判定是否存在抄袭嫌疑,包括以下步骤:
步骤701、通过步骤2至步骤6得到不同特征的特征集,再获取各特征集的标签数据组成标签数据集,再进行连续值与缺失值的处理得到训练集;
步骤702、构造n棵决策树从而形成随机森林,在构造决策树时,从训练集中有放回地随机选取样本,同时,无放回地随机选取总特征量中的部分特征量;
步骤703、将实时获取的相关特征输入随机森林,n棵决策树的预测结果为T={t1,t2,…,tn},则随机森林的预测结果为M(T),M(T)表示一组数据当中的众数,若M(T)的值为1的话,则表示最终的预测结果为当前用户本次提交的代码具有抄袭嫌疑,抄袭的对象为代码相似度最大的其他用户;否则,当前用户不具有抄袭嫌疑。
优选地,所述步骤2中,所述特征值CPMS的提取步骤包括:
步骤201、计算最大相似度MSR
经过步骤1处理的所有代码的集合表示为S={S1,S2,…,Sn},经过步骤1处理的第i个用户的代码为Si,则Si与第j个用户的代码Sj的相似度为sim(Si,Sj),则最大相似度MSR的计算公式表示为:
MSR=max(sim(S1,S2),sim(S1,S3),…,sim(S1,Sn))
步骤202、出题人根据题目的难易程度来设定相似度阈值SRT,该阈值也可以通过机器学习的方法动态调整。
步骤203、计算CPMS的逻辑如下:
如果最大相似度MSR大于相似度阈值SRT,则将CPMS设为1;否则设为0。
优选地,步骤4中,所述类别值CPMSPC的计算方法包括以下步骤:
若CPMS==1,表示最大相似度MSR大于相似度阈值SRT,系统会默认将此次提交的代码设定为抄袭代码。对于这类数据不需采用随机森林模型进行预测和推荐。
若CPMS==0,则:
若0.6<CPMSP≤1,则CPMSPC=1;
若0.3<CPMSP≤0.6,则CPMSPC=2;
若0.1<CPMSP≤0.3,则CPMSPC=3;
若CPMSP≤0.1,则CPMSPC=4;
优选地,步骤5中,所述代码风格相似度ASSR的求解方法包括以下步骤:
分离出两份代码的注释、空格、缩进、空行、花括号的位置等代码风格信息,计算出代码风格相似度ASSR。计算方法如下:
注释的相似度CSR可采取与代码相似度相同的算法进行计算。
空格、缩进、空行等的相似度WPSR采用编辑距离ED进行计算,包含以下步骤:
步骤501、首先分离出代码中的空格、缩进、空行等信息,比如:
1空行 3空格 4空格 1缩进
表示代码中依次包含一个空行、连续的3个空格、连续的4个空格、1个缩进(tab)字符。
步骤502、根据两份代码分理出的空格、缩进、空行等信息,计算编辑距离ED,比如两个代码的信息分别如下:
1空行 3空格 4空格 1缩进
1空行 4空格 1缩进 1缩进
则编辑距离为5,因为由3个空格变成4个空格,需要“插入”一个空格,由4个空格变成1个缩进,需要“删除”3个空格,“替换”一个空格为缩进。所以,总共需要的操作为1个插入、3个删除、1个替换,因此编辑距离为5。
步骤503、使用编辑距离ED计算相似度:
其中,SpaceCount为代码分离出来的信息“1空行 3空格 4空格 1缩进”的所有数字的加和。
花括号相似度BSR可以如下计算:
步骤504、从代码中提取出花括号及其位置信息,比如一份代码的花括号依次为“左前左前左后右前右前右后”,其中“左前”表示左花括号处于一行的前部,“左后”表示左花括号处于代码行的后部(结尾处)。
步骤505、根据两份代码提取出来的花括号信息,计算出来其中花括号位置相同的数目CL。
步骤506、计算BSR:
其中C1为第一份代码中花括号的数量,C2为第二份代码中花括号的数量。
计算出CSR、WPSR、BSR后,求平均值则可得ASSR:
本发明收集两份待检测代码的相关特征数据,待检测用户的特征数据以及相关算法题的属性,通过引入随机森林算法进行建模,最终得出当前用户是否具有抄袭嫌疑。
附图说明
图1基于随机森林模型的代码抄袭嫌疑检测方法的流程图;
图2构造决策树流程图;
图3构造随机森林模型流程图。
具体实施方式
为使本发明更明显易懂,兹以优选实施例,并配合附图作详细说明如下。
本发明提供的一种基于随机森林模型的代码抄袭嫌疑检测方法,其具体的实施方式如下:
根据学生提交题目的代码和相关题目信息进行特征值的提取,进入数据准备阶段。在处理每份代码时都进行了代码和注释分离,并剔除了代码首尾中的无关信息,如换行、缩进和空格等字符,使得后期特征值的处理更为方便。然后我们提取了九个属性作为模型训练的入口,这九个属性分别为:该学生的代码与其他同学代码的最大相似度是否超过相似度阈值(CPMS)、该学生的代码与其他同学代码的最大相似度低于阈值的百分比的类别值(CPMSPC)、该题是否为考试题(IE)、该学生与最大相似度同学所提交的代码通过的测试用例是否相同(CPTC)、该学生与最大相似度同学所提交的代码风格相似度(ASSR)、题目的难易程度(DL)、该学生的抄袭率(PR)、该学生抄题的集中度(PCR)和该学生成绩的排名(RRB)。
步骤一:该学生的代码与其他同学代码的最大相似度(MSR)是否超过相似度阈值(SRT)的值获得,我们将这一特征命名为CPMS;
该题所有同学提交的代码,经过上述方法处理后,所得的代码字符串分别用S={S1,S2,…,Sn}表示,其中S1表示该同学该题所提交的代码。sim(Si,Sj)表示两份代码的相似度,其中i≠j且i,j∈{1,2,…,n}。对于两份代码Si和Sj,我们分别统计出它们当中出现的关键字、标识符、符号、常量字符串以及数值等关键词,合并成一个集合,然后计算每份代码对于这个集合中的词的词频,则可生成两份代码各自的词频向量,分别记为μ、v,因此可计算出这两个向量的余弦相似度来表示这两份代码的相似度。相似度的计算公式为:
其中n表示μ和v向量的长度。则MSR的计算公式可表示为:
MSR=max(sim(S1,S2),sim(S1,S3),…,sim(S1,Sn))
相似度阈值(SRT)是出题人根据题目的难易程度来设定的,该阈值也可以通过机器学习的方法动态调整。
因此CPMS的算法逻辑如下:如果最大相似度MSR大于相似度阈值SRT,则将CPMS设为1;否则设为0。
步骤二:该学生的代码与其他同学代码的最大相似度低于阈值的百分比的类别值获得,我们将最大相似度低于阈值的百分比命名为CPMSP,其类别值命名为CPMSPC。
CPMSP的公式为:
将百分比离散化,即可求得CPMSPC类别值。采用的逻辑算法如下:
若CPMS==1,表示最大相似度MSR大于相似度阈值SRT,系统会默认将此次提交的代码设定为抄袭代码。对于这类数据不需采用随机森林模型进行预测和推荐。
若CPMS==0,则:
若0.6<CPMSP≤1,则CPMSPC=1;
若0.3<CPMSP≤0.6,则CPMSPC=2;
若0.1<CPMSP≤0.3,则CPMSPC=3;
若CPMSP≤0.1,则CPMSPC=4;
算法结束,从以上的算法逻辑中可得出CPMSPC类别值将会有4种可能性。
步骤三:该题是否为考试题(IE)值获得:我们将题分为两类,第一类为考试题,IE值设为1;第二类为练习题,IE值设为0。对于考试来说,学生抄袭的可能性很大,所以在一定程度上,IE特征对模型有着一定的作用。
该学生与最大相似度同学所提交的代码通过的测试用例是否相同(CPTC)值获得:我们在建立数据结构时,仔细统计了每位学生做的每一道题所通过的测试用例号。在此基础上,比较该同学与最大相似度代码的同学的测试用例是否相同。若相同,CPTC值设为1;如若不同,则将CPTC值设为0。
该学生与最大相似度同学所提交的代码风格相似度(ASSR)值获得:分离出两份代码的注释、空格、缩进、空行、花括号的位置等代码风格信息,计算出代码风格相似度ASSR。计算方法如下:
注释的相似度CSR可采取与代码相似度相同的算法进行计算。
空格、缩进、空行等的相似度WPSR采用编辑距离ED进行计算,包含以下步骤:
步骤1、首先分离出代码中的空格、缩进、空行等信息,比如:
1空行 3空格 4空格 1缩进
表示代码中依次包含一个空行、连续的3个空格、连续的4个空格、1个缩进(tab)字符。
步骤2、根据两份代码分理出的空格、缩进、空行等信息,计算编辑距离ED,比如两个代码的信息分别如下:
1空行 3空格 4空格 1缩进
1空行 4空格 1缩进 1缩进
则编辑距离为5,因为由3个空格变成4个空格,需要“插入”一个空格,由4个空格变成1个缩进,需要“删除”3个空格,“替换”一个空格为缩进。所以,总共需要的操作为1个插入、3个删除、1个替换,因此编辑距离为5。
步骤3、使用编辑距离ED计算相似度:
其中,SpaceCount为代码分离出来的信息“1空行 3空格 4空格 1缩进”的所有数字的加和。
花括号相似度BSR可以如下计算:
步骤4、从代码中提取出花括号及其位置信息,比如一份代码的花括号依次为“左前左前左后右前右前右后”,其中“左前”表示左花括号处于一行的前部,“左后”表示左花括号处于代码行的后部(结尾处)。
步骤5、根据两份代码提取出来的花括号信息,计算出来其中花括号位置相同的数目CL。
步骤6、计算BSR:
其中C1为第一份代码中花括号的数量,C2为第二份代码中花括号的数量。
计算出CSR、WPSR、BSR后,求平均值则可得ASSR:
步骤四:题的难易程度(DL)值获得:在新建题目的时候,教师根据自身多年的教学经验以及对题目的了解程度,对该题进行难易度等级的设立或者附加相应的标签。这一特征值在某种程度上能达到区分学生成绩的效果,然而对于一些蠢蠢欲动的学生,则可能会通过抄袭代码的手段来完成任务。难易程度值会根据难度逐渐递升,分别用1,2,3,4等数值表示难度值。
该学生的抄袭率(PR)值获得:在建立学生的数据结构时,我们设定了学生所提交代码总数(TNE)这一属性,后端会自动统计每位学生所提交代码的总量;同理,我们也设定了确认抄袭的代码总数(TNPE),并自动统计数量。最终,我们可以由此计算出该学生以往的抄袭率。
抄袭率(PR)计算公式为:
该学生抄袭的集中度(PCR)值获得:我们仿照基尼系数的计算,统计当前学生每一道题可能抄袭的其他学生的Id值,设该学生提交题目的数量为n,集合R={r1,r2,…,rn},其中集合元素ri表示该学生的第i题的最大相似度的对象学生的Id值。假定集合R去掉重复元素后得到新集合S={s1,s2,…,sm},m≤n,用F(si)表示数据si在集合R中出现的次数,其中i=1,2,…,m。统计F(si)并从小到大排序得到一个频数集合F={f1,f2,…,fm}。那么该学生抄袭集中度PCR的求解公式可表示为:
该学生成绩的排名(RRB)值获得:在建立学生的数据结构时,我们设立了学生成绩这一属性,以及当前排名特征值。我们对每一道题根据其难度设定了分值,学生每完成一道题,后台程序会实时统计他当前总得分,然后根据总得分值进行排名。由于这些成绩排名值基本有序,为了降低排名过程当中的复杂度,我们引用了插入排序的基本思想,算法包括如下步骤:
步骤1、将当前学生student1的当前排名student1.rank赋予变量rank_temp;
步骤2、根据变量rank_temp-1查找得到对比学生student2;
步骤3、判断当前student1的得分student1.score是否大于对比学生student2的得分student2.score,若是,则进入步骤4,否则进入步骤6;
步骤4、将对比学生student2的对比排名student2.rank加1,进入步骤5;
步骤5、根据变量rank_temp-1重新查找得到对比学生student2,返回步骤3;
步骤6、更新student1.rank,student1.rank=student2.rank+1,算法结束。
该算法根据排名值查找学生,复杂度为O(n);但是学生排名更新时,理论上来说复杂度为O(1)。
步骤五:利用随机森林模型来判定是否存在抄袭嫌疑。
我们以一份训练集为实验对象,历经上述四个步骤后得到九个特征集,另外再获取这份训练集的标签数据。获取到特征和标签数据集之后,再进行连续值与缺失值的处理,如代码风格相似度(ASSR)、抄题率(PR)、抄题集中度(PCR)以及成绩的排名(RRB)等连续型属性,我们采用二分法对这些连续型数据进行一系列处理。假定给定连续型特征数据集D={d1,d2,…,dn},并且在数据集合D中出现了n个不同的取值,将这些值进行升序排序可得到D’={d’1,d’2,…,d’n}。我们定义t为划分点,将D’进行划分后可得到两个子集合D’1和D’2,对于D’1里面的元素都小于t的数值,D’2里面的元素都大于t的值。t又是如何确定的呢,我们定义D’中任意两个相邻的元素d’i和d’i+1,通过取这两个元素的平均值作为划分点t,那么t可能取值的集合T可表示为:
其中t可能取值有n-1种。经过划分之后,我们也就能像处理离散数据一样,求出这n-1种划分之后样本集D的信息增益值。于是,我们就选择信息增益最大的划分点t’。对于数据缺失值的处理,我们进行了分步操作,连续型数据采用中位数或平均数填充法;对于离散型数据,我们首先统计出数据种类的权重作为比例,然后根据这一比例进行数据填充,若缺失的数据量较少,则可采用众数填充法。
构造决策树的基本思想是随着树深度的增加,节点的熵迅速地降低。熵降低的速度越快越好,这样我们有望得到一棵高度最矮的决策树。对于一个特征数据集D={d1,d2,…,dn},假定它存在着m类标签值,m≤n。我们用P(di)表示di这类数据的概率值,其中i≤m。那么这个数据集D熵(entropy)求解公式为:
而信息增益的概念是原始数据的熵与通过某属性作为结点进行划分之后的熵的差。实际上,信息增益准则对可取值数目较多的属性有所偏好,因此引入信息增益率,信息增益率是信息增益除以本身的熵值,而它对可取值数目较少的属性有所偏好。所以在实际处理过程中,先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择信息增益率最高的。然后通过构造根节点的方式递归地构造其它的节点,直至遍历完所有属性或者所有划分的数据集只有一个类型,则会生成一棵决策树,构造决策树流程如图2所示。
随机森林模型存在两重随机性。第一重随机性是数据选择随机性,在构造决策树时,我们有放回地随机选取样本,每次选取的样本数占总样本数据量的60%,能有效地去除一些异常样本点的干扰。第二重随机性是特征选择随机性。同理,我们无放回地随机选取总特征量的60%来建立一棵决策树。经历过第二重随机性不仅可以有效去除弱特征的选取,还能让模型实现剪枝处理的操作,因而提高模型的准确率。我们重复进行以上操作,则可以建立n棵决策树,从而形成随机森林,构造随机森林模型流程如图3所示。用T={t1,t2,…,tn}来表示n棵决策树的预测结果,最终随机森林的预测结果可表示为M(T),其中M表示一组数据当中的众数。若M(T)值为1的话,则表示最终的预测结果为该同学本次提交的代码具有抄袭嫌疑,抄袭的对象为代码相似度最大的同学;否则,该同学不具有抄袭嫌疑。

Claims (4)

1.一种基于随机森林模型的代码抄袭嫌疑检测的方法,其特征在于,包括以下步骤:
步骤1、获取针对同一题的所有代码,将所有代码的代码内容和注释内容分离,并剔除代码内容的首尾中的无关信息;
步骤2、提取经过步骤1处理的代码的特征值CPMS,特征值CPMS为当前用户的代码与其他用户代码的最大相似度MSR是否超过相似度阈值SRT的值;
步骤3、提取经过步骤1处理的代码的CPMSP,CPMSP为当前用户的代码与其他用户代码的最大相似度低于阈值的百分比:
步骤4、将CPMSP离散化,求得类别值CPMSPC;
步骤5、提取当前用户的代码的IE值:
若当前用户的代码所对应的题为考试题,则IE=1,若当前用户的代码所对应的题为练习题,则IE=0;
提取当前用户的代码的CPTC值:
CPTC值表示当前用户与最大相似度用户所提交的代码通过的测试用例是否相同,若相同,CPTC值设为1,若不同,CPTC值设为0;
提取当前用户的代码的代码风格相似度ASSR:
代码风格相似度ASSR表示当前用户与最大相似度用户所提交的代码风格相似度;
步骤6、提取当前用户的代码所对应题目的难易程度值DL;
提取当前用户的抄袭率值PR,包括以下步骤:
统计当前用户提交代码总数sum(TNE)及当前用户确认抄袭的提交总数sum(TNPE),则有:
提取当前用户的抄袭集中度PCR,包括以下步骤:
统计当前用户每一道题可能抄袭的其他用户的Id值,设该用户提交题目的数量为n,集合R={r1,r2,…,rn},其中集合元素ri表示该用户的第i题的最大相似度的对象用户的Id值,用PCR表示用户抄题对象Id的集中程度;
提取当前用户的成绩排名RRB,包括以下步骤:
用户每提交成功一道题,就会实时统计当前总得分,然后根据所有用户的总得分值进行排名;
步骤7、利用随机森林模型来判定是否存在抄袭嫌疑,包括以下步骤:
步骤701、通过步骤2至步骤6得到不同特征的特征集,再获取各特征集的标签数据组成标签数据集,再进行连续值与缺失值的处理得到训练集;
步骤702、构造n棵决策树从而形成随机森林,在构造决策树时,从训练集中有放回地随机选取样本,同时,无放回地随机选取总特征量中的部分特征量;
步骤703、将实时获取的相关特征输入随机森林,n棵决策树的预测结果为T={t1,t2,…,tn},则随机森林的预测结果为M(T),M(T)表示一组数据当中的众数,若M(T)的值为1的话,则表示最终的预测结果为当前用户本次提交的代码具有抄袭嫌疑,抄袭的对象为代码相似度最大的其他用户;否则,当前用户不具有抄袭嫌疑。
2.如权利要求1所述的一种基于随机森林模型的代码抄袭嫌疑检测的方法,其特征在于,所述步骤2中,所述特征值CPMS的提取步骤包括:
步骤201、计算最大相似度MSR
经过步骤1处理的所有代码的集合表示为S={S1,S2,…,Sn},经过步骤1处理的第i个用户的代码为Si,则Si与第j个用户的代码Sj的相似度为sim(Sj,Sj),则最大相似度MSR的计算公式表示为:
MSR=max(sim(S1,S2),sim(S1,S3),…,sim(S1,Sn))
步骤202、出题人根据题目的难易程度来设定相似度阈值SRT,或通过机器学习的方法动态调整相似度阈值SRT;
步骤203、计算CPMS的逻辑如下:
如果最大相似度MSR大于相似度阈值SRT,则将CPMS设为1,否则设为0。
3.如权利要求1所述的一种基于随机森林模型的代码抄袭嫌疑检测的方法,其特征在于,步骤4中,所述类别值CPMSPC的计算方法包括以下步骤:
若CPMS==1,表示最大相似度MSR大于相似度阈值SRT,默认将此次提交的代码设定为抄袭代码,对于这类数据不需采用随机森林模型进行预测和推荐;
若CPMS==0,则:
若0.6<CPMSP≤1,则CPMSPC=1;
若0.3<CPMSP≤0.6,则CPMSPC=2;
若0.1<CPMSP≤0.3,则CPMSPC=3;
若CPMSP≤0.1,则CPMSPC=4。
4.如权利要求1所述的一种基于随机森林模型的代码抄袭嫌疑检测的方法,步骤5中,所述代码风格相似度ASSR的求解方法包括以下步骤:
分离出两份代码的注释、空格、缩进、空行、花括号的位置代码风格信息,计算出代码风格相似度ASSR,计算方法如下:
注释的相似度CSR采取与代码相似度相同的算法进行计算;
空格、缩进、空行的相似度WPSR采用编辑距离ED进行计算,包含以下步骤:
步骤501、首先分离出代码中的空格、缩进、空行信息;
步骤502、根据两份代码分理出的空格、缩进、空行信息,计算编辑距离ED;
步骤503、使用编辑距离ED计算相似度:
其中,SpaceCount为代码分离出来的信息的所有数字的加和;
花括号相似度BSR计算方法包括:
步骤504、从代码中提取出花括号及其位置信息;
步骤505、根据两份代码提取出来的花括号信息,计算出来其中花括号位置相同的数目CL;
步骤506、计算BSR:
其中C1为第一份代码中花括号的数量,C2为第二份代码中花括号的数量。
计算出CSR、WPSR、BSR后,求平均值则得ASSR:
CN201810727986.0A 2018-07-04 2018-07-04 一种基于随机森林模型的代码抄袭嫌疑检测的方法 Active CN109165040B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810727986.0A CN109165040B (zh) 2018-07-04 2018-07-04 一种基于随机森林模型的代码抄袭嫌疑检测的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810727986.0A CN109165040B (zh) 2018-07-04 2018-07-04 一种基于随机森林模型的代码抄袭嫌疑检测的方法

Publications (2)

Publication Number Publication Date
CN109165040A true CN109165040A (zh) 2019-01-08
CN109165040B CN109165040B (zh) 2021-11-12

Family

ID=64897328

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810727986.0A Active CN109165040B (zh) 2018-07-04 2018-07-04 一种基于随机森林模型的代码抄袭嫌疑检测的方法

Country Status (1)

Country Link
CN (1) CN109165040B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111459787A (zh) * 2019-01-18 2020-07-28 南京大学 一种基于机器学习的测试抄袭检测方法
CN111562944A (zh) * 2020-05-11 2020-08-21 南京域智智能科技有限公司 程序代码的比对方法、比对装置
CN112230990A (zh) * 2020-11-10 2021-01-15 北京邮电大学 一种基于层级注意力神经网络的程序代码查重方法
CN112764809A (zh) * 2021-01-25 2021-05-07 广西大学 基于编码特征的sql代码抄袭检测方法及系统
WO2024064330A1 (en) * 2022-09-23 2024-03-28 Chiron Properties, Llc System and method for detecting academic dishonesty and initiating corrective/disciplinary actions

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090281981A1 (en) * 2008-05-06 2009-11-12 Chen Barry Y Discriminant Forest Classification Method and System
CN106843840A (zh) * 2016-12-23 2017-06-13 中国科学院软件研究所 一种基于相似度分析的源代码版本演化注释复用方法
CN107679567A (zh) * 2017-09-22 2018-02-09 江苏海事职业技术学院 一种代码抄写行为识别方法、装置和系统
CN108170468A (zh) * 2017-12-28 2018-06-15 中山大学 一种自动检测注释和代码一致性的方法及其系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090281981A1 (en) * 2008-05-06 2009-11-12 Chen Barry Y Discriminant Forest Classification Method and System
CN106843840A (zh) * 2016-12-23 2017-06-13 中国科学院软件研究所 一种基于相似度分析的源代码版本演化注释复用方法
CN107679567A (zh) * 2017-09-22 2018-02-09 江苏海事职业技术学院 一种代码抄写行为识别方法、装置和系统
CN108170468A (zh) * 2017-12-28 2018-06-15 中山大学 一种自动检测注释和代码一致性的方法及其系统

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111459787A (zh) * 2019-01-18 2020-07-28 南京大学 一种基于机器学习的测试抄袭检测方法
CN111562944A (zh) * 2020-05-11 2020-08-21 南京域智智能科技有限公司 程序代码的比对方法、比对装置
CN111562944B (zh) * 2020-05-11 2023-08-29 南京域智智能科技有限公司 程序代码的比对方法、比对装置
CN112230990A (zh) * 2020-11-10 2021-01-15 北京邮电大学 一种基于层级注意力神经网络的程序代码查重方法
CN112764809A (zh) * 2021-01-25 2021-05-07 广西大学 基于编码特征的sql代码抄袭检测方法及系统
CN112764809B (zh) * 2021-01-25 2022-07-05 广西大学 基于编码特征的sql代码抄袭检测方法及系统
WO2024064330A1 (en) * 2022-09-23 2024-03-28 Chiron Properties, Llc System and method for detecting academic dishonesty and initiating corrective/disciplinary actions

Also Published As

Publication number Publication date
CN109165040B (zh) 2021-11-12

Similar Documents

Publication Publication Date Title
Min et al. Multi-hop reading comprehension through question decomposition and rescoring
CN109165040A (zh) 一种基于随机森林模型的代码抄袭嫌疑检测的方法
CN107766324B (zh) 一种基于深度神经网络的文本一致性分析方法
JP5904559B2 (ja) シナリオ生成装置、及びそのためのコンピュータプログラム
CN106951438A (zh) 一种面向开放域的事件抽取系统及方法
CN105955962B (zh) 题目相似度的计算方法及装置
CN105760439B (zh) 一种基于特定行为共现网络的人物共现关系图谱构建方法
CN106777274A (zh) 一种中文旅游领域知识图谱构建方法及系统
CN106503055A (zh) 一种从结构化文本到图像描述的生成方法
JP6403382B2 (ja) フレーズペア収集装置、及びそのためのコンピュータプログラム
CN107943784A (zh) 基于生成对抗网络的关系抽取方法
CN106980609A (zh) 一种基于词向量表示的条件随机场的命名实体识别方法
CN107239529A (zh) 一种基于深度学习的舆情热点类别划分方法
CN111190900B (zh) 一种云计算模式下json数据可视化优化方法
CN108520166A (zh) 一种基于多重相似性网络游走的药物靶标预测方法
CN107145514B (zh) 基于决策树和svm混合模型的中文句型分类方法
CN106897559A (zh) 一种面向多数据源的症状体征类实体识别方法及装置
CN108509409A (zh) 一种自动生成语义相近句子样本的方法
US20150199567A1 (en) Document classification assisting apparatus, method and program
CN105528437A (zh) 一种基于结构化文本知识提取的问答系统构建方法
CN110472203B (zh) 一种文章的查重检测方法、装置、设备及存储介质
WO2015093539A1 (ja) 複雑述語テンプレート収集装置、及びそのためのコンピュータプログラム
CN110298036A (zh) 一种基于词性增量迭代的在线医疗文本症状识别方法
CN113673943B (zh) 一种基于履历大数据的人员任免辅助决策方法及系统
CN112667799A (zh) 一种基于语言模型和实体匹配的医疗问答系统构建方法

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