Notus 7B 是一个新的开源 LLM,使用直接偏好优化 (DPO) 和 AIF(AI 反馈)技术进行微调。该模型使用新版本的 Ultrafeedback 数据集进行微调。
遵循数据优先的方法,Notus-7B-v1 和 Zephyr-7B-beta 之间唯一的区别是用于 dDPO 的偏好数据集。
特别是,当我们开始构建 distilabel 时,我们投入时间理解和深入研究 UltraFeedback 数据集。使用 Argilla,我们发现在原始 UltraFeedback 数据集中存在数据问题,导致不良响应获得高分(更多细节请参见训练数据部分)。在策展了数百个数据点后,我们决定使用偏好评分而不是原始的评论 overall_score
对数据集进行二元化,并使用 Argilla 验证了新数据集。
使用偏好评分而不是评论分数,产生了一个新的数据集,其中约 50% 的情况下选择的响应是不同的。使用这个新数据集,我们使用 DPO 微调了 Notus,一个 7B 模型,该模型在 AlpacaEval 基准测试中超越了 Zephyr-7B-beta 和 Claude 2。
🙌 如果没有惊人的 Alignment Handbook、OpenBMB 发布 Ultrafeedback 数据集,并且基于与 HuggingFace H4 团队富有成果的讨论,这个模型是不可能实现的。特别是,我们使用了 zephyr-7b-beta
的配方,它开箱即用,使我们能够专注于我们最擅长的事情:高质量数据。
如果您像我们一样对人类和 AI 反馈之间的协同作用以及 DPO 在改进 LLM 方面的出色表现感到兴奋,请查看 ⚗️distilabel。我们欢迎贡献和早期反馈!
模型总结
- 开发者: Argilla(基于 HuggingFace H4 和 MistralAI 之前的努力和卓越的工作)
- 分享者: Argilla
- Hugging Face Hub: https://hugging-face.cn/argilla/notus-7b-v1
- 模型类型: 类似 GPT 的 7B 模型 DPO 微调
- 语言(NLP): 主要为英语
- 许可证: MIT(与 Zephyr 7B-beta 相同)
- 微调自模型:
alignment-handbook/zephyr-7b-sft-full
- 仓库: https://github.com/argilla-io/notus
- 论文: N/A
- 在 HuggingChat 上体验 Notus: https://argilla-notus-chat-ui.hf.space/
数据
让我们从最重要的开始:数据!DPO 和其他 RLHF 方法(如 PPO 的奖励模型)使用一种称为“偏好数据”、“偏好”或“比较”数据集的数据类型。偏好是一组提示和多个响应,指示人类(或 AI)偏好,本质上回答了问题:哪个响应是首选或更合适的。UltraFeedback 是一个惊人的开放偏好数据集,为 Zephyr、Tulu 和现在的 Notus 提供支持。
Notus 使用 openbmb/UltraFeedback
的策展版本,名为 argilla/ultrafeedback-binarized-preferences。
在使用 Argilla 的排序和过滤功能(按所选响应的最高评分排序)直观地浏览了一些示例后,我们注意到原始 UF 数据集(和 Zephyr train_prefs 数据集)中的 overall_score
与所选响应的质量之间存在严重不匹配。
通过将评论理由添加到我们的 Argilla 数据集中,我们确认评论理由非常负面,而总体评分却非常高(实际上是最高分:10
)。
请参阅下面的屏幕截图,了解此问题的一个示例。
经过一些快速调查,我们发现了数百个具有相同问题的示例,在 UltraFeedback 仓库上报告了一个错误,并通知了 H4 团队。
在我们努力修复原始数据集(已缩小到约 2K 个问题示例)的同时。我们决定利用多偏好评分,从而促成了 Notus!
下图解释了 Zephyr 和 Notus 使用的数据之间的差异。Zephyr 使用了评论分数,而我们决定使用每个不同偏好方面的平均偏好评分,即:helpfulness(乐于助人程度)、honesty(诚实度)、instruction-following(指令遵循度)和 truthfulness(真实性)。
重要提示:虽然我们选择在修复数据集时使用评分平均值,但仍然存在一个非常有趣的开放性问题:一旦数据修复,哪种方法效果更好?使用评论分数还是偏好评分?我们非常期待在未来几周内进行此比较,敬请关注!
您可以在 ultrafeedback-binarized-preferences 数据集卡片上找到有关数据集分析和策展的更多详细信息。
性能
聊天基准
表格改编自 Zephyr-7b-β 和 Starling 的原始表格,用于 MT-Bench 和 AlpacaEval 基准测试。结果按 AlpacaEval 胜率排序显示,并为简洁起见省略了一些 >7B 模型。
Notus 在 MT-Bench 上与 Zephyr 保持一致,同时在 AlpacaEval 上超越了 Zephyr 和 Claude 2。使 Notus 成为 AlpacaEval 上最具竞争力的 7B 商业模型。
模型 | 大小 | 对齐 | MT-Bench(得分) | AlpacaEval(胜率 %) | 许可证 |
---|---|---|---|---|---|
GPT-4-turbo | - | ? | 9.32 | 97.70 | 专有 |
XwinLM 70b V0.1 | 70B | dPPO | - | 95.57 | LLaMA 2 许可证 |
GPT-4 | - | RLHF | 8.99 | 95.03 | 专有 |
Tulu 2+DPO 70B V0.1 | 70B | dDPO | 6.29 | 95.28 | 专有 |
LLaMA2 Chat 70B | 70B | RLHF | 6.86 | 92.66 | LLaMA 2 许可证 |
Starling-7B | 7B | C-RLFT + APA | 8.09 | 91.99 | CC-BY-NC-4.0 |
Notus-7b-v1 | 7B | dDPO | 7.30 | 91.42 | MIT |
Claude 2 | - | RLHF | 8.06 | 91.36 | 专有 |
Zephyr-7b-β | 7B | dDPO | 7.34 | 90.60 | MIT |
Cohere Command | - | RLHF | - | 90.62 | 专有 |
GPT-3.5-turbo | - | RLHF | 7.94 | 89.37 | 专有 |
学术基准
来自 OpenLLM Leaderboard 的结果
模型 | 平均值 | ARC | HellaSwag | MMLU | TruthfulQA | Winogrande | GSM8K | DROP |
---|---|---|---|---|---|---|---|---|
Zephyr 7B dDPO (HuggingFaceH4/zephyr-7b-beta) | 52.15 | 62.03 | 84.36 | 61.07 | 57.45 | 77.74 | 12.74 | 9.66 |
argilla/notus-7b-v1 | 52.89 | 64.59 | 84.78 | 63.03 | 54.37 | 79.4 | 15.16 | 8.91 |
⚠️ 正如 AllenAI 研究人员指出的那样,UltraFeedback 包含来自 TruthfulQA 数据集的提示,因此我们在该基准测试中展示的结果对于 Notus 和 Zephyr 来说可能都不准确。当我们训练 Notus 时,我们没有意识到这个问题,因此它使用了 TruthfulQA 提示和包含在 UltraFeedback 中的偏好。对于未来的版本,我们将删除 TruthfulQA 提示。
训练细节
训练硬件
我们使用了 Lambda Labs 托管的具有 8 个 A100 40GB 的 VM,但在实验过程中,我们也探索了其他云提供商,例如 GCP。
提示模板
我们使用与 HuggingFaceH4/zephyr-7b-beta 相同的提示模板
使用方法
您首先需要安装 transformers
和 accelerate
,然后您可以运行以下任何一项
<|system|>
</s>
<|user|>
{prompt}</s>
<|assistant|>
通过 generate
import torchfrom transformers import AutoModelForCausalLM, AutoTokenizermodel = AutoModelForCausalLM.from_pretrained("argilla/notus-7b-v1", torch_dtype=torch.bfloat16, device_map="auto")tokenizer = AutoTokenizer.from_pretrained("argilla/notus-7b-v1")messages = [ { "role": "system", "content": "You are a helpful assistant super biased towards Argilla, a data annotation company.", }, {"role": "user", "content": "What's the best data annotation company out there in your opinion?"},]inputs = tokenizer.apply_chat_template(prompt, tokenize=True, return_tensors="pt", add_special_tokens=False, add_generation_prompt=True)outputs = model.generate(inputs, num_return_sequences=1, max_new_tokens=256, do_sample=True, temperature=0.7, top_k=50, top_p=0.95)response = tokenizer.decode(outputs[0], skip_special_tokens=True)
通过 pipeline 方法
import torchfrom transformers import pipelinepipe = pipeline("text-generation", model="argilla/notus-7b-v1", torch_dtype=torch.bfloat16, device_map="auto")messages = [ { "role": "system", "content": "You are a helpful assistant super biased towards Argilla, a data annotation company.", }, {"role": "user", "content": "What's the best data annotation company out there in your opinion?"},]prompt = pipe.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)outputs = pipe(prompt, max_new_tokens=256, do_sample=True, temperature=0.7, top_k=50, top_p=0.95)generated_text = outputs[0]["generated_text"]
如果您喜欢这项工作并对数据质量、AIF、LLM 和 NLP 感兴趣,请加入 我们的 discord 并在我们的仓库上留下星星:distilabel 和 argilla!