面向代码生成的编程语言资源分级分类体系
核心概要
该工作首次对编程语言的网络语料资源进行可复现的分级分类:作者合并去重七个主流代码语料库,用 StarCoder 分词器统计 646 种编程语言的 token 数,按 100B、10B、1B 三个阈值划分为 High、Medium、Low、Scarce 四个层级,发现仅占语言数 1.9% 的 12 种 High 层语言(如 Python、JavaScript、Java)贡献了全部 7.63 万亿 token 中的 74.6%,而占 71.7% 的 463 种 Scarce 层语言仅贡献 1.0%,并通过 Gini 系数、变异系数、Lorenz 曲线与 ECDF 生存曲线刻画了层级间与层级内的不均衡。
Figure 1: Resource imbalance across four tiers. (a) : share of languages; (b) : share of tokens. Only 1.9% of languages (High) supply 74.6% of all tokens, while 71.7% of languages (Scarce) contribute just 1.0%.
arXiv深度剖析
提出首个面向编程语言的可复现资源分级分类,将 646 种语言按 token 总量划入四个层级。 此前自然语言领域已有 Joshi 等人的资源分级体系,而编程语言领域只有零散观察,缺乏形式化刻画;该工作把这一思路迁移到代码领域并给出明确阈值。 基于七个语料库合并去重后的 7.63 万亿 token 统计,阈值与流程公开,可复现。
量化了代码资源的极端长尾:12 种 High 层语言占 74.6% 的 token,463 种 Scarce 层语言仅占 1.0%。 把“Python 中心”从轶事性观察变为可测量的层级现象,并给出前 10 种语言合计占 71.6%、后 10 种合计约 0.00003% 的具体数字。 全量 token 计数与附录中逐语言的 token 与文件数清单支撑,量级差异极大。
层级内部同样不均衡:Scarce 层 Gini 为 0.66、变异系数为 1.37,High 层 Gini 为 0.43,各层均值均高于中位数。 不仅描述层级之间的差距,还用不平等、离散度与右偏三类统计量刻画层级内部的分布形态。 Gini、变异系数、均值对中位数比较、Lorenz 曲线与 ECDF 生存曲线相互印证。
公开 token 计数与层级归属,为数据集筛选与分层评测提供依据。 使基准测试可以按层级分层打分,而不是用总体均值掩盖各层弱点,也便于他人替换分词器或调整阈值。 作者声明公开原始计数与层级分配,并说明仅发布聚合统计而非原始代码。
启示与展望
该分类面向以网络抓取语料训练和评测代码大模型的场景,适用于数据集筛选、分层基准打分与爬取优先级判断;对关注低资源编程语言、代码检索或代码安全的研究者与工程团队尤其相关。作者指出其选择七个宽松许可语料库、单一 StarCoder 分词器、基于扩展名的语言识别、精确哈希去重与启发式阈值,是为透明与可复现而设,并公开原始计数以便他人替换分词器或调整阈值。
读者可继续关注:不同分词器或更细粒度去重会如何改变绝对计数;基于扩展名的语言识别对多语言文件与模板类文件的处理;启发式阈值在语料持续增长后是否需要重设;以及层级归属与模型实际生成表现之间的对应关系,原文以“Python 默认”为例提出这一联系,但未给出生成实验。
