论文部分内容阅读
互联网的快速发展促进了信息共享途径的不断增多,也为代码抄袭问题提供了良好的便利;在高校教学领域,代码抄袭现象屡禁不止甚至愈演愈烈。这严重影响教学工作秩序与教学质量。本文的工作主要研究大学程序语言教学中编程作业的代码查重解决方案。一方面基于传统的代码文本相似度检测方法,提出一种检测效果更好的无监督相似度检测方案;另一方面基于卷积神经网络(CNN)提出一种端到端的有监督相似度检测模型,能够实现代码内容与抄袭手段的自动学习。在两种方案的基础上,构建一个适用于教学任务的代码查重系统。本文首先研究基于winnowing算法的传统代码文本相似度检测方法的优化方案。考虑到winnowing算法对代码文本预处理的依赖性,根据已有200G学生作业代码统计出八种代码抄袭手段,设计可与抄袭手段对抗的预处理规则。首次将simhash算法引入代码文本相似度检测领域,综合simhash算法与winnowing算法的特点设计一种基于simhash,winnowing,以及代码属性度量的加权模型,称为sim-win三权法,在作业代码数据集上的准确率远高于传统代码文本相似度检测方法。进一步地,本文考虑将无监督的相似度计算拓展到有监督的相似度学习模型,考虑CNN在图像和文本特征抽取上的优势表现,基于CNN构建一个适用于代码文本相似度检测的端到端模型,称为CPOC(Code Plagiarism On CNN),模型的输入为代码原文本,通过网络模型学习代码文本特征,基于大量训练样本学习新的抄袭手段,实现自适应的代码文本相似度检测模型。实验证明,CPOC方法的表现大大优于传统代码文本相似度检测方法,也大大优于其他基于神经网络模型(如LSTM)的相似度检测算法。接着,本文完整地设计了一个代码查重系统。包括系统架构的设计、数据库结构的设计与实现、数据的交互、前后端开发。通过建立一个服务于程序语言教师的代码查重系统,一方面将上述的研究算法投入功能性应用,另一方面方便了教师对学生作业代码的管理与评估。代码查重系统现已在校内网进行部署并投入使用。