遇见数据集

h4iku/coconut_c2005

收藏
Hugging Face2023-09-28 更新2024-03-04 收录
官方服务:

资源简介:

--- tags: - code pretty_name: CoCoNuT-C(2005) --- # Dataset Card for CoCoNuT-C(2005) ## Dataset Description - **Homepage:** [CoCoNuT training data](https://github.com/lin-tan/CoCoNut-Artifact/releases/tag/training_data_1.0.0) - **Repository:** [CoCoNuT repository](https://github.com/lin-tan/CoCoNut-Artifact) - **Paper:** [CoCoNuT: Combining Context-Aware Neural Translation Models using Ensemble for Program Repair](https://dl.acm.org/doi/abs/10.1145/3395363.3397369) ### Dataset Summary Part of the data used to train the models in the "CoCoNuT: Combining Context-Aware Neural Translation Models using Ensemble for Program Repair" paper. These datasets contain raw data extracted from GitHub, GitLab, and Bitbucket, and have neither been shuffled nor tokenized. The year in the dataset’s name is the cutting year that shows the year of the newest commit in the dataset. ### Languages - C ## Dataset Structure ### Data Fields The dataset consists of 4 columns: `add`, `rem`, `context`, and `meta`. These match the original dataset files: `add.txt`, `rem.txt`, `context.txt`, and `meta.txt`. ### Data Instances There is a mapping between the 4 columns for each instance. For example: 5 first rows of `rem` (i.e., the buggy line/hunk): ``` 1 public synchronized StringBuffer append(char ch) 2 ensureCapacity_unsynchronized(count + 1); value[count++] = ch; return this; 3 public String substring(int beginIndex, int endIndex) 4 if (beginIndex < 0 || endIndex > count || beginIndex > endIndex) throw new StringIndexOutOfBoundsException(); if (beginIndex == 0 && endIndex == count) return this; int len = endIndex - beginIndex; return new String(value, beginIndex + offset, len, (len << 2) >= value.length); 5 public Object next() { ``` 5 first rows of add (i.e., the fixed line/hunk): ``` 1 public StringBuffer append(Object obj) 2 return append(obj == null ? "null" : obj.toString()); 3 public String substring(int begin) 4 return substring(begin, count); 5 public FSEntry next() { ``` These map to the 5 instances: ```diff - public synchronized StringBuffer append(char ch) + public StringBuffer append(Object obj) ``` ```diff - ensureCapacity_unsynchronized(count + 1); value[count++] = ch; return this; + return append(obj == null ? "null" : obj.toString()); ``` ```diff - public String substring(int beginIndex, int endIndex) + public String substring(int begin) ``` ```diff - if (beginIndex < 0 || endIndex > count || beginIndex > endIndex) throw new StringIndexOutOfBoundsException(); if (beginIndex == 0 && endIndex == count) return this; int len = endIndex - beginIndex; return new String(value, beginIndex + offset, len, (len << 2) >= value.length); + return substring(begin, count); ``` ```diff - public Object next() { + public FSEntry next() { ``` `context` contains the associated "context". Context is the (in-lined) buggy function (including the buggy lines and comments). For example, the context of ``` public synchronized StringBuffer append(char ch) ``` is its associated function: ```java public synchronized StringBuffer append(char ch) { ensureCapacity_unsynchronized(count + 1); value[count++] = ch; return this; } ``` `meta` contains some metadata about the project: ``` 1056 /local/tlutelli/issta_data/temp/all_java0context/java/2006_temp/2006/1056/68a6301301378680519f2b146daec37812a1bc22/StringBuffer.java/buggy/core/src/classpath/java/java/lang/StringBuffer.java ``` `1056` is the project id. `/local/...` is the absolute path to the buggy file. This can be parsed to extract the commit id: `68a6301301378680519f2b146daec37812a1bc22`, the file name: `StringBuffer.java` and the original path within the project `core/src/classpath/java/java/lang/StringBuffer.java` | Number of projects | Number of Instances | | ------------------ |-------------------- | | 12,577 | 2,735,506 | ## Dataset Creation ### Curation Rationale Data is collected to train automated program repair (APR) models. ### Citation Information ```bib @inproceedings{lutellierCoCoNuTCombiningContextaware2020, title = {{{CoCoNuT}}: Combining Context-Aware Neural Translation Models Using Ensemble for Program Repair}, shorttitle = {{{CoCoNuT}}}, booktitle = {Proceedings of the 29th {{ACM SIGSOFT International Symposium}} on {{Software Testing}} and {{Analysis}}}, author = {Lutellier, Thibaud and Pham, Hung Viet and Pang, Lawrence and Li, Yitong and Wei, Moshi and Tan, Lin}, year = {2020}, month = jul, series = {{{ISSTA}} 2020}, pages = {101--114}, publisher = {{Association for Computing Machinery}}, address = {{New York, NY, USA}}, doi = {10.1145/3395363.3397369}, url = {https://doi.org/10.1145/3395363.3397369}, urldate = {2022-12-06}, isbn = {978-1-4503-8008-9}, keywords = {AI and Software Engineering,Automated program repair,Deep Learning,Neural Machine Translation} } ```

