本文来源于阿里云-云栖社区,原文点击这里。
编程语言是软件开发行业的主要工具。自20世纪40年代以来,已经出现了数百种编程语言,并且每天都有大量的各种编程语言的代码被推送到代码库中。
我们认为,根据代码识别编程语言的源代码分类器将是一个非常有用的工具,因为它可用于在线自动语法高亮和标签建议,比如可用在*和技术维基网站上。这个想法促使我们根据最新的AI技术编写一个对代码片段依据编程语言进行分类的模型。
我们使用GitHub API从GitHub上收集了数十万个源代码文件。在训练模型之前,必须处理原始数据以消除和减少一些不需要的特征。最终完成的分类器的性能非常得好,你可以在本文结尾找到相关的结果,以及有关模型决策的一些解释。
数据
我们根据编程语言的受欢迎程度选择了其中的一部分。图1显示了2014年第四季度GitHub上最常用的49种语言[1]。此分析仅考虑活跃的代码库,即在此期间至少有一行代码被推送进去的存储库。我们也将**HTML**和**XML**添加到列表中,虽然人们可能并不认为它们是编程语言,但毕竟它们是与软件开发项目相关的。基于同样的原因,我们也添加了SQL。
我们使用GitHub API来抓取代码库。下图显示了经过几天抓取后的数据形状。我们抓取了数千个代码库,但忽略了大小超过100MB的,以避免花费太多的时间进行下载和预处理。
我们使用文件扩展名来标记每个样本所用的编程语言(例如,file.php是PHP源文件)。 C#是代码量最多的编程语言,而Arduino在我们爬取的资源中是最少的。为了避免训练集的不平衡,每个种类我们最多使用了一万个例子。