跳转到主要内容

评估奖励模型工具

项目描述

RewardBench: 评估奖励模型

排行榜 📐 | RewardBench数据集 | 现有测试集 | 结果 📊 | 论文📝

Github RewardBench Logo

GitHub License PyPI


RewardBench 是一个用于评估奖励模型(包括使用直接偏好优化(DPO)训练的模型)的能力和安全的基准。仓库包括以下内容

  • 多种奖励模型的通用推理代码(Starling、PairRM、OpenAssistant、DPO等)。
  • 公平奖励模型推理的通用数据集格式和测试。
  • 分析和可视化工具。

生成结果的主要两个脚本(更多在 scripts/

  1. scripts/run_rm.py: 运行奖励模型的评估。
  2. scripts/run_dpo.py: 运行直接偏好优化(DPO)模型(以及使用隐式奖励的其他模型,如KTO)的评估。

快速使用

RewardBench 允许您快速评估任何偏好集中的任何奖励模型。它还会检测是否传递了指令数据集(通过检查是否存在 chosen/rejected,并存在 messages)-- 对于这些,只需记录模型输出(而非准确率)。

为了快速使用,请使用pip安装

pip install rewardbench

然后,运行以下命令

rewardbench --model={yourmodel} --dataset={yourdataset} --batch_size=8

对于DPO模型,传递 --ref_model={},脚本将自动路由到那里。自动使用Tokenizers聊天模板,但也可以使用fastchat conv模板。

要运行核心Reward Bench评估集,请运行

rewardbench --model={yourmodel}

示例

  1. 正常操作
rewardbench --model=OpenAssistant/reward-model-deberta-v3-large-v2 --dataset=allenai/ultrafeedback_binarized_cleaned --split=test_gen --chat_template=raw
  1. 来自本地数据集的DPO模型(注意 --load_json
rewardbench --model=Qwen/Qwen1.5-0.5B-Chat --ref_model=Qwen/Qwen1.5-0.5B --dataset=/net/nfs.cirrascale/allennlp/jacobm/herm/data/berkeley-nectar-binarized-preferences-random-rejected.jsonl --load_json

实验性:可以从pip安装的生成RM运行

pip install rewardbench[generative]

然后

rewardbench-gen --model={}

更多信息,请参阅 scripts/run_generative.py。对于本地模型,额外的要求是VLLM,而对于API模型(支持OpenAI、Anthropic和Together),需要API。

日志记录

CLI提供了多个高级保存功能,用于保存模型输出准确率分数。这些可以与元数据相关联,以奖励您拥有的模型或作为独立的数据集上传到HuggingFace,例如用于拒绝采样。例如,以下命令同时执行以下操作

rewardbench --model vwxyzjn/reward_modeling__EleutherAI_pythia-14m --batch_size 128 --tokenizer=EleutherAI/pythia-14m --push_results_to_hub --upload_model_metadata_to_hf --chat_template raw

或者,对于指令数据集

rewardbench --model vwxyzjn/reward_modeling__EleutherAI_pythia-14m --dataset HuggingFaceH4/no_robots --split test --batch_size 128 --tokenizer=EleutherAI/pythia-14m --push_results_to_hub --chat_template raw

(注意,只有旧模型需要指定聊天模板)

关键命令包括

  • --push_results_to_hub,用于上传评分和正确性的数据集。
  • --upload_model_metadata_to_hf直接将结果添加到模型。

有关具有准确率元数据的模型示例,请参阅此处。有关偏好数据集输出的示例,请参阅此处,有关说明,请参阅此处

目前这仅适用于偏好数据集的DPO模型,例如

rewardbench --model Qwen/Qwen1.5-0.5B-Chat --ref_model Qwen/Qwen1.5-0.5B  --batch_size 128 --tokenizer=EleutherAI/pythia-14m --push_results_to_hub --upload_model_metadata_to_hf --chat_template raw

如果您想要完整的功能,请打开一个问题。

完整安装

要从源安装,请在您的系统上安装torch,然后安装以下要求。

pip install -e .

将以下内容添加到您的.bashrc

export HF_TOKEN="{your_token}"

训练

对于训练,我们建议使用open-instruct

贡献您的模型

目前,为了将您的模型贡献到排行榜,请在HuggingFace上打开一个带有模型名称的问题(您仍然可以使用RewardBench评估本地模型,见下文)。如果需要自定义代码,请打开一个PR,使其在我们的推理堆栈中启用(有关更多信息,请参阅rewardbench/models)。

评估模型

有关参考配置,请参阅scripts/configs/eval_configs.yaml。有关聊天模板的参考,许多模型遵循基础/sft模型的术语此处。一个用于调试的小型模型位于natolambert/gpt2-dummy-rm

核心脚本会自动评估我们的核心评估集。要在现有偏好集上运行这些,请添加参数--pref_sets

运行奖励模型

要使用scripts/run_rm.py运行单个模型,请使用以下任何示例

python scripts/run_rm.py --model=openbmb/UltraRM-13b --chat_template=openbmb --batch_size=8
python scripts/run_rm.py --model=OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5 --chat_template=oasst_pythia
python scripts/run_rm.py --model=PKU-Alignment/beaver-7b-v1.0-cost --chat_template=pku-align --batch_size=16
python scripts/run_rm.py --model=IDEA-CCNL/Ziya-LLaMA-7B-Reward --batch_size=32 --trust_remote_code --chat_template=Ziya

要使用AI2基础设施运行这些模型,请运行

python scripts/submit_eval_jobs.py

例如,在非默认图像上运行N sweep的最佳结果

python scripts/submit_eval_jobs.py --eval_on_bon --image=nathanl/herm_bon

注意:对于AI2用户,您必须设置beaker secret write HF_TOKEN <your_write_token_here>以使脚本工作。

使用默认抽象AutoModelForSequenceClassification.from_pretrained的模型也可以在本地加载。扩展此功能是TODO。例如。

python scripts/run_rm.py --model=/net/nfs.cirrascale/allennlp/hamishi/EasyLM/rm_13b_3ep --chat_template=tulu --batch_size=8

运行DPO模型

对于DPO

python scripts/run_dpo.py --model=stabilityai/stablelm-zephyr-3b --ref_model=stabilityai/stablelm-3b-4e1t --batch_size=8
python scripts/run_dpo.py --model=stabilityai/stablelm-2-zephyr-1_6b --ref_model=stabilityai/stablelm-2-1_6b --batch_size=16

集成RM

对于已经存在于RewardBench中的奖励模型,您可以通过运行以下命令进行离线集成测试,以近似使用多个奖励模型

python analysis/run_ensemble_offline.py --models sfairXC/FsfairX-LLaMA3-RM-v0.1 openbmb/Eurus-RM-7b Nexusflow/Starling-RM-34B

运行生成型RM(LLM作为裁判)

支持本地和API模型。例如,运行OpenAI的模型

python scripts/run_generative.py --model=gpt-3.5-turbo-0125

本地模型从HuggingFace加载,尽管其中一些也通过Together的API提供。使用以下命令在本地运行Llama 3

python scripts/run_generative.py --model=meta-llama/Llama-3-70b-chat-hf --force_local

或者,使用Together的API

python scripts/run_generative.py --model=meta-llama/Llama-3-70b-chat-hf

我们正在添加对生成型集成(目前仅通过API)的支持,使用以下命令运行

python scripts/run_generative.py --model gpt-3.5-turbo-0125 claude-3-sonnet-20240229 meta-llama/Llama-3-70b-chat-hf

注意:这些必须是奇数个模型>1。

创建最佳N(BoN)排名

要跨数据集创建排名,请运行(best_of 8是占位符,16应该可以,因为评估逻辑将处理更低的BoN编号)

python scripts/run_bon.py --model=OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5 --chat_template=oasst_pythia --best_of=8 --debug

获取排行榜部分分数

重要:我们为聊天、聊天困难、安全性和推理(此处将数学与代码等量对待)部分使用提示加权分数,以避免过分重视小部分(例如MT Bench的)得分。以下代码用于计算每个类别的分数,假设已安装RewardBench

from rewardbench.constants import EXAMPLE_COUNTS, SUBSET_MAPPING
from rewardbench.utils import calculate_scores_per_section

metrics = {
  "alpacaeval-easy": 0.5,
  "alpacaeval-hard": 0.7052631578947368,
  "alpacaeval-length": 0.5894736842105263,
  "chat_template": "tokenizer",
  "donotanswer": 0.8235294117647058,
  "hep-cpp": 0.6280487804878049,
  "hep-go": 0.6341463414634146,
  "hep-java": 0.7073170731707317,
  "hep-js": 0.6646341463414634,
  "hep-python": 0.5487804878048781,
  "hep-rust": 0.6463414634146342,
  "llmbar-adver-GPTInst": 0.391304347826087,
  "llmbar-adver-GPTOut": 0.46808510638297873,
  "llmbar-adver-manual": 0.3695652173913043,
  "llmbar-adver-neighbor": 0.43283582089552236,
  "llmbar-natural": 0.52,
  "math-prm": 0.2953020134228188,
  "model": "PKU-Alignment/beaver-7b-v1.0-cost",
  "model_type": "Seq. Classifier",
  "mt-bench-easy": 0.5714285714285714,
  "mt-bench-hard": 0.5405405405405406,
  "mt-bench-med": 0.725,
  "refusals-dangerous": 0.97,
  "refusals-offensive": 1,
  "xstest-should-refuse": 1,
  "xstest-should-respond": 0.284
}

# Calculate and print the scores per section
scores_per_section = calculate_scores_per_section(EXAMPLE_COUNTS, SUBSET_MAPPING, metrics)
print(scores_per_section)

仓库结构

├── README.md                   <- The top-level README for researchers using this project
├── analysis/                   <- Directory of tools to analyze RewardBench results or other reward model properties
├── rewardbench/                <- Core utils and modeling files
|   ├── models/                     ├── Standalone files for running existing reward models
|   └── *.py                        └── RewardBench tools and utilities
├── scripts/                    <- Scripts and configs to evaluate reward models
├── tests                       <- Unit tests
├── Dockerfile                  <- Build file for reproducible and scaleable research at AI2
├── LICENSE
├── Makefile                    <- Makefile with commands like `make style`
└── setup.py                    <- Makes project pip installable (pip install -e .) so `alignment` can be imported

维护

本节专为AI2使用设计,但可能有助于其他使用Docker评估模型的人。

更新docker镜像

当更新此仓库时,应重新构建docker镜像以包含这些更改。对于AI2成员,请更新以下列表,包括您经常使用的任何镜像。例如,如果您更新了scripts/run_rm.py并包含了一个新包(或更改了包版本),则应重新构建镜像并验证它是否在已知模型上仍能正常工作。

要更新镜像,请在本仓库的根目录中运行以下命令

  1. docker build -t <local_image_name> . --platform linux/amd64
  2. beaker image create <local_image_name> -n <beaker_image_name>

注意:不要在beaker镜像名称中使用字符-。

当更新Dockerfile时,请确保查看顶部说明以更新基本cuda版本。

我们最近切换到自动beaker镜像构建工作流程。您可以使用此镜像或使用上一个Dockerfile的最后一个镜像。

  • nathanl/rewardbench_auto:自动镜像在此
  • nathanl/rb_v23,2024年7月:从命令行支持bfloat16模型。

引用

请使用以下方式引用我们的工作

@misc{lambert2024rewardbench,
      title={RewardBench: Evaluating Reward Models for Language Modeling}, 
      author={Nathan Lambert and Valentina Pyatkin and Jacob Morrison and LJ Miranda and Bill Yuchen Lin and Khyathi Chandu and Nouha Dziri and Sachin Kumar and Tom Zick and Yejin Choi and Noah A. Smith and Hannaneh Hajishirzi},
      year={2024},
      eprint={2403.13787},
      archivePrefix={arXiv},
      primaryClass={cs.LG}
}

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

rewardbench-0.1.3.tar.gz (96.1 kB 查看哈希值)

上传时间

构建分发

rewardbench-0.1.3-py3-none-any.whl (139.7 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面