tags: - code pretty_name: CoCoNuT-C(2005) --- # CoCoNuT-C(2005)数据集卡片 ## 数据集概述 - **主页:** [CoCoNuT训练数据](https://github.com/lin-tan/CoCoNut-Artifact/releases/tag/training_data_1.0.0) - **代码仓库:** [CoCoNuT代码仓库](https://github.com/lin-tan/CoCoNut-Artifact) - **相关论文:** [CoCoNuT:结合上下文感知神经翻译模型的集成方法用于程序修复](https://dl.acm.org/doi/abs/10.1145/3395363.3397369) ### 数据集摘要 本数据集为论文《CoCoNuT:结合上下文感知神经翻译模型的集成方法用于程序修复》中用于训练模型的部分数据。该数据集包含从GitHub、GitLab及Bitbucket提取的原始数据,未经过数据洗牌与分词(tokenization)处理。数据集名称中的年份代表数据集中最新提交的切割年份。 ### 语言 - C语言 ## 数据集结构 ### 数据字段 本数据集包含4列,分别为`add`、`rem`、`context`与`meta`,分别对应原始数据集文件`add.txt`、`rem.txt`、`context.txt`与`meta.txt`。 ### 数据实例 每个实例的4列之间存在一一映射关系。示例如下: `rem`(即存在缺陷的代码行/代码块)的前5行: 1 public synchronized StringBuffer append(char ch) 2 ensureCapacity_unsynchronized(count + 1); value[count++] = ch; return this; 3 public String substring(int beginIndex, int endIndex) 4 if (beginIndex < 0 || endIndex > count || beginIndex > endIndex) throw new StringIndexOutOfBoundsException(); if (beginIndex == 0 && endIndex == count) return this; int len = endIndex - beginIndex; return new String(value, beginIndex + offset, len, (len << 2) >= value.length); 5 public Object next() { `add`(即修复后的代码行/代码块)的前5行: 1 public StringBuffer append(Object obj) 2 return append(obj == null ? "null" : obj.toString()); 3 public String substring(int begin) 4 return substring(begin, count); 5 public FSEntry next() { 二者对应5个实例,形式如下: diff - public synchronized StringBuffer append(char ch) + public StringBuffer append(Object obj) diff - ensureCapacity_unsynchronized(count + 1); value[count++] = ch; return this; + return append(obj == null ? "null" : obj.toString()); diff - public String substring(int beginIndex, int endIndex) + public String substring(int begin) diff - if (beginIndex < 0 || endIndex > count || beginIndex > endIndex) throw new StringIndexOutOfBoundsException(); if (beginIndex == 0 && endIndex == count) return this; int len = endIndex - beginIndex; return new String(value, beginIndex + offset, len, (len << 2) >= value.length); + return substring(begin, count); diff - public Object next() { + public FSEntry next() { 其中`context`列存储关联的上下文信息:上下文即(内联的)存在缺陷的函数(包含缺陷代码行与注释)。例如,针对 public synchronized StringBuffer append(char ch) 其上下文为对应的完整函数: java public synchronized StringBuffer append(char ch) { ensureCapacity_unsynchronized(count + 1); value[count++] = ch; return this; } `meta`列存储项目的元数据: 1056 /local/tlutelli/issta_data/temp/all_java0context/java/2006_temp/2006/1056/68a6301301378680519f2b146daec37812a1bc22/StringBuffer.java/buggy/core/src/classpath/java/java/lang/StringBuffer.java 其中`1056`为项目ID,`/local/...`为缺陷文件的绝对路径,可通过该路径解析出提交ID:`68a6301301378680519f2b146daec37812a1bc22`、文件名:`StringBuffer.java`以及该文件在项目内的原始路径:`core/src/classpath/java/java/lang/StringBuffer.java`。 | 项目数量 | 实例数量 | | -------- | -------- | | 12,577 | 2,735,506| ## 数据集构建 ### 构建初衷 收集该数据用于训练自动化程序修复(Automated Program Repair, APR)模型。 ### 引用信息 bib @inproceedings{lutellierCoCoNuTCombiningContextaware2020, title = {{{CoCoNuT}}: Combining Context-Aware Neural Translation Models using Ensemble for Program Repair}, shorttitle = {{{CoCoNuT}}}, booktitle = {第29届ACM SIGSOFT国际软件测试与分析研讨会论文集}, author = {Lutellier, Thibaud and Pham, Hung Viet and Pang, Lawrence and Li, Yitong and Wei, Moshi and Tan, Lin}, year = {2020}, month = jul, series = {{{ISSTA}} 2020}, pages = {101--114}, publisher = {{Association for Computing Machinery}}, address = {{New York, NY, USA}}, doi = {10.1145/3395363.3397369}, url = {https://doi.org/10.1145/3395363.3397369}, urldate = {2022-12-06}, isbn = {978-1-4503-8008-9}, keywords = {人工智能与软件工程(AI and Software Engineering)、自动化程序修复(Automated Program Repair)、深度学习(Deep Learning)、神经机器翻译(Neural Machine Translation)} }

提供机构:
h4iku
原始信息汇总

数据集概述:CoCoNuT-C(2005)

数据集描述

  • 数据集名称: CoCoNuT-C(2005)
  • 数据集用途: 用于训练自动化程序修复(APR)模型。
  • 数据来源: 数据提取自GitHub、GitLab和Bitbucket。
  • 数据处理: 数据未经打乱或标记化处理。
  • 数据集年份: 数据集名称中的年份代表数据集中最新提交的年份。

数据集结构

数据字段

  • 字段数量: 4个
  • 字段名称: add, rem, context, meta
  • 字段描述:
    • add: 修复后的代码行/块
    • rem: 有问题的代码行/块
    • context: 包含问题的函数(包括有问题的行和注释)
    • meta: 项目元数据,包括项目ID、文件的绝对路径、提交ID、文件名及项目内的原始路径。

数据实例

  • 实例映射: 每个实例的四个字段相互关联。
  • 示例: 提供了remadd字段的前五行示例及其对应关系。

数据统计

  • 项目数量: 12,577
  • 实例数量: 2,735,506

数据集创建

筛选理由

  • 目的: 收集数据以训练自动化程序修复模型。

引用信息

  • 引用文献: Lutellier, Thibaud et al. "CoCoNuT: Combining Context-Aware Neural Translation Models Using Ensemble for Program Repair." Proceedings of the 29th ACM SIGSOFT International Symposium on Software Testing and Analysis (2020): 101-114.
搜集汇总
数据集介绍
h4iku/coconut_c2005 数据集图片
构建方式
在自动化程序修复(APR)领域,高质量的训练数据是驱动神经翻译模型有效学习的关键。CoCoNuT-C(2005)数据集源自经典论文《CoCoNuT: Combining Context-Aware Neural Translation Models using Ensemble for Program Repair》,旨在为上下文感知的神经翻译模型提供原始代码修复样本。该数据集通过从GitHub、GitLab和Bitbucket等开源平台中提取C语言代码仓库的提交历史构建而成,其中2005表示数据集中最新提交的年份。数据未经洗牌或分词处理,保留了原始代码的完整语义。每个样本由四个字段组成:add(修复后的代码行或块)、rem(有缺陷的代码行或块)、context(包含缺陷行的内联函数及其注释)以及meta(项目元数据,包括项目ID、绝对路径、提交ID和文件路径),确保了修复前后的代码、上下文环境和来源信息的完整映射。
特点
该数据集在自动化程序修复研究领域具有显著特色。首先,其数据来源广泛,覆盖了12,577个不同项目,总计2,735,506个修复实例,规模庞大且多样性高,有助于模型学习跨项目的通用修复模式。其次,数据保留了原始代码的上下文信息,context字段提供了包含缺陷行的完整函数体,使模型能够理解修复的语义环境,而不仅仅是局部代码片段。此外,meta字段提供了详细的来源追溯能力,包括提交ID和文件路径,便于研究者进行数据验证和扩展分析。每个实例通过add、rem和context的映射关系形成清晰的修复对,支持序列到序列的神经翻译任务,且数据未经预处理,保持了原始噪声和多样性,更贴近真实场景。
使用方法
使用CoCoNuT-C(2005)数据集时,研究者可直接加载四个原始文件(add.txt、rem.txt、context.txt和meta.txt),并通过行号索引建立实例间的对应关系。该数据集适用于训练基于神经机器翻译的自动化程序修复模型,其中rem作为源序列输入,add作为目标序列输出,context可作为辅助输入以增强上下文感知能力。meta字段可用于过滤或分组数据,例如按项目ID划分训练集和测试集,或提取特定提交的修复样本。由于数据未经分词,使用者需根据模型需求进行预处理,如代码标记化或子词分割。推荐遵循论文CoCoNuT中的训练流程,结合集成学习策略以提升修复效果,同时可利用该数据集评估模型在不同年份或项目上的泛化能力。
背景与挑战
背景概述
在软件工程领域,自动化程序修复(Automated Program Repair, APR)是提升代码质量与开发效率的关键技术。CoCoNuT-C(2005)数据集由Thibaud Lutellier、Hung Viet Pham等研究人员于2020年构建,隶属于滑铁卢大学林谭教授团队,旨在解决基于神经机器翻译的上下文感知程序修复模型训练数据匮乏的核心问题。该数据集从GitHub、GitLab和Bitbucket等开源平台采集了2005年及之前提交的C语言代码变更,包含超过273万个修复实例,覆盖12,577个不同项目。作为CoCoNuT模型的训练基石,该数据集推动了深度学习在程序修复领域的应用,为后续研究提供了大规模、高质量的基准数据,显著提升了修复模型的泛化能力与准确性。
当前挑战
该数据集面临的挑战主要体现在两方面。首先,在领域问题层面,自动化程序修复需应对代码语义复杂性与修复多样性,传统基于模板或规则的方法难以处理非结构化漏洞,而CoCoNuT-C(2005)虽提供了海量修复实例,但代码片段上下文依赖性强,模型需精准捕捉错误行与修复行间的隐含逻辑,这对序列到序列学习的鲁棒性提出严苛要求。其次,在构建过程中,数据采集面临跨平台代码异构性问题,不同仓库的编码风格、注释规范及提交粒度差异显著,且原始数据未经分词或清洗,需人工设计去噪策略以过滤无关变更(如格式调整、注释修正),同时保证修复对的准确性,避免引入噪声样本影响模型训练效果。
常用场景
经典使用场景
CoCoNuT-C(2005)数据集在自动化程序修复(Automated Program Repair, APR)领域中扮演着基石角色,其经典使用场景聚焦于训练基于神经机器翻译的缺陷修复模型。该数据集精心收集了来自GitHub、GitLab和Bitbucket等开源平台的C语言代码变更记录,包含缺陷代码行与对应修复代码行之间的映射关系,以及丰富的函数级上下文信息。研究者通常利用这些配对数据,训练序列到序列(Seq2Seq)模型学习从错误代码到正确代码的转换规律,从而实现对程序缺陷的自动定位与修复。该数据集以其大规模(超过270万实例)和跨项目覆盖(涵盖12,577个不同项目)的特性,为深度学习驱动的程序修复研究提供了坚实的数据基础。
衍生相关工作
CoCoNuT-C(2005)数据集的发布催生了一系列具有影响力的后续研究工作。其直接衍生的经典工作即为论文《CoCoNuT: Combining Context-Aware Neural Translation Models using Ensemble for Program Repair》,该工作首次提出了结合上下文感知的神经翻译模型集成方法,利用该数据集训练多个异构模型并通过集成策略提升修复准确率。此后,研究者基于此数据集探索了多种改进方向,例如引入注意力机制以更好地捕获代码长距离依赖、利用预训练代码语言模型(如CodeBERT)进行微调以增强语义理解,以及设计多任务学习框架同时预测缺陷位置与修复内容。这些衍生工作共同推动了自动化程序修复领域向更智能、更可靠的方向发展,使神经网络在软件工程中的应用不断深化。
数据集最近研究
最新研究方向
基于CoCoNuT-C(2005)数据集的自动程序修复研究正聚焦于利用上下文感知的神经翻译模型与集成学习策略,以提升代码缺陷修复的精准度与泛化能力。该数据集源自2005年及之前的GitHub、GitLab和Bitbucket仓库,包含了超过270万条未经过洗牌或分词处理的原始C语言代码修改实例,为训练大规模修复模型提供了坚实基础。当前前沿方向包括结合代码上下文信息进行多视角修复、探索集成方法以缓解单一模型的偏差,以及将修复任务与软件安全漏洞检测相融合。这一研究不仅推动了软件工程领域智能化运维的发展,也为应对日益复杂的开源软件生态中的代码质量问题提供了关键支撑。
以上内容由遇见数据集搜集并总结生成
二维码
社区交流群
二维码
科研交流群
商业服务