Skip to main content
QUICK REVIEW

[论文解读] PyTorrent: A Python Library Corpus for Large-scale Language Models

Mehdi Bahrami, N. C. Shrikanth|arXiv (Cornell University)|Oct 4, 2021
Software Engineering Research参考文献 27被引用 4
一句话总结

PyTorrent 是一个大规模、公开可用的语料库,包含来自 PyPI 和 Anaconda 的 218,814 个 Python 包库,专为在软件工程任务中训练和微调大规模语言模型而精心整理。该语料库提供源代码、自然语言描述、元数据以及一个基于 DistilBERT 的预训练模型,可直接用于代码搜索、代码生成和缺陷预测任务,且基础设施开销极低。

ABSTRACT

A large scale collection of both semantic and natural language resources is essential to leverage active Software Engineering research areas such as code reuse and code comprehensibility. Existing machine learning models ingest data from Open Source repositories (like GitHub projects) and forum discussions (like Stackoverflow.com), whereas, in this showcase, we took a step backward to orchestrate a corpus titled PyTorrent that contains 218,814 Python package libraries from PyPI and Anaconda environment. This is because earlier studies have shown that much of the code is redundant and Python packages from these environments are better in quality and are well-documented. PyTorrent enables users (such as data scientists, students, etc.) to build off the shelf machine learning models directly without spending months of effort on large infrastructure. The dataset, schema and a pretrained language model is available at: https://github.com/fla-sil/PyTorrent

研究动机与目标

  • 为解决在软件工程任务中训练大规模语言模型时缺乏高质量、经筛选的 Python 库语料库的问题。
  • 通过提供来自 PyPI 和 Anaconda 的高质量、文档齐全的 Python 包数据集,提升代码复用性和可读性。
  • 使研究人员和实践者能够无需大量数据准备或基础设施投入,即可微调 CodeBERT、CodeXGLUE 和 GraphCodeBERT 等现有模型。
  • 通过提供标准化、符合模式的语料库,支持下游任务如代码检索、代码生成和自动程序修复。
  • 通过提供已分词、截断并优化的语料库及预训练模型,减少训练时间与计算成本。

提出的方法

  • 通过从 PyPI 和 Anaconda 中挖掘 218,814 个 Python 包,提取源代码、文档字符串和元数据(如包名、许可证、支持的 Python 版本)。
  • 采用与 CodeSearchNet 兼容的模式,以确保与现有基于 Transformer 的模型兼容,包括自然语言描述(NL)、源代码(PL)、函数名和标记字段。
  • 在 100 万个原始 Python 脚本(1235 万行代码)上训练了一个字节级 BPE 分词器,将每个序列截断为 50 个标记以减轻计算负载。
  • 从零开始在 100 万个脚本上训练了一个基于 DistilBERT 的掩码语言模型,生成的预训练模型作为 PyTorrent(v1) 发布在 Hugging Face Hub 上。
  • 语料库包含三种增强的代码场景,以支持多样化的下游任务,包括代码搜索和代码生成。
  • 在 CodeBERT 上进行了微调实验,使用 PyTorrent 语料库,结果在多行代码生成任务中表现优异。

实验结果

研究问题

  • RQ1从 PyPI 和 Anaconda 收集的经筛选的 Python 包库语料库能否提升代码搜索和代码生成模型的性能?
  • RQ2与从 GitHub 仓库中挖掘相比,使用来自包管理器的高质量、文档齐全的包在多大程度上能提升模型的泛化能力?
  • RQ3在 PyTorrent 上训练的预训练模型在代码检索和代码生成等下游任务中的有效性如何?
  • RQ4PyTorrent 语料库能否无缝集成到 CodeSearchNet、CodeBERT 和 GraphCodeBERT 等现有框架中用于微调?
  • RQ5过滤掉代码量少于等于 35 行、圈复杂度不超过 10 的简单包后,对模型训练效率和输出质量有何影响?

主要发现

  • PyTorrent 包含 4,058,349 个文件,6.55 亿行代码,以及 284 万个函数,是迄今为止最大规模的经筛选的 Python 代码语料库之一。
  • 语料库为全部 218,814 个包提供了元数据,如许可证、支持的 Python 版本和包描述,增强了模型的可解释性与可用性。
  • 成功从零开始在 100 万个脚本上训练了一个基于 DistilBERT 的预训练模型(PyTorrent(v1)),并发布在 Hugging Face Hub 上,可立即部署使用。
  • 在 PyTorrent 语料库上微调 CodeBERT 在多行代码生成任务中表现优异,证明了该语料库在复杂代码合成任务中的价值。
  • 该语料库与主流代码建模框架(包括 CodeSearchNet、CodeXGLUE 和 GraphCodeBERT)兼容,支持即插即用的下游研究集成。
  • 使用包含 56,000 个标记的 BPE 分词器,并将序列截断至 50 个标记,显著降低了计算成本,同时保持了模型性能。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。