Instructions to use maf1oz1/llm-course-hw2-reward-model with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use maf1oz1/llm-course-hw2-reward-model with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-classification", model="maf1oz1/llm-course-hw2-reward-model")# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForSequenceClassification tokenizer = AutoTokenizer.from_pretrained("maf1oz1/llm-course-hw2-reward-model") model = AutoModelForSequenceClassification.from_pretrained("maf1oz1/llm-course-hw2-reward-model", device_map="auto") - Notebooks
- Google Colab
- Kaggle
Reward model на SmolLM-135M-Instruct (Human-Like)
Reward model из домашнего задания 2 курса по LLM (DPO и PPO). Выдаёт одно число: насколько ответ похож на «живой» разговорный, а не на шаблонный ответ ассистента. Использовалась как reward и value model для PPO-модели.
Другие модели из этого задания: DPO, PPO.
Обучение
| Параметр | Значение |
|---|---|
| Архитектура | LlamaForSequenceClassification, num_labels=1 |
| Что обучается | только линейный слой score (576 параметров), backbone заморожен |
| Данные | HumanLLMs/Human-Like-DPO-Dataset в формате implicit prompt, split 90/10 (9 795 / 1 089) |
| Тренер | RewardTrainer из TRL 0.15.2 |
| Эпохи / батч / LR | 1 / 16 / 3e-4 |
| max_length | 1024 |
| Время | ~1 минута на 1× H100 (612 шагов) |
Важная деталь — pad-токен. В transformers 4.48 LlamaForSequenceClassification берёт оценку с токена перед первым pad-токеном. Если сделать pad_token = eos_token (<|im_end|>), первым окажется конец реплики пользователя: модель оценивает только промпт, одинаковый у chosen и rejected, и лосс стоит на 0.693 с нулевым градиентом. Поэтому pad_token = "<|endoftext|>": этот токен в тексте не встречается.
Качество
Лосс за эпоху: в среднем 0.104, к концу обучения около 0.04. На примере из тестовой части награда chosen — 4.07, rejected — −0.51.
Модель обучала только линейный слой поверх замороженных признаков, поэтому оценивает в основном стиль (разговорный тон, встречный вопрос), а не полезность ответа. При PPO это проявилось: политика научилась давать короткие разговорные реплики почти без содержания.
Использование
Ответ нужно подавать в chat-template, вместе с промптом:
from transformers import AutoTokenizer, AutoModelForSequenceClassification
tok = AutoTokenizer.from_pretrained("maf1oz1/llm-course-hw2-reward-model")
rm = AutoModelForSequenceClassification.from_pretrained("maf1oz1/llm-course-hw2-reward-model")
chat = [
{"role": "user", "content": "What's your morning routine like?"},
{"role": "assistant", "content": "Coffee first, always! What about you?"},
]
inputs = tok(tok.apply_chat_template(chat, tokenize=False), return_tensors="pt")
print(rm(**inputs).logits[0].item())
- Downloads last month
- 43
Model tree for maf1oz1/llm-course-hw2-reward-model
Base model
HuggingFaceTB/SmolLM-135M