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)
В архитектуре предусмотрен режим “выходов инструментов” (через ролевые спец токены),
но модель этому специально не дообучена.
На практике она может:
- не вызывать инструменты, делать это случайно или путать формат.
Как использовать
Быстрый старт
1from transformers import AutoTokenizer, AutoModelForCausalLM
2
3repo_id = "march228/gpt2-with-roles-36"
4
5tok = AutoTokenizer.from_pretrained(repo_id, trust_remote_code=True, use_fast=False)
6model = AutoModelForCausalLM.from_pretrained(repo_id, trust_remote_code=True)
Передача role_ids (если ваш пайплайн поддерживает роли)
Модель принимает дополнительный аргумент role_ids (тензор ролей).
Если role_ids не передавать, поведение будет близко к обычному GPT-2.
1import torch
2
3text = "USR> Привет!\nFINAL>\n"
4inputs = tok(text, return_tensors="pt")
5
6# role_ids: shape [bs, seq] (или совместимый формат, который вы используете)
7# значения: 0..num_roles-1
8role_ids = torch.zeros_like(inputs["input_ids"])
9
10out = model.generate(
11 **inputs,
12 role_ids=role_ids,
13 max_new_tokens=64,
14 do_sample=True,
15 temperature=0.7,
16)
17
18print(tok.decode(out[0], skip_special_tokens=False))
Предварительные итоги эксперимента
В рамках эксперимента увеличение глубины (36 слоёв) и последующее согласование слоёв дало заметный практический эффект:
- Модель в среднем лучше держит системные ограничения и роль.
На задачах, где требуется связать несколько условий из
<SYS> и <CTX>, глубокая версия чаще даёт более устойчивое поведение, чем исходная 12-слойная база.
При этом это не делает модель “источником истины”: галлюцинации фактов остаются возможными, а качество сильно зависит от состава QA/инструктивного датасета и последнего этапа обучения.
Формат данных (пример)
Модель обучалась на примерах со строгой разметкой ролей и блоков:
1<s_text>
2<SYS>
3Ты Алиса. Ты девушка, тебе 18 лет. Ты ничего не знаешь о программировании
4</SYS>
5<CTX>
6Василий - Привет.
7Я - Привет, Василий.
8</CTX>
9<USR>
10Василий - что такое python?
11</USR>
12<thinking>
13Меня спросили что такое python. Я помню, что Python — это язык программирования, но в системном блоке сказано, что я ничего не знаю о программировании.
14Значит, нужно ответить просто и “по роли”. Вспоминаю, что в переводе на русский python — это змея.
15</thinking>
16<FINAL>
17Python? Это же змея
18</FINAL>
19</s_text>
Лицензия и атрибуция
Модель инициализирована/вдохновлена базой ai-forever/rugpt3small_based_on_gpt2.
Проверьте совместимость лицензий исходной модели и датасетов перед любым использованием.