数据集:
codeparrot/github-code
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 |
数据集的创建分为两个步骤:
该数据集包含来自各种代码库的源代码。因此,它们可能包含有害或偏见的代码,以及像密码或用户名等敏感信息。
您可以使用"revision"参数加载任何旧版本的数据集:
ds = load_dataset("codeparrot/github-code", revision="v1.0")