数据集:

codeparrot/github-code

英文

GitHub Code Dataset

Dataset Description

GitHub代码数据集包含来自GitHub的1.15亿个代码文件,涵盖32种编程语言和60个扩展名,总计1TB的数据。该数据集是从Google BigQuery上的公共GitHub数据集创建的。

如何使用

GitHub代码数据集非常庞大,因此对于大多数用例,建议使用数据集的流媒体API。您可以使用以下两行代码加载并迭代数据集:

from datasets import load_dataset

ds = load_dataset("codeparrot/github-code", streaming=True, split="train")
print(next(iter(ds)))

#OUTPUT:
{
 'code': "import mod189 from './mod189';\nvar value=mod189+1;\nexport default value;\n",
 'repo_name': 'MirekSz/webpack-es6-ts',
 'path': 'app/mods/mod190.js',
 'language': 'JavaScript',
 'license': 'isc',
 'size': 73
}

可以看到,除了代码、仓库名称和路径外,数据集还包括编程语言、许可证和文件大小。您还可以根据数据集中包含的30种语言的任何子集进行过滤(请参阅下面的完整列表)。只需将语言列表作为参数传递即可。例如,如果您想构建一个适用于Dockerfiles的Codex模型,请使用以下配置:

ds = load_dataset("codeparrot/github-code", streaming=True, split="train", languages=["Dockerfile"])
print(next(iter(ds))["code"])

#OUTPUT:
"""\
FROM rockyluke/ubuntu:precise

ENV DEBIAN_FRONTEND="noninteractive" \
    TZ="Europe/Amsterdam"
...
"""

我们还可以访问文件所属原始仓库的许可证,因此可以按照与语言相同的方式对许可证进行过滤:

ds = load_dataset("codeparrot/github-code", streaming=True, split="train", licenses=["mit", "isc"])

licenses = []
for element in iter(ds).take(10_000):
    licenses.append(element["license"])
print(Counter(licenses))

#OUTPUT:
Counter({'mit': 9896, 'isc': 104})

当然,您也可以下载完整的数据集。请注意,这将下载大约300GB的压缩文本数据,并且解压缩后的数据集将占用约1TB的存储空间:

ds = load_dataset("codeparrot/github-code", split="train")

数据结构

数据实例

{
 'code': "import mod189 from './mod189';\nvar value=mod189+1;\nexport default value;\n",
 'repo_name': 'MirekSz/webpack-es6-ts',
 'path': 'app/mods/mod190.js',
 'language': 'JavaScript',
 'license': 'isc',
 'size': 73
}

数据字段

Field Type Description
code string content of source file
repo_name string name of the GitHub repository
path string path of file in GitHub repository
language string programming language as inferred by extension
license string license of GitHub repository
size int size of source file in bytes

数据拆分

数据集仅包含训练集。

编程语言

数据集包含30种编程语言,涵盖60个扩展名:

{
    "Assembly": [".asm"],
    "Batchfile": [".bat", ".cmd"],
    "C": [".c", ".h"],
    "C#": [".cs"],
    "C++": [".cpp", ".hpp", ".c++", ".h++", ".cc", ".hh", ".C", ".H"],
    "CMake": [".cmake"],
    "CSS": [".css"],
    "Dockerfile": [".dockerfile", "Dockerfile"],
    "FORTRAN": ['.f90', '.f', '.f03', '.f08', '.f77', '.f95', '.for', '.fpp'],
    "GO": [".go"],
    "Haskell": [".hs"],
    "HTML":[".html"],
    "Java": [".java"],
    "JavaScript": [".js"],
    "Julia": [".jl"],
    "Lua": [".lua"],
    "Makefile": ["Makefile"],
    "Markdown": [".md", ".markdown"],
    "PHP": [".php", ".php3", ".php4", ".php5", ".phps", ".phpt"],
    "Perl": [".pl", ".pm", ".pod", ".perl"],
    "PowerShell": ['.ps1', '.psd1', '.psm1'],
    "Python": [".py"],
    "Ruby": [".rb"],
    "Rust": [".rs"],
    "SQL": [".sql"],
    "Scala": [".scala"],
    "Shell": [".sh", ".bash", ".command", ".zsh"],
    "TypeScript": [".ts", ".tsx"],
    "TeX": [".tex"],
    "Visual Basic": [".vb"]
}

许可证

每个示例还附带所关联仓库的许可证。总共有15种许可证:

[
  'mit',
  'apache-2.0',
  'gpl-3.0',
  'gpl-2.0',
  'bsd-3-clause',
  'agpl-3.0',
  'lgpl-3.0',
  'lgpl-2.1',
  'bsd-2-clause',
  'cc0-1.0',
  'epl-1.0',
  'mpl-2.0',
  'unlicense',
  'isc',
  'artistic-2.0'
 ]

数据集统计信息

数据集包含1.15亿个文件,所有源代码文件的总大小为873GB(请注意,由于额外的字段,数据集的大小更大)。下面的图表和表格显示了每种语言的详细信息:

Language File Count Size (GB)
0 Java 19548190 107.70
1 C 14143113 183.83
2 JavaScript 11839883 87.82
3 HTML 11178557 118.12
4 PHP 11177610 61.41
5 Markdown 8464626 23.09
6 C++ 7380520 87.73
7 Python 7226626 52.03
8 C# 6811652 36.83
9 Ruby 4473331 10.95
10 GO 2265436 19.28
11 TypeScript 1940406 24.59
12 CSS 1734406 22.67
13 Shell 1385648 3.01
14 Scala 835755 3.87
15 Makefile 679430 2.92
16 SQL 656671 5.67
17 Lua 578554 2.81
18 Perl 497949 4.70
19 Dockerfile 366505 0.71
20 Haskell 340623 1.85
21 Rust 322431 2.68
22 TeX 251015 2.15
23 Batchfile 236945 0.70
24 CMake 175282 0.54
25 Visual Basic 155652 1.91
26 FORTRAN 142038 1.62
27 PowerShell 136846 0.69
28 Assembly 82905 0.78
29 Julia 58317 0.29

数据集创建

数据集的创建分为两个步骤:

  • 从上述列表中提取具有给定扩展名的文件,这些文件来自于BigQuery上的GitHub数据集(完整查询语句: here )。查询于2022年3月16日UTC+1时间下午6:23:39执行。
  • 删除超过1000个字符和重复行的文件(完整预处理脚本: here )。
  • 使用数据的注意事项

    该数据集包含来自各种代码库的源代码。因此,它们可能包含有害或偏见的代码,以及像密码或用户名等敏感信息。

    版本发布

    您可以使用"revision"参数加载任何旧版本的数据集:

    ds = load_dataset("codeparrot/github-code", revision="v1.0")
    

    v1.0

    • 数据集的初始发布
    • 查询于2022年2月14日UTC+1时间中午12:03:16执行

    v1.1

    • 修复了缺失的Scala/TypeScript
    • 修复了Python的去重问题
    • 查询于2022年3月16日UTC+1时间下午6:23:39执行