新知榜官方账号
2023-07-10 13:48:41
编程语言是软件开发的主要工具。自20世纪40年代以来,已经有数百种语言被发明出来,每天,大量的各种语言编写的代码活跃着代码库。我们认为,如果有一个源代码分类器,可以识别一段代码是用哪种语言编写的,这将会是非常有用的工具,可以用于在StackOverflow和技术类维基百科之类的平台上自动进行语法高亮显示和标签建议。这激励我们利用最新的用于文本分类的AI技术,训练一个模型来基于编程语言对代码片段进行分类。
我们从GitHub代码库收集了数十万个源代码文件。在训练模型之前,必须对原始数据进行处理以消除或减少代码中一些不需要的特征。最终训练好的分类器效果非常好,本文末提供了结果,以及对于模型的决策的一些解释。
Github最受欢迎的49种语言编程语言的选择依据是它们的突出性。我们使用GitHubAPI来检索特定语言的代码仓库。我们检查了数千个代码仓库,但是忽略了大小超过100mb的仓库,以避免在下载和预处理上花费太多时间。我们使用文件扩展名来标记每个样本的编程语言。
图1显示了2014年第四季度GitHub上最常用的49种语言。其中,JavaScript是使用最多的语言,其次是Java,第三是Python。这个分析仅考虑活跃代码库,即在这期间至少有一次代码推送的存储库。

我们发现,C#是拥有最多源代码的语言,而Arduino在我们爬行的资源中是最少的。为了避免训练集不平衡,我们每一类语言最多使用10000个样本。
在单个源代码文件使用多种语言的情况下,我们只想保留该文件的主要语言的代码片段,并删除其他所有内容。以同样的方式,可以使用正则表达式或Python中的内置解析器从代码中删除HTML标签。
在预处理步骤中,我们需要对所有文本进行标记。我们使用正则表达式提取token。在这个步骤之后,数据就为进行训练做好准备了。
卷积神经网络(CNN)在文本分类任务中取得了显著的成果。我们的模型使用一个wordembedding层,后面跟一个有多个filter的卷积层,然后是一个max-pooling层,最后是一个softmax层。我们使用一个非晶态、随机初始化的嵌入层,因此是从头开始训练向量。

我们对10%的数据进行了测试,并计算每个标签的准确性、精度、recall和f1-score。accuracy,precision,recall和f1-score的总体结果分别是97%、96%、96%和96%。每个标签的得分也相当高。通过使用LIME生成“explanations”,我们可以知道为什么模型选择某一个标签而不是另一个。
虽然这个分类器的表现非常好,但仍有改进结果的方法。例如,尝试直接从character学习而不需要wordembedding层的character-level模型。此外,可以获得每种编程语言的版本数据,以便可以将特定版本分配给源代码片段。
微信扫码咨询
相关工具
相关文章
推荐
阿里Accio中文版上线!一键搞定复杂采购
2025-08-19 09:13
视频“用嘴编辑”的时代来了,但钱包顶得住吗?
2025-08-15 17:59
智谱新模型GLM-4.5V全面开源,玩家们有福啦!
2025-08-12 17:56
扎心文案+AI插画=爆款!揭秘8万赞视频的制作全流程
2025-08-12 10:08
GPT-5没你想的那么好,附实测体验~
2025-08-11 11:07
一站式搞定AI绘图+视频,AI短片效率飙升的秘密在这儿!
2025-08-08 09:26
打工人新神器!10款国产AI,让你告别996!
2025-08-08 09:24
豆包视觉推理深度体验,AI也能“边看边想”了!
2025-08-08 09:19
300美元的AI男友来了!马斯克的情感生意从女友做到男友
2025-08-01 17:56
Agent智能体:2025年企业新员工,月薪仅需一度电?
2025-07-30 17:49