library_name: transformers
base_model: google/gemma-2-27b-it
datasets:
- Skywork/Skywork-Reward-Preference-80K-v0.1
pipeline_tag: text-classification
Skywork奖励模型系列
简介
Skywork-Reward-Gemma-2-27B 和 Skywork-Reward-Llama-3.1-8B 是基于 gemma-2-27b-it 和 Meta-Llama-3.1-8B-Instruct 架构构建的两款先进奖励模型。这两款模型均使用仅包含8万对高质量偏好数据的 Skywork奖励数据集合 进行训练,所有数据均来自公开渠道。
我们仅使用公开数据,旨在证明通过相对较小的数据集和直接的数据筛选技术,无需额外的算法或架构修改,即可实现高性能的奖励模型。Skywork奖励数据集合 所使用的数据来源详见下方的 数据构成 部分。
最终的奖励模型擅长处理复杂场景下的偏好问题,包括具有挑战性的偏好对,涵盖数学、编程和安全等多个领域。截至2024年9月,这两款模型在 RewardBench排行榜 上分别位列第一和第三。
数据构成
我们没有依赖现有的大型偏好数据集,而是精心筛选了 Skywork奖励数据集合,(1) 包含高质量的偏好对,(2) 针对特定的能力和知识领域。筛选后的训练数据集包含约8万个样本,来自多个公开可用的数据源,包括:
- HelpSteer2
- OffsetBias
- WildGuard (对抗性)
- Magpie DPO系列:Ultra、Pro (Llama-3.1)、Pro、Air。
免责声明:除对上述原始数据集进行子采样以创建Skywork奖励数据集合外,我们未对原始数据集进行任何修改。
在数据集筛选过程中,我们采用了多种技巧,以在不影响整体性能的前提下实现性能提升和各领域之间的平衡:
- 我们根据数据集提供的平均ArmoRM分数,独立地从合并的Magpie数据集中筛选出数学、编程和其他类别的优质样本。我们将Magpie-Air子集和Magpie-Pro子集的ArmoRM平均分数分别减去0.1和0.05,以优先选择Magpie-Ultra和Magpie-Pro-Llama-3.1样本。
- 我们没有包含WildGuard中的所有偏好对,而是首先在其他三个数据源上训练一个奖励模型(RM)。然后,(1) 使用该RM对WildGuard中所有样本的选择和拒绝响应进行评分,(2) 仅选择选择响应的RM分数大于拒绝响应的RM分数的样本。我们发现,这种方法在很大程度上保留了Chat、Char hard和Reasoning的原始性能,同时提高了安全性。对于这两款模型,我们使用27B模型对WildGuard样本进行评分。
RewardBench排行榜
我们使用 官方测试脚本 在 RewardBench 上评估了我们的模型。截至2024年9月,Skywork-Reward-Gemma-2-27B和Skywork-Reward-Llama-3.1-8B在RewardBench排行榜上分别位列第一和第三。
排名 |
模型 |
聊天 |
困难聊天 |
安全性 |
推理能力 |
总分 |
1 |
Skywork-Reward-Gemma-2-27B |
95.8 |
91.4 |
92.0 |
96.1 |
93.8 |
2 |
SFR-LLaMa-3.1-70B-Judge-r |
96.9 |
84.8 |
92.2 |
97.6 |
92.8 |
3 |
Skywork-Reward-Llama-3.1-8B |
95.8 |
87.3 |
90.6 |
96.2 |
92.5 |
4 |
Nemotron-4-340B-Reward |
95.8 |
87.1 |
92.2 |
93.6 |
92.2 |
5 |
ArmoRM-Llama3-8B-v0.1 |
96.9 |
76.8 |
92.2 |
97.3 |
90.8 |
6 |
SFR-nemo-12B-Judge-r |
97.2 |
82.2 |
87.5 |
95.1 |
90.5 |
7 |
internlm2-20b-reward |
98.9 |
76.5 |
89.9 |
95.8 |
90.3 |
演示代码
我们提供了Skywork奖励模型系列的示例用法。请注意:
- 我们从两款模型的聊天模板中移除了BOS标记,以防止在
apply_chat_template
和标记化过程中被重复添加。因此,请不要依赖 apply_chat_template
来添加BOS标记。
- 为确保27B奖励模型的最佳性能,请确保启用了
flash_attention_2
或 eager
实现。默认的 spda
实现可能会导致错误,从而显著降低该特定模型的性能。
以下是获取两个对话奖励分数的示例代码。
import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer
device = "cuda:0"
model_name = "Skywork/Skywork-Reward-Gemma-2-27B"
rm = AutoModelForSequenceClassification.from_pretrained(
model_name,
torch_dtype=torch.bfloat16,
device_map=device,
attn_implementation="flash_attention_2",
num_labels=1,
)
rm_tokenizer = AutoTokenizer.from_pretrained(model_name)
prompt = "Jane有12个苹果。她给朋友Mark4个苹果,然后又买了1个苹果,最后将所有的苹果平均分给自己和她的2个兄弟姐妹。每个人得到多少个苹果?"
response1 = "1. Jane一开始有12个苹果,给Mark4个。12 - 4 = 8。Jane现在有8个苹果。\n2. Jane又买了1个苹果。8 + 1 = 9。Jane现在有9个苹果。\n3. Jane将9个苹果平均分给自己和她的2个兄弟姐妹(共3人)。9 ÷ 3 = 3个苹果。每个人得到3个苹果。"
response2 = "1. Jane一开始有12个苹果,给Mark4个。12 - 4 = 8。Jane现在有8个苹果。\n2. Jane又买了1个苹果。8 + 1 = 9。Jane现在有9个苹果。\n3. Jane将9个苹果平均分给她的2个兄弟姐妹(共2人)。9 ÷ 2 = 4.5个苹果。每个人得到4个苹果。"
conv1 = [{"role": "user", "content": prompt}, {"role": "assistant", "content": response1}]
conv2 = [{"role": "user", "content": prompt}, {"role": "assistant", "content": response2}]
conv1_formatted = rm_tokenizer.apply_chat_template(conv1, tokenize=False)
conv2_formatted = rm_tokenizer.apply_chat_template(conv2, tokenize=False)
conv1_tokenized = rm_tokenizer(conv1_formatted, return_tensors="pt").to(device)
conv2_tokenized = rm_tokenizer(conv2_formatted, return_tensors="pt").to(device)
with torch.no_grad():
score1 = rm(**conv1_tokenized).logits[0][0].item()
score2 = rm(**conv2_tokenized).logits[0][0].item()
print(f"响应1的分数: {score1}")
print(f"响应2的分数: {score2}")
声明与许可协议
声明
我们特此声明,Skywork模型不得用于任何危害国家安全或社会安全或从事非法活动的行为。此外,我们要求用户在未经适当安全审查和记录的情况下,不得将Skywork模型部署用于互联网服务。我们希望所有用户都能遵守这一原则,确保技术进步在规范和合法的环境中进行。
我们已尽最大努力确保模型训练过程中所使用的数据的合规性。然而,尽管我们付出了巨大努力,由于模型和数据的复杂性,仍可能存在不可预测的风险和问题。因此,如果因使用Skywork开源模型而产生任何问题,包括但不限于数据安全问题、舆论风险,或因模型被误导、滥用、传播或不当使用而产生的任何风险及问题,我们将不承担任何责任。
许可协议
Skywork模型的社区使用需遵守 Skywork社区许可协议。Skywork模型支持商业用途。如果您计划将Skywork模型或其衍生品用于商业用途,必须遵守 Skywork社区许可协议 中的条款和条件。
技术报告
Skywork-Reward: 大语言模型奖励建模的技巧集锦
联系方式
如有任何问题,请随时通过 yuhao.liuu@kunlun-inc.com 或 liang.zeng@kunlun-inc.com 联系我们。
引用
如果您认为我们的工作对您有所帮助,请使用以下BibTeX条目引用我们:
@article{liu2024skywork,
title={Skywork-Reward: 大语言模型奖励建模的技巧集锦},
author={刘, Chris Yuhao and 曾, Liang and 刘, Jiacai and 严, Rui and 何, Jujie and 王, Chaojie and 严, Shuicheng and 刘, Yang and 周, Yahui},
journal={arXiv预印本 arXiv:2410.18451},
year={2024}
}