library_name: transformers
base_model: meta-llama/Llama-3.1-8B-Instruct
datasets:
- Skywork/Skywork-Reward-Preference-80K-v0.2
pipeline_tag: text-classification
Skywork奖励模型系列
重要提示:
本模型使用原始Skywork奖励偏好数据集的去污染版本(现称为v0.2)进行训练。更新后的数据集Skywork-Reward-Preference-80K-v0.2从magpie-ultra-v0.1子集中移除了4,957个污染样本对,这些样本与RewardBench评估提示存在显著n-gram重叠。被移除的样本对集合可在此链接查看。更多详细信息请参阅GitHub要点说明。
如果您的任务涉及在RewardBench上进行评估,我们强烈建议使用v0.2版本的数据集和模型而非v0.1版本,以确保彻底去污染并避免任何数据污染问题。
模型介绍
Skywork-Reward-Gemma-2-27B-v0.2和Skywork-Reward-Llama-3.1-8B-v0.2是基于gemma-2-27b-it和Llama-3.1-8B-Instruct架构构建的两款先进奖励模型。这两个模型均使用仅包含8万对高质量偏好样本的Skywork奖励数据集合训练而成,所有数据均来自公开来源。
我们仅采用公开数据,旨在证明通过相对小规模数据集和直接的数据筛选技术(无需额外的算法或架构修改)即可实现高性能奖励模型。Skywork奖励数据集合所使用的数据来源详见下方数据构成章节。
最终得到的奖励模型擅长处理复杂场景下的偏好判断,包括具有挑战性的偏好对,并覆盖数学、编程、安全等多个领域。
数据构成
我们精心构建的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分数高于被拒回答的样本。该方法在保持Chat、Char hard和Reasoning原始性能的同时显著提升了Safety表现。两个模型均使用27B模型对WildGuard样本进行评分。
RewardBench排行榜
我们使用官方测试脚本在RewardBench上评估模型。截至2024年10月,Skywork-Reward-Llama-3.1-8B-v0.2在RewardBench排行榜8B模型中位列第一。
排名 |
模型 |
模型类型 |
总分 |
对话 |
困难对话 |
安全性 |
推理能力 |
1 |
Skywork/Skywork-Reward-Gemma-2-27B-v0.2 |
序列分类器 |
94.3 |
96.1 |
89.9 |
93.0 |
98.1 |
2 |
nvidia/Llama-3.1-Nemotron-70B-Reward |
自定义分类器 |
94.1 |
97.5 |
85.7 |
95.1 |
98.1 |
3 |
Skywork/Skywork-Reward-Gemma-2-27B |
序列分类器 |
93.8 |
95.8 |
91.4 |
91.9 |
96.1 |
4 |
SF-Foundation/TextEval-Llama3.1-70B |
生成式 |
93.5 |
94.1 |
90.1 |
93.2 |
96.4 |
5 |
meta-metrics/MetaMetrics-RM-v1.0 |
自定义分类器 |
93.4 |
98.3 |
86.4 |
90.8 |
98.2 |
6 |
Skywork/Skywork-Critic-Llama-3.1-70B |
生成式 |
93.3 |
96.6 |
87.9 |
93.1 |
95.5 |
7 |
Skywork/Skywork-Reward-Llama-3.1-8B-v0.2 |
序列分类器 |
93.1 |
94.7 |
88.4 |
92.7 |
96.7 |
8 |
nicolinho/QRM-Llama3.1-8B |
序列分类器 |
93.1 |
94.4 |
89.7 |
92.3 |
95.8 |
9 |
LxzGordon/URM-LLaMa-3.1-8B |
序列分类器 |
92.9 |
95.5 |
88.2 |
91.1 |
97.0 |
10 |
Salesforce/SFR-LLaMa-3.1-70B-Judge-r |
生成式 |
92.7 |
96.9 |
84.8 |
91.6 |
97.6 |
11 |
Skywork/Skywork-Reward-Llama-3.1-8B |
序列分类器 |
92.5 |
95.8 |
87.3 |
90.8 |
96.2 |
12 |
general-preference/GPM-Llama-3.1-8B |
自定义分类器 |
92.2 |
93.3 |
88.6 |
91.1 |
96.0 |
演示代码
以下是Skywork奖励模型系列的使用示例。请注意:
- 为使27B奖励模型达到最佳性能,请确保启用
flash_attention_2
或eager
实现。默认的spda
实现可能导致性能显著下降。
以下示例展示如何获取两段对话的奖励分数:
import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer
device = "cuda:0"
model_name = "Skywork/Skywork-Reward-Llama-3.1-8B-v0.2"
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 = "简有12个苹果。她给朋友马克4个苹果,然后又买了1个苹果,最后将所有苹果平均分给自己和2个兄弟姐妹。每人得到几个苹果?"
response1 = "1. 简最初有12个苹果,给马克4个后:12 - 4 = 8。简现在有8个苹果。\n2. 简又买了1个苹果:8 + 1 = 9。简现在有9个苹果。\n3. 简将9个苹果平均分给自己和2个兄弟姐妹(共3人):9 ÷ 3 = 3。每人得到3个苹果。"
response2 = "1. 简最初有12个苹果,给马克4个后:12 - 4 = 8。简现在有8个苹果。\n2. 简又买了1个苹果:8 + 1 = 9。简现在有9个苹果。\n3. 简将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_tokenized = rm_tokenizer.apply_chat_template(conv1, tokenize=True, return_tensors="pt").to(device)
conv2_tokenized = rm_tokenizer.apply_chat_template(conv2, tokenize=True, 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: Bag of Tricks for Reward Modeling in LLMs},
author={Liu, Chris Yuhao and Zeng, Liang and Liu, Jiacai and Yan, Rui and He, Jujie and Wang, Chaojie and Yan, Shuicheng and Liu, Yang and Zhou, Yahui},
journal={arXiv preprint arXiv:2410.18451},
year={2024}
}