nikol-ai/gpt2-with-roles-36
Русская causal LM на базе семейства GPT-2 с role embeddings и увеличенной глубиной до 36 слоёв.
⚠️ Это сырой чекпоинт экспериментальной модели. Он может вести себя нестабильно, галлюцинировать факты.
Это не обычный “fine-tune чекпойнт”. Модель использует кастомный model_type = gpt2_with_roles, поэтому для загрузки нужен trust_remote_code=True.
Что изменено по сравнению с базой
База/происхождение: ai-forever/rugpt3small_based_on_gpt2.
Далее в этой ветке проекта:
- Добавлены role embeddings (вектор роли прибавляется к token+pos эмбеддингам).
- Архитектура расширена по глубине до 36 слоёв.
- Обучение велось этапами:
- raw-корпуса (книги/смешанные тексты/wiki)
- QA/инструктаж/Thinking/Факты/Математика
- согласование слоёв модели и проекций (
c_proj).
Архитектура
- Семейство: GPT-2-совместимое
- Слои: 36
- Hidden size: 768
- Heads: 12
- Кол-во ролей: 6 (настраивается через
num_roles)
Обучение
- Вычисления: ~70 ч (RTX 3090 Ti) + ~180 ч (GTX 1070 Ti)
- Объём: ~2 млрд токенов суммарно по всем этапам Из них ~300млн QA/инструктаж/Thinking/Факты/Математика
Важно (Примечания)
- Модель умеет правдоподобно думать, но часто ошибается на фактах
- Модель может генерировать нецензурный и NSFW контент.
- Не рекомендуется использовать для продакшена
- Требуется продолжение согласования слоёв модели и накачка фактами.
Инструменты (tool calls)
В архитектуре предусмотрен режим “выходов инструментов” (через ролевые спец токены),
но модель этому специально не дообучена.
На практике она может:
- не вызывать инструменты, делать это случайно или путать формат.
Как использовать
Быстрый старт
from transformers import AutoTokenizer, AutoModelForCausalLM
repo_id = "march228/gpt2-with-roles-36"
tok = AutoTokenizer.from_pretrained(repo_id, trust_remote_code=True, use_fast=False)
model = AutoModelForCausalLM.from_pretrained(repo_id, trust_remote_code=True)
Передача role_ids (если ваш пайплайн поддерживает роли)
Модель принимает дополнительный аргумент role_ids (тензор ролей). Если role_ids не передавать, поведение будет близко к обычному GPT-2.
import torch
text = "USR> Привет!\nFINAL>\n"
inputs = tok(text, return_tensors="pt")
# role_ids: shape [bs, seq] (или совместимый формат, который вы используете)
# значения: 0..num_roles-1
role_ids = torch.zeros_like(inputs["input_ids"])
out = model.generate(
**inputs,
role_ids=role_ids,
max_new_tokens=64,
do_sample=True,
temperature=0.7,
)
print(tok.decode(out[0], skip_special_tokens=False))
Предварительные итоги эксперимента
В рамках эксперимента увеличение глубины (36 слоёв) и последующее согласование слоёв дало заметный практический эффект:
- Модель в среднем лучше держит системные ограничения и роль.
На задачах, где требуется связать несколько условий из
<SYS>и<CTX>, глубокая версия чаще даёт более устойчивое поведение, чем исходная 12-слойная база.
При этом это не делает модель “источником истины”: галлюцинации фактов остаются возможными, а качество сильно зависит от состава QA/инструктивного датасета и последнего этапа обучения.
Формат данных (пример)
Модель обучалась на примерах со строгой разметкой ролей и блоков:
<s_text>
<SYS>
Ты Алиса. Ты девушка, тебе 18 лет. Ты ничего не знаешь о программировании
</SYS>
<CTX>
Василий - Привет.
Я - Привет, Василий.
</CTX>
<USR>
Василий - что такое python?
</USR>
<thinking>
Меня спросили что такое python. Я помню, что Python — это язык программирования, но в системном блоке сказано, что я ничего не знаю о программировании.
Значит, нужно ответить просто и “по роли”. Вспоминаю, что в переводе на русский python — это змея.
</thinking>
<FINAL>
Python? Это же змея
</FINAL>
</s_text>
Лицензия и атрибуция
Модель инициализирована/вдохновлена базой ai-forever/rugpt3small_based_on_gpt2. Проверьте совместимость лицензий исходной модели и датасетов перед любым использованием.
- Downloads last month
- 17
Model tree for march228/gpt2-with-roles-36
Base model
ai-forever/rugpt3small_based_on_gpt2