5000 名员工众包 1.5 万条指令:Dolly 那份「能商用」的指令数据怎么来的

5000 名员工众包 1.5 万条指令:Dolly 那份「能商用」的指令数据怎么来的

2023 年上半年,指令微调领域出现了一个尴尬的僵局:Alpaca、Koala、GPT4All、Vicuna 这些「火出圈」的指令模型,都因为用了 ChatGPT 生成的输出来做训练,而被 OpenAI 的服务条款卡住了商用——你没法用它们去做商业产品。Databricks 用一份名为 databricks-dolly-15k 的数据集,给出了一个漂亮的解法:不碰 ChatGPT,让 5000 多名自家员工众包写出 1.5 万条人类原创的指令-响应对,做出了第一个「真正可商用」的指令微调数据集。

数据集速览卡

项目内容
数据集名称databricks-dolly-15k
发布机构Databricks
发布时间2023 年 4 月(Dolly 2.0 发布时)
规模15000 条(约 15014 条记录)人类生成的指令-响应对
许可证CC BY-SA 3.0(可商用,含署名-相同方式共享要求)
用途定位指令微调(SFT),训练 databricks/dolly-v2-12b 等模型

背景:一个「不可商用」的僵局

要理解 Dolly 数据集的价值,得先理解它要绕开的那个坑。

2023 年 3 月,Databricks 先发布了一个叫 Dolly 1.0 的模型——它用不到 30 美元的成本,训练出了一个能「像 ChatGPT 一样对话」的模型,引发了大量关注。但团队随后被一个问题反复轰炸:「这玩意儿能商用吗?」答案很尴尬:不能。因为 Dolly 1.0 用的是 Stanford Alpaca 团队用 OpenAI API 生成的数据集,而那些数据里包含 ChatGPT 的输出。OpenAI 的服务条款明确禁止「用 ChatGPT 的输出去训练一个和 OpenAI 竞争的模型」。

这个僵局不是 Dolly 独有,而是当时整个开源指令微调圈的通病。Alpaca、Koala、GPT4All、Vicuna 这些知名模型,全都「踩」在 ChatGPT 的输出上,因此全都无法商用。Databricks 的团队意识到,要彻底解决这个问题,唯一的办法是从头造一份「没有被 ChatGPT 污染」的数据——而且必须是人类原创的。

数据构成与规模

databricks-dolly-15k 包含 15000 条(确切说是 15014 条)高质量的、人类生成的「指令-响应」对。每条记录由几个字段构成:instruction(指令)、response(响应)、category(类别)、以及可选的 context(上下文,用于需要参考文本的类别)。

这 1.5 万条数据的作者,是 Databricks 的 5000 多名员工——他们在 2023 年 3 月到 4 月间,以众包的方式完成了这批标注。为了激励这些「本来就有全职工作」的员工认真参与,Databricks 还办了个比赛:前 20 名标注者能拿到大奖。

数据的指令覆盖了八个行为类别。其中七个沿用了 InstructGPT 论文里定义的类别,另加了一个开放式的自由形式类别:

  • 头脑风暴(brainstorming)
  • 分类(classification)
  • 封闭式问答(closed QA,基于参考文本回答)
  • 生成(generation)
  • 信息抽取(information extraction)
  • 开放式问答(open QA)
  • 摘要(summarization)
  • 自由形式(open-ended free-form)

这个类别设计,让数据覆盖了从「事实问答」到「创意写作」到「信息抽取」的相当广的行为谱系,这也是它能训练出一个「像 ChatGPT 一样会聊天」的模型的基础。

清洗与构建方法

Dolly 数据集的构建方法,核心在于「怎么在不碰 ChatGPT 的前提下,保证数据的质量和原创性」。Databricks 的做法是一套相当严格的众包规则。

最关键的一条约束是:每一条回答都必须是原创的。员工被明确要求,不能从 ChatGPT 或网上任何地方复制答案——否则就会「污染」这份数据,重新掉回「不可商用」的坑里。这个约束看似简单,实际执行起来很难,因为「写 1.3 万条原创问答」比想象中难得多。

在数据来源上,员工被允许的唯一例外是 Wikipedia——而且仅限于特定的指令类别(信息抽取、封闭式问答、摘要等需要参考文本的类别)。对于这些类别,贡献者会从 Wikipedia 选取段落作为 context 字段的参考文本。值得注意的是,这些参考文本里可能包含 Wikipedia 的引用编号(如 [42]),Databricks 建议下游使用时把它去掉。

在众包流程上,Databricks 还做了一个聪明的设计:数据生成过程进行到一半时,允许贡献者去「回答其他贡献者提出的问题」。规则是——必须重新表述原问题,且只选「自己有把握正确回答」的问题。这个设计既增加了数据量,也在一定程度上保证了回答质量。

为了保证指令和响应的质量,Databricks 为每个类别都提供了简明的标注指南和示例。不过团队也坦诚地承认,这些指南「刻意保持简洁」,以鼓励高完成率——代价是对标注规范的严格遵循可能有所妥协。用他们自己的话说,就是「caveat emptor」(买家自负)——数据的质量「够用」,但不是学术级严苛。

下载与使用

databricks-dolly-15k 在 Hugging Face 上以 databricks/databricks-dolly-15k 发布,加载方式很简单:

from datasets import load_dataset

dataset = load_dataset("databricks/databricks-dolly-15k")

数据集的下载大小约 12.6 MB,是一个相当轻量的数据集(相比动辄几百 GB 的预训练语料)。它有 8 个字段:instructioncontextresponsecategory,以及记录编号、来源等元数据字段。

这份数据的一个典型用途是「指令微调」(SFT)——用它来训练一个基座模型,让它学会「理解指令并给出有用响应」。Databricks 自己就用它训练了 dolly-v2-12b(基于 EleutherAI 的 pythia 系列)。此外,团队还在数据集卡片里明确指出了它的另一个价值:作为「合成数据生成」的种子——你可以把这些人类原创的指令,作为 few-shot 示例喂给一个大模型,让它批量生成更多同类型的指令,从而扩展成百万级的数据集。

许可证与商用注意

Dolly 数据集的许可证是它最大的卖点:CC BY-SA 3.0(Creative Commons Attribution-ShareAlike 3.0 Unported)。这意味着任何人都可以把它用于任何目的——包括商业应用——只要遵守两点:署名(attribution),以及「相同方式共享」(share-alike,衍生作品必须用相同的许可证发布)。

这几乎是「第一个为商用而生」的开源人类生成指令数据集。团队在发布时特意强调:据他们所知,这是「第一个专为让大模型展现 ChatGPT 式交互、且开放商用的人类生成指令数据集」。

商用注意里,唯一需要留神的是 CC BY-SA 的「相同方式共享」条款——如果你对这份数据做了修改并重新分发,你的衍生数据集也必须用 CC BY-SA 发布。这对大多数「用数据训练模型」的场景影响不大(模型权重不受数据许可证的传染性约束,这是行业通行理解),但如果你要「重新分发一个改进版的数据集」,就需要遵守 share-alike。

横向对比同类数据集

把 Dolly 和同期的指令数据集放在一起看,它的定位会更清晰。

Alpaca(Stanford,2023)比,Alpaca 是用 GPT-3.5 生成、然后用 self-instruct 方式扩展出的 5.2 万条数据,规模更大但「不可商用」;Dolly 只有 1.5 万条、规模更小,却「可商用」。这构成了一个经典的「规模 vs 合规」的取舍。和 OASST1(LAION,2023)比,OASST1 是众包对话、多语言、带详细标注的多轮数据,质量更高也更复杂;Dolly 则更轻量、更聚焦「单轮指令遵循」。和 FLAN(Google)比,FLAN 是把大量已有 NLP 任务数据集「指令化」拼起来的大杂烩,规模巨大但来源混杂;Dolly 是「从零人类原创」的纯净数据。

一个可以提炼的规律是:Dolly 的价值不在于「规模最大」或「质量最高」,而在于它证明了「人类原创、可商用、众包」这条路线走得通。在它之后,「用人类众包造可商用指令数据」成了一个被验证的模式。

局限与争议

Dolly 数据集的局限,主要来自它的「众包」性质和「简洁指南」的设计取舍。

第一是标注者群体的偏差。数据由 Databricks 员工生成,这些人的专业背景、英语水平、知识领域都偏向「科技公司工程师」,不能代表更广泛的人群。数据集卡片也坦诚指出:部分标注者可能不是英语母语者,标注者的人口统计和主题会反映 Databricks 员工的构成。

第二是回答质量的不均。因为指南「刻意简洁」以鼓励高完成率,回答的质量可能存在波动。团队用「caveat emptor」来提醒使用者:别指望它是学术级的严苛标注。

第三是规模相对较小。1.5 万条对一个「通用指令模型」来说偏小,Dolly 自己也承认它不足以训练出一个和 ChatGPT 匹敌的模型——它的定位更多是「可商用的起点」和「合成数据生成的种子」,而非「终极数据」。

「可商用」三个字,为什么值这么多

Dolly 数据集最大的价值,浓缩在「可商用」这三个字里。但要真正理解它的分量,得看清「不可商用」这个魔咒,在当时把整个开源指令微调生态卡得有多死。

2023 年上半年的开源指令微调圈,处在一个很尴尬的境地。Alpaca、Vicuna、GPT4All、Koala 这些模型火得一塌糊涂,但它们全都「踩」在 ChatGPT 的输出上——它们用来训练的数据,是通过 OpenAI API 生成的,或者直接就是 ChatGPT 的回答。OpenAI 的服务条款里有一条,明确禁止「用模型的输出去训练一个和 OpenAI 竞争的模型」。这意味着,这些模型的「血统」是「脏」的——你没法拿它们去做商业产品,因为你一商用,就可能踩 OpenAI 的条款红线。

这个僵局的影响是实质性的。很多开发者、创业公司,想用「指令微调模型」去做客服、做助手、做各种垂直应用,但一查这些模型的「数据来源」,发现全都「不可商用」——要么放弃,要么冒险踩线。Databricks 的团队在发布 Dolly 1.0 后,被问得最多的问题就是「这能商用吗」,而答案是否定的,因为 Dolly 1.0 也用了 Alpaca 的数据。

Dolly 2.0 的突破,就在于它「从根上」解决了这个问题:不碰 ChatGPT、不碰 OpenAI API,让人类(自家员工)从头原创写出指令和响应。这样,数据的「血统」就干净了——它是纯人类生成的,没有任何 OpenAI 的「污染」。这听起来简单,但执行起来极其费力:1.5 万条问答,每一条都必须原创、不能从网上复制、不能碰 AI 生成。这正是「可商用」三个字背后的成本。

Databricks 自己对这个问题的理解,其实点破了整个 AI 数据生态的一个深层矛盾:「用 AI 生成数据」虽然便宜高效,但它会带来「血统」和「合规」上的连锁问题;而「用人类生成数据」虽然贵,但它是「干净」的。Dolly 是这个矛盾的一个鲜明注脚——它用「贵」的方式,换来了「干净」和「可商用」。

Dolly 的八个类别,藏着指令微调的设计智慧

Dolly 数据集那八个行为类别,表面上只是「分类」,实际上藏着指令微调数据设计的几个关键智慧,值得拆开细看。

第一个智慧是「有标准答案的」和「没有标准答案的」要分开。八个类别里,封闭式问答(closed QA)、信息抽取、摘要,是需要「参考文本」的、有标准答案的任务;而头脑风暴、开放式问答、创意写作,是「没有标准答案」的、开放性的任务。把这两类分开,意味着数据里既包含「可验证的事实性回答」,也包含「多样化的创造性回答」——这对训练一个「既准确、又自然」的指令模型很关键。如果只有封闭式问答,模型会变得「死板」;如果只有开放性任务,模型会变得「爱胡编」。

第二个智慧是「context 字段」的设计。对于封闭式问答、信息抽取、摘要这些需要参考文本的任务,Dolly 提供了一个 context 字段,用来存放「参考段落」(通常来自 Wikipedia)。这个设计,实际上是在「指令微调数据」里内置了「检索增强」的雏形——它教会模型「如何基于给定的上下文来回答问题」,而不只是「凭记忆回答」。这对于训练「忠于上下文、不胡编」的模型,价值很大。

第三个智慧是「任务多样性」本身就是一种能力。八个类别覆盖了「理解、生成、抽取、分类、摘要」这个相当广的谱系,而 Dolly 训练出的模型(dolly-v2)也确实表现出「像 ChatGPT 一样能应对各种指令」的通用性。这说明,指令微调数据的「任务多样性」,直接决定了微调后模型的「通用性」——数据里有什么样的任务类型,模型就学会什么样的能力。

从 Dolly 到「合成数据」:一份数据的两种命运

Dolly 数据集有一个常被忽略、却很重要的「第二用途」:它不仅是「指令微调的训练数据」,还是「合成数据生成的种子」。这个用途,让它在数据生态里的角色又深了一层。

Databricks 在数据集卡片里明确点出了这一点:「这份数据作为人类生成的指令提示语料,为 Self-Instruct 论文里描述的方法提供了宝贵的合成数据生成机会」。具体怎么做?把这些人类原创的指令,作为 few-shot 示例喂给一个大语言模型,让它批量生成「同类型」的新指令,从而把 1.5 万条扩展成「百万条」级别的数据集。

这个思路的巧妙之处在于:Dolly 里的指令是「人类原创的、高质量的、多样化的」,它们天然适合作为「种子」——因为合成数据的质量,很大程度上取决于「种子」的质量。用 ChatGPT 的指令当种子,产出的合成数据「血统」不干净;而用 Dolly 的人类原创指令当种子,产出的合成数据就绕开了「不可商用」的魔咒。

Databricks 还点出了另一个扩展方向:数据增强(data augmentation)。可以用一个「改写模型」(paraphrasing model)把 Dolly 里的每一条指令或响应重新表述,从而产生新的样本。这种做法可以为数据集提供一种「正则化」——让模型对「同一意图的不同表述」更鲁棒,从而训练出指令遵循能力更稳的模型。

所以,Dolly 数据集的完整价值图景是:它既是「可以直接用来微调的数据」,又是「可以放大成更大数据的种子」,还是「可以做数据增强的底料」。一份 1.5 万条的数据,通过这三种用法,可以撬动出远超自身规模的价值。这也是为什么它在「不可商用」的僵局里,显得格外珍贵——它不只是「一份干净的数据」,更是一个「干净的起点」。

参考来源

  • Databricks Blog《Free Dolly: Introducing the World’s First Truly Open Instruction-Tuned LLM》(2023-04-12)
  • Hugging Face:databricks/databricks-dolly-15k 数据集卡片
  • GitHub:databrickslabs/dolly
  • TensorFlow Datasets:databricks_dolly 目录
主要菜单