遇见数据集

JEMMA

收藏
arXiv2022-12-19 更新2024-08-06 收录
数据链接:
官方服务:

资源简介:

JEMMA是一个面向机器学习源代码应用的可扩展Java数据集,旨在通过提供实验源代码模型和任务的基础组件,降低机器学习源代码领域的入门门槛。该数据集包含50,000个Java项目的大量预处理信息,如元数据、表示形式(例如代码令牌、AST、图表)和多种属性(例如度量、静态分析结果),总计超过120万个类和800万个方法。JEMMA还允许用户添加新的属性和表示形式,并对其上的任务进行评估,从而成为研究人员可以用来实验新表示形式和任务的工作台。

JEMMA is a scalable Java dataset tailored for machine learning on source code applications. It aims to lower the barrier to entry for the field of machine learning on source code by providing foundational components for experimental source code models and tasks. This dataset contains extensive preprocessed information from 50,000 Java projects, including metadata, representation formats (e.g., code tokens, ASTs, graphs), and various attributes (e.g., metrics, static analysis results), totaling over 1.2 million classes and 8 million methods. JEMMA also enables users to add new attributes and representation formats, as well as evaluate tasks built upon it, making it a workbench that researchers can use to experiment with novel representation formats and tasks.

创建时间:
2022-12-19
搜集汇总
数据集介绍
JEMMA 数据集图片
构建方式
JEMMA数据集构建于50K-C数据集之上,该数据集包含50,000个可编译的Java项目。研究团队对每个项目进行了深度加工,涵盖项目、包、类和方法四个粒度层次。通过为每个代码实体分配唯一标识符(UUID),并利用多种静态分析工具(如Infer、Metrix++、PMD和java-callgraph)提取了丰富的元数据、属性(如代码行数、圈复杂度、空指针引用检测等)以及多种代码表示(包括原始文本、词法令牌、抽象语法树、特征图以及code2vec和code2seq路径表示)。此外,还构建了项目级别的调用图,以捕获方法间的调用关系。整个处理过程耗时数年,最终形成了包含超过120万个类和800万个方法的大规模数据集。
使用方法
JEMMA的使用依托于其配套的工作台(Workbench),该工作台提供了一套Python API,支持数据的查询、扩展和模型训练。用户可以通过API获取不同粒度的代码实体及其属性,定义预测任务(如复杂度预测或方法调用补全),并基于预处理的表示(如令牌序列、AST或特征图)训练模型。工作台支持与HuggingFace Transformers库的集成,便于微调CodeBERT、GraphCodeBERT等预训练模型。此外,用户还可以利用调用图和层次化元数据构建跨方法的上下文表示,例如将调用者-被调用者关系纳入输入,以探索项目级上下文对模型性能的影响。
背景与挑战
背景概述
在机器学习与源代码分析(ML4Code)这一蓬勃发展的研究领域中,如何有效建模源代码的丰富结构信息一直是核心议题。尽管近年来基于Transformer的模型(如CodeBERT、GraphCodeBERT)在代码生成、搜索等任务上取得了显著进展,但绝大多数研究仍局限于单个代码片段或方法,忽视了跨文件、跨类的实体间复杂交互。为突破这一瓶颈,Anjan Karmakar、Miltiadis Allamanis与Romain Robbes于2022年提出了JEMMA数据集。该数据集基于50K-C中5万个可编译Java项目构建,涵盖超过120万个类与800万个方法,不仅提供元数据、代码令牌、抽象语法树及图表示等多种预加工信息,还具备可扩展性,允许研究者自定义属性与表示。JEMMA的发布显著降低了ML4Code领域的入门门槛,为构建能推理项目级上下文信息的模型提供了坚实的数据基石与实验平台。
当前挑战
JEMMA旨在应对ML4Code领域的两大核心挑战。其一,现有模型多聚焦于局部代码片段,难以捕捉跨文件、跨类的非局部依赖关系,导致在方法调用补全等任务上性能受限——约80%的方法调用属于非局部调用,而模型对此类预测的准确率远低于API调用。其二,数据集构建本身面临巨大工程挑战:50K-C项目虽可编译,但重编译成功率仅约92%,且依赖缺失与工具失效频发;预处理过程计算资源消耗极高,单个中等规模项目需半小时以上的分析时间,大型项目甚至耗时数日;此外,数据存储与共享亦需权衡,CSV文件总规模达数十GB,部分属性需按需重新计算以优化传输效率。JEMMA通过提供丰富的预加工数据与可扩展工作台,为攻克这些难题铺平了道路。
常用场景
经典使用场景
在机器学习与源代码分析的交叉领域中,JEMMA数据集为研究者提供了一个大规模、高质量且可扩展的Java代码实验平台。其最经典的使用场景聚焦于源代码的表示学习与多粒度建模,研究者可基于该数据集探索从方法级到项目级的代码表示,包括原始文本、词元序列、抽象语法树、特征图以及调用图等多种形式。通过利用JEMMA中超过800万个方法实体及其丰富的元数据与属性,学者能够系统性地评估不同代码表示对模型性能的影响,从而推动源代码理解与生成任务的范式革新。
解决学术问题
JEMMA数据集有效解决了当前机器学习源代码研究中数据集规模有限、预处理不足以及跨实体上下文缺失的学术困境。传统数据集多局限于单一方法或文件,难以捕捉软件系统中实体间的复杂交互。JEMMA通过提供包含数据流、控制流及调用关系的项目级上下文,使得研究者能够深入探究代码的“非局部性”问题,即模型在方法调用补全等任务中因缺乏项目级上下文而表现不佳的根源。其意义在于为构建上下文感知的源代码模型奠定了数据基础,推动了从孤立片段到全局推理的研究转变。
实际应用
在实际应用中,JEMMA数据集为智能软件开发工具的性能提升提供了坚实支撑。例如,在代码补全场景中,开发者可借助JEMMA训练模型,使其不仅理解当前方法内的逻辑,还能感知项目内其他相关实体的调用关系,从而更精准地预测方法调用。此外,该数据集还可用于缺陷预测、代码克隆检测以及代码翻译等任务,通过利用其丰富的静态分析属性(如循环复杂度、空指针异常风险),帮助工业界构建更可靠的代码质量评估与自动修复系统。
数据集最近研究
最新研究方向
在机器学习与代码分析(ML4Code)领域,JEMMA数据集的最新研究方向聚焦于构建具备项目级上下文感知能力的源代码模型。当前研究前沿正从孤立的方法级或文件级建模,转向探索跨文件、跨包的实体间复杂依赖关系。JEMMA通过提供超过800万个Java方法样本、丰富的代码表示(如AST、特征图)以及项目级调用图,为研究者搭建了实验平台。结合大语言模型(如CodeBERT、GraphCodeBERT)的微调,该数据集推动了代码补全、缺陷预测等任务的发展,尤其关注非局部上下文对模型性能的提升。这一方向呼应了软件工程中代码自然性与结构性的热点,为构建更鲁棒的智能开发工具奠定了数据基础。
相关研究论文
  • 1
    JEMMA: An Extensible Java Dataset for ML4Code Applications · 2022年
以上内容由遇见数据集搜集并总结生成
二维码
社区交流群
二维码
科研交流群
商业服务