1.6 万条对话、35 种语言:OpenAssistant 那份众包指令数据的来龙去脉

数据集速览卡

数据集名称OpenAssistant Conversations (OASST1)
发布机构LAION(OpenAssistant 项目)
发布时间2023 年 4 月(论文 arXiv 2304.07327)
规模161,443 条消息,66,497 棵对话树,35 种语言
许可证Apache 2.0
用途定位开源指令微调(SFT)+ 人类反馈(RLHF)数据,多语言对话

背景:开源社区差一份「真人的对话」

2022 年底到 2023 年初,ChatGPT 引爆了大模型热潮,也让「对齐」(alignment)和「指令微调」(instruction tuning)这两个词走进了大众视野。但和预训练语料一样,指令数据也卡在同一个问题上:好的数据被大公司攥在手里,不公开。

当时开源社区手里有什么?Alpaca 的 5.2 万条数据是从 GPT-3 自动生成的,虽然免费但「二手」——它的质量天花板就是 GPT-3 自己;Dolly 是 Databricks 员工手工写的 1.5 万条,数量有限;还有很多是机器生成的合成数据。真正由真人、用母语、多轮对话、带质量评分的数据,几乎是个空白。

OpenAssistant 这个项目就是想填补这个空白。它的口号「Conversational AI for everyone」直白地点明了野心:做一个完全开源的 ChatGPT 替代品,从数据、模型到界面全开放。OASST1 就是这个宏大计划里最关键的一块地基——一份由真人贡献、真人标注的对话语料。

这个项目的另一个现实意义在于:它证明了「开源社区靠众包也能攒出高质量对齐数据」这件事可行。13,500 多名志愿者来自世界各地,他们不是为了钱(项目是纯志愿性质的),而是认同「AI 不该被垄断」这个理念。这种动员能力本身,就是 OASST1 最值得被记住的一点。

数据构成与规模:对话树而不是流水账

OASST1 的核心数据是一棵棵「对话树」(conversation tree)。这和平常看到的线性对话不一样:每一棵树的根节点是一条初始 prompt,然后可以有多个志愿者分别回复这个 prompt,形成多个分支;每个分支上又可以有下一轮的多个回复,继续分叉。最终呈现出来的,是一个从根节点不断分叉出去的树状结构。

为什么不用简单的线性对话?因为对话树能同时保留「同一个问题,不同人怎么答」的多样性信息。同一根 prompt 下的多个回复,天然就是一份「哪个回答更好」的偏好信号,这为后续的偏好排序(ranking)和 RLHF 训练提供了原材料。可以说,对话树这个设计,同时服务了 SFT 和 RLHF 两种用途。

具体数字(论文和数据集卡片逐字记录):

  • 161,443 条消息,分布在 66,497 棵对话树中。
  • 覆盖 35 种语言,其中英语最多(71,956 条消息),其次是西班牙语(43,061 条)、俄语(9,089 条)、德语(5,279 条)、中文(4,962 条)、法语(4,251 条)等。
  • 标注了 461,292 个质量评分
  • 其中约 152,867 条是人工提交的消息,8,576 条是合成消息(模型生成、人工审核的)。
  • 由超过 13,500 名志愿者贡献。

每条消息都带有一组丰富的元数据字段:消息 ID、父消息 ID(用于重建树结构)、用户 ID、创建时间、文本、角色(prompter 或 assistant)、语言、审核次数、审核结果、是否删除、排名、是否合成、模型名等。还有一个用 Detoxify 计算出来的毒性评分(toxicity、severe_toxicity、obscene、identity_attack 等维度),这个设计很用心——它把安全考量直接做进了数据结构里。

在 Hugging Face 上,官方还提供了 train/validation 的划分:train 有 84,437 条消息(95%),validation 有 4,401 条(5%)。这个划分是按消息树做的,保证训练集和验证集之间没有同一棵树的泄漏。

构建方法:一套精心设计的众包流水线

OASST1 的采集不是「发个帖子让大家随便写」,而是一套有明确任务分类和质量控制机制的众包系统。志愿者通过一个 Web 界面参与,系统把工作拆成了几种不同类型的任务。

完整的采集流程大致是这样一个循环:

  1. 创造 prompt:志愿者先写出初始问题(树的根节点)。
  2. 回复:其他志愿者对这个 prompt 写出 assistant 角色的回答。
  3. 标注:志愿者对已有的 prompt 和回复做质量打分、贴标签。
  4. 排序:志愿者对同一 prompt 下的多个回复做好坏排序(ranking),这就是偏好数据的来源。

为了保证质量,项目还做了一系列配套动作:编写了详细的《贡献者指南》(Contributor Guidelines),告诉志愿者什么算好回答、什么算差回答;引入了排行榜和奖励机制激励参与;最重要的是,每条消息都要经过多人审核(review),审核不通过的消息会被标记甚至删除。数据卡片里专门有一个 review_result 字段记录审核是否通过,还有一个 spam 文件单独存放被判定为低质或审核未通过的消息。

这种「多人审核 + 质量评分 + 排序」的组合,正是 OASST1 区别于纯机器生成数据的关键。它把「好不好」这个主观判断,通过众包的方式变成了结构化的、可用的信号。

对话树的角色交替与多轮结构

OASST1 的对话树有几个结构性的细节值得展开讲清楚,因为它们直接决定了数据怎么用。

第一个是角色严格交替。在任意一棵对话树里,从根节点到叶子节点,消息的角色严格交替——prompter(提问者)和 assistant(回答者)一问一答。这个设计保证了抽取出的任何一条「从根到叶」的路径,都是一段结构合法、角色正确、可以原样喂给模型训练的多轮对话。

第二个是分支代表多样性。同一个 prompt 下,不同的志愿者会给出风格迥异的回答:有的简洁、有的详细、有的带代码、有的用不同语言。这些并行分支天然构成了「同一问题的多种答法」,既是 SFT 的多样性来源,也是偏好排序的原材料。

第三个是质量评分的层次。数据里的 rank 字段记录了同一 prompt 下多个回答的排序,review_result 记录了审核是否通过,review_count 是审核次数。这些字段组合起来,让使用者可以按「质量」筛选数据——比如只取审核通过、排名靠前的消息做训练,剔除低质量部分。这种「数据自带质量标签」的设计,省去了下游大量人工清洗的功夫。

第四个是合成消息的标记。数据里有约 8,576 条合成消息,它们带 synthetic: true 标记,是早期版本的模型生成的、经人工审核的内容。使用者可以按这个标记把合成数据和纯人工数据分开,根据自己的需求选择是否混入。

OpenAssistant 模型:这份数据训出了什么

评估 OASST1 价值的直接方式,是看它训出的 OpenAssistant 模型表现如何。

OpenAssistant 团队用这份数据做了完整的对齐训练:先做监督微调(SFT),再做 RLHF。基座模型选择了开源的 Pythia 和 LLaMA 系列。最终发布的代表性版本是 Pythia-12B 的微调模型(如 oasst-sft-4-pythia-12b)。

在人类偏好测试里,基于 Pythia-12B 的 OpenAssistant 变体,与 ChatGPT(gpt-3.5-turbo)对比时取得了约 48.3% 的胜率。这个数字的意义在于:一个纯开源、纯志愿众包数据训出来的 12B 模型,几乎和当时最强的闭源模型打成了五五开。这直观地证明了 OASST1 数据的高质量,也证明了「开源众包对齐」这条路是真的走得通、走得远的。

虽然 48.3% 的胜率意味着它仍略逊于 ChatGPT(胜负约一半),但考虑到两者在数据、算力、工程投入上的天壤之别,这个结果已经相当有说服力。

质量控制:如何让 1.3 万志愿者输出高质量

众包数据最大的质疑通常是「质量参差」,OASST1 用一套多层次的质量控制机制来回应这个质疑,这套机制值得单独讲清楚。

第一个层次是指南与培训。项目编写了详细的《贡献者指南》,明确告诉志愿者什么是好回答(准确、有帮助、格式规范)、什么是差回答(敷衍、跑题、有害)。这相当于「上岗前培训」,从源头提高数据质量。

第二个层次是多人交叉审核。每条消息都不是「一人说了算」,而是要经过多人审核。数据里的 review_count(审核次数)和 review_result(审核结论)字段,记录的就是这个多人审核的结果。审核不通过的消息会被标记或删除,只有通过的消息才进入正式数据。

第三个层次是排序机制。对于同一个 prompt 的多个回答,志愿者要进行排序(ranking),选出「哪个更好」。这个排序既是一种质量信号(排序靠前的更可能被采用),本身也成了偏好数据——直接服务于 RLHF 训练。

第四个层次是自动化辅助。数据里内置了用 Detoxify 模型计算的毒性评分(toxicity、severe_toxicity、obscene、identity_attack、insult、threat、sexual_explicit 等多个维度),可以自动标记出潜在的有害内容,作为人工审核的补充。

这四层机制(指南 + 多人审核 + 排序 + 自动毒性检测)叠加起来,让 OASST1 在「完全志愿、完全开源」的前提下,依然达到了可用、甚至相当不错的质量水准。这套「人工 + 自动、多重交叉」的质量控制思路,对任何做众包数据的项目都有借鉴意义。

社区衍生与后续版本

OASST1 不是终点,它催生了一系列衍生数据和后续版本,这些也值得了解。

社区基于 OASST1 做了大量二次加工:有人抽取单轮对话做 SFT,有人抽取偏好对做 DPO/RLHF,有人按语言拆分出「中文子集」「日文子集」供特定语言模型训练。这些衍生工作在 Hugging Face 上都能找到,是 OASST1「开源生态」价值的体现——一份好数据,会自己长出无数下游应用。

官方层面,项目在 2024 年 1 月宣布完成使命,并发布了最终版本数据集 oasst2,同样托管在 Hugging Face 上。oasst2 在 oasst1 的基础上继续扩充和优化,是这份众包对齐数据的「收官之作」。虽然项目停止了持续运营,但 oasst1/oasst2 作为开源对齐数据的经典样本,仍在被大量研究和引用。

对使用者来说,如果追求「经过时间检验、被广泛使用的稳定版本」,选 oasst1;如果想用项目最后的完整数据,可以看看 oasst2。两者都是 Apache 2.0,都可商用。

下载与使用

OASST1 在 Hugging Face 上的数据集 ID 是 OpenAssistant/oasst1,许可证是 Apache 2.0,可以直接商用。加载方式很标准:

from datasets import load_dataset
ds = load_dataset("OpenAssistant/oasst1")
# train 84437 条,validation 4401 条

不过有一个使用上的坑要注意:因为数据本质是「消息树」,而 HF datasets 擅长的是扁平的表格数据,所以官方把消息按「深度优先」的顺序平铺了。如果你需要还原完整的多轮对话,得用消息里的 parent_idmessage_id 字段自己重建树结构。好在官方同时提供了 jsonl 格式的原始文件(messages、trees 等),需要完整树信息的话直接读 jsonl 更省事。

实际用于 SFT 训练时,社区通常的做法是:从对话树里抽取出「从根节点到叶子节点」的线性路径,构成一条条多轮对话样本,再按标准指令格式(比如 prompt + completion 或 chat template)拼接。也有不少项目直接把它当作 RLHF 的偏好数据源,利用同一 prompt 下的多回复排序来训练奖励模型。

许可证与商用注意

OASST1 使用 Apache 2.0 许可证,这是开源世界里对商用最友好的许可证之一,基本没有限制,商用、修改、再分发都允许,只需保留版权声明和许可证文本。这一点和很多「仅供研究」的数据集(比如 Alpaca 明令禁止商用)形成了鲜明对比,也是 OASST1 的价值所在——它是少数可以放心商用的多语言人工指令数据集。

需要留意的一点是数据来源:这些文本是志愿者在 2022-2023 年间创作的对话内容,版权归贡献者,但通过 Apache 2.0 授权给了使用者。另外,数据里可能包含志愿者输入的、涉及真实个人信息的内容,虽然项目做了审核,但商用前还是建议做一轮内容合规检查。

横向对比同类数据集

  • 对比 Alpaca:Alpaca 是机器生成(GPT-3 self-instruct),5.2 万条,英文为主,禁止商用;OASST1 是真人众包,16 万条,35 种语言,Apache 2.0 可商用。论真实性和商用自由度,OASST1 明显胜出;论获取成本,Alpaca 更便宜(几乎零成本自动生成)。
  • 对比 Dolly:Dolly 也是人工写的,但只有 1.5 万条、英文,规模小一个量级;OASST1 在规模和多语言上占优。
  • 对比 UltraChat / WildChat:UltraChat 是 GPT-4 生成的合成对话(机器),WildChat 是真实用户和 ChatGPT 的对话记录(真人提问、机器回答)。OASST1 的独特之处在于「真人对真人」的多轮对话 + 真人排序,这是它和所有机器参与的数据集最本质的区别。
  • 对比后来的 UltraChat-200k、ShareGPT:ShareGPT 是用户分享的 ChatGPT 对话,数量大但质量参差、隐私风险高;OASST1 是「有组织、有审核」的众包,质量更可控。

局限与争议

OASST1 的局限也比较明显。

第一是语言分布极不均衡。虽然号称 35 种语言,但英语一家独大(71,956 条),西班牙语次之,其余语言都是「点缀」级别。真正要训练一个高质量的中文、日文等非英语模型,OASST1 里的对应数据是远远不够的。

第二是内容质量仍参差。众包天然存在水平差异,虽然有审核机制,但 16 万条消息里仍有相当比例质量平平的回答。实际训练时往往需要额外的质量过滤。

第三是项目生命周期。OpenAssistant 项目在 2024 年 1 月宣布完成使命,社区后续的持续维护有限。这意味着数据集是「一锤子」快照,不会持续更新,遇到问题也较难获得官方支持。

第四是规模相对较小。161,443 条消息、约 8 万多个有效对话,在今天动辄百万、千万条的指令数据面前不算大。它更适合作为研究基线或中小规模微调,而不是追求极致性能的大规模训练主料。

总结与启示

OASST1 最大的价值,是它证明了「开源社区靠志愿众包,也能做出高质量、可商用、多语言的对齐数据」。在 ChatGPT 之后那段「数据被垄断」的焦虑期里,它给开源大模型打了一剂强心针,也让很多人第一次意识到:对齐数据不一定非得靠大公司的闭门标注,或者靠 GPT 的机器生成,真人协作同样是一条可行路径。

它的「对话树」结构、多人审核机制、内置毒性评分这些设计,也对后来的数据集产生了影响。可以说,OASST1 是开源对齐数据史上的一个里程碑——规模不是最大的,但理念是最具示范性的。

参考来源

1.6 万条对话、35 种语言:OpenAssistant 那份众包指令数据的来龙去脉

主要菜单