bonito
用开源模型替代GPT-4,将任意无标注文本自动转化为指令微调训练数据集,无需商业API
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用开源模型替代GPT-4,将任意无标注文本自动转化为指令微调训练数据集,无需商业API
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你有没有想过,如果你手上有一批无标注的文本数据,想用它训练一个专门处理某类任务的 AI 助手,传统的做法是请人手工标注数据——耗时、烧钱、还难以规模化。这正是 Bonito 要解决的核心痛点:由布朗大学 BatsResearch 团队打造,Bonito 是一个开源大模型,能够将任意无标注文本自动转化为指令微调训练数据集,整个过程无需调用 GPT-4 等商业 API。

图1:Bonito 将无标注文本转换为指令微调数据集的工作流(来源:项目官方仓库)
2024 年 6 月,这项研究以论文《Learning to Generate Instruction Tuning Datasets for Zero-Shot Task Adaptation》正式发表于 ACL Findings 2024,引起 NLP 社区广泛关注。截至 2025 年中,该项目在 GitHub 已积累超过 800 颗星,成为合成数据生成领域最受关注的基础工具之一。
在 AI 领域,「数据为王」这句话一点都不夸张。大模型的强大能力,很大程度上依赖于海量高质量的训练数据。指令微调(Instruction Tuning)更是如此——想让模型学会「按指令行事」,就需要大量「指令-响应」配对数据。
但真实场景中,企业或研究者往往拥有大量领域特定的无标注文本(如医疗记录、法律文书、客服对话记录),却苦于没有配套的标注数据来微调模型。传统解法是调用 GPT-4 API 生成合成数据,但存在两个致命问题:
Bonito 的出现,就是为了打破这个困局——用一个开源模型,彻底替代 GPT-4 来做这件事。
Bonito 基于条件任务生成(Conditional Task Generation)范式,核心思路是:给定一段无标注文本,模型能自动推断出该文本适合构建什么类型的 NLP 任务(如问答、摘要、情感分类),并生成对应的「问题-答案」训练对。
Bonito 继承自 vllm.LLM(通过 vLLM 框架加载),支持高效的批量推理。目前官方提供两个预训练版本:
两个模型均可从 Hugging Face 直接下载,零训练成本开箱即用。
Bonito 使用特殊 token 来结构化输入提示:
<|tasktype|>
[任务类型,如 natural language inference]
<|context|>
[待处理的原始文本]
<|task|>
模型输出通过 <|pipe|> 分隔符解析,自动提取「问题」和「答案」两部分,构建标准化的指令微调数据格式。
Bonito 原生支持 16 种 NLP 任务类型,覆盖了从基础分类到复杂生成的完整光谱:
提取式问答(exqa)、多选问答(mcqa)、问题生成(qg)、开放问答(qa)、是非问答(ynqa)、共指消解(coref)、改写生成(paraphrase)、改写识别(paraphrase_id)、句子补全(sent_comp)、情感分类(sentiment)、摘要(summarization)、文本生成(text_gen)、主题分类(topic_class)、词义消歧(wsd)、文本蕴含(te)、自然语言推理(nli)。
用户既可以传入任务类型的全称,也可以用简短别名(如 nli 代替 natural language inference),API 设计非常友好。
项目代码极为精简,核心逻辑仅分布在三个 Python 文件中:
bonito/__init__.py:包导出入口。bonito/abstract.py(~100行):核心逻辑所在——AbstractBonito 类负责输入格式化(_prepare_bonito_input)和输出后处理(_postprocess_dataset)。前者将无标注文本包装成带特殊 token 的模型输入;后者解析模型输出,过滤无效样本并还原上下文。bonito/model.py(~70行):Bonito 类继承自 vLLM 的 LLM 和 AbstractBonito,通过 generate_tasks() 方法串联完整流水线:准备输入 → vLLM 批量推理 → 收集结果 → 后处理输出。这种继承设计非常清晰:将「数据格式转换」和「模型推理」解耦,便于后续扩展新的基座模型。
一行命令完成安装:
pip3 install bonito-llm
依赖项:transformers + datasets + vllm,自动安装,无需手动配置 CUDA 环境。
from bonito import Bonito
from vllm import SamplingParams
from datasets import load_dataset
# 初始化模型
bonito = Bonito("BatsResearch/bonito-v1")
# 加载无标注文本
unannotated_text = load_dataset(
"BatsResearch/bonito-experiment",
"unannotated_contract_nli"
)["train"].select(range(10))
# 配置采样参数并生成
sampling_params = SamplingParams(max_tokens=256, top_p=0.95, temperature=0.5, n=1)
synthetic_dataset = bonito.generate_tasks(
unannotated_text,
context_col="input",
task_type="nli", # 可用全称或简写
sampling_params=sampling_params
)
生成的数据可直接用于 LLaMA、Falcon 等开源模型的指令微调训练,实现「领域自适应」而不依赖任何商业 API。
如果没有 A100,官方还提供了 Google Colab 量化版教程,可在 Colab T4 实例(约 16GB VRAM)上运行 Llama-3.1-8B-bonito 量化版本,适合个人研究和小规模实验。
一个不回避问题的分析才值得信任。Bonito 存在以下明显局限:
生成质量依赖基座模型能力:Bonito 本质上是一个生成模型,生成数据的质量上限由基座模型(Llama 3.1 8B 或 DeBERTa)决定。对于高度专业化或需要世界知识的任务,生成结果可能出现事实性错误或逻辑不通。
无 GPU 无法运行:核心依赖 vLLM GPU 推理引擎,CPU 环境下不可用,且推荐配置需要 16GB+ VRAM,这对个人用户存在一定门槛。
缺乏内置质量评估:项目没有提供自动评估生成数据质量的工具,用户需要自行设计验证流程。
仅支持文本类任务:Bonito 当前不支持图像、音频等多模态数据的合成数据生成,应用范围限于 NLP 领域。
Bonito 的出现标志着 AI 训练数据生产方式的一次重要转变。传统上,研究者和企业需要依赖昂贵的商业 API 或漫长的人工标注来获取训练数据;Bonito 证明了一个经过任务适配训练的专用开源模型,完全可以替代 GPT-4 完成高质量合成数据生成,且成本降低到几乎为零。
这一思路与 2024-2025 年大模型社区追求的「数据效率」高度契合。随着更多领域定制版 Bonito 的出现,我们可以预见:医疗、法律、金融等专业领域的数据短缺问题将得到显著缓解,而不需要将这些敏感数据交给任何第三方 API。
Bonito 是一个轻量级但极具影响力的开源工具,核心价值在于:用开源模型替代商业 API,将任意无标注文本转化为可用于指令微调的高质量训练数据。它诞生于布朗大学的前沿研究,已在 ACL 2024 发表,被 GitHub 800+ 开发者认可为「合成数据生成」赛道的标杆项目。
尽管存在 GPU 依赖和生成质量边界等局限,但其「零成本数据生成」的理念,对 AI 研究者和应用开发者都具有极高的参考价值。