Instructions to use Timur-th/llm-course-hw2-reward-model with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Timur-th/llm-course-hw2-reward-model with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-classification", model="Timur-th/llm-course-hw2-reward-model")# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForSequenceClassification tokenizer = AutoTokenizer.from_pretrained("Timur-th/llm-course-hw2-reward-model") model = AutoModelForSequenceClassification.from_pretrained("Timur-th/llm-course-hw2-reward-model", device_map="auto") - Notebooks
- Google Colab
- Kaggle
llm-course-hw2-reward-model
Reward model на базе SmolLM-135M-Instruct с линейной головой (AutoModelForSequenceClassification, num_labels=1), обученная RewardTrainer из TRL на парах из HumanLLMs/Human-Like-DPO-Dataset (Bradley–Terry loss). Использовалась как reward и value model для PPO.
Задание
Домашнее задание 2 курса по LLM: алайнмент SmolLM-135M-Instruct на датасете преференсов HumanLLMs/Human-Like-DPO-Dataset: chosen-ответы в нём эмоциональные и «человечные», rejected — сухие ответы в духе «As an AI language model…».
- DPO реализован с нуля: подготовка данных через chat template, лосс, лог-вероятности ответов, цикл обучения.
- Reward model (
AutoModelForSequenceClassificationс линейной головой) обученаRewardTrainerиз TRL. - PPO обучен
PPOTrainerиз TRL (trl==1.11.0, модульtrl.experimental.ppo) с этой reward model.
Данные разбиты 90/10 (train_test_split(test_size=0.1, seed=42)): 9795 пар для обучения и 1089 отложенных пар для оценки; разбиение общее для всех трёх моделей.
Обучение
| параметр | значение |
|---|---|
| trainable parameters | только линейная голова score (бэкбон заморожен) |
| learning rate | 0.0003 |
| epochs | 1 |
| batch size | 16 |
| max length | 1024 |
| loss | -log σ(r(x, y_w) − r(x, y_l)) |
| precision | bf16 autocast |
Качество на отложенной части
| метрика | значение |
|---|---|
| accuracy (RewardTrainer.evaluate) | 0.9991 |
| accuracy (1089 пар, награда на < | im_end |
| средняя награда chosen | 0.830 |
| средняя награда rejected | -4.939 |
Сравнение моделей на отложенных промптах
128 отложенных промптов, сэмплирование с temperature 0.7, до 128 новых токенов. rm_score — средняя награда reward model из этой коллекции, emoji_rate — доля ответов с эмодзи, ai_phrase_rate — доля ответов с шаблонами вроде «as an AI», mean_tokens — средняя длина, eos_rate — доля ответов, закончившихся EOS.
| model | rm_score | emoji_rate | emoji_per_response | ai_phrase_rate | mean_tokens | eos_rate |
|---|---|---|---|---|---|---|
| SFT (ref) | -3.071 | 0.000 | 0.000 | 0.352 | 125.867 | 0.031 |
| DPO · beta_0.1 | -1.844 | 0.320 | 1.320 | 0.008 | 117.375 | 0.156 |
| PPO · base | -2.822 | 0.000 | 0.000 | 0.320 | 128.000 | 0.000 |
Использование
Награда — логит на последнем не-pad токене, то есть на <|im_end|> реплики ассистента. Чат-шаблон токенизатора в этом репозитории не добавляет перевод строки после последней реплики, а pad — отдельный токен <|endoftext|>; именно в этой позиции награду читает PPOTrainer.
import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer
repo = "Timur-th/llm-course-hw2-reward-model"
tokenizer = AutoTokenizer.from_pretrained(repo)
model = AutoModelForSequenceClassification.from_pretrained(repo)
def reward(prompt, response):
messages = [{"role": "user", "content": prompt}, {"role": "assistant", "content": response}]
text = tokenizer.apply_chat_template(messages, tokenize=False)
inputs = tokenizer(text, return_tensors="pt", add_special_tokens=False)
with torch.no_grad():
return model(**inputs).logits[0, 0].item()
print(reward("Do you have a favorite movie?", "Oh, I love Spirited Away! 🎬 What about you?"))
print(reward("Do you have a favorite movie?", "As an AI language model, I do not have personal preferences."))
Связанные репозитории
- Коллекция: https://huggingface.co/collections/Timur-th/llm-course-hw2-dpo-reward-model-ppo-6ae8dcfceca5228ecef02954
- DPO: https://huggingface.co/Timur-th/llm-course-hw2-dpo
- Reward model: https://huggingface.co/Timur-th/llm-course-hw2-reward-model
- PPO: https://huggingface.co/Timur-th/llm-course-hw2-ppo
- Downloads last month
- 47
Model tree for Timur-th/llm-course-hw2-reward-model
Base model
HuggingFaceTB/SmolLM-135M