Russian Jokes Generator: Transformer с современными архитектурными решениями
Компактная генеративная языковая модель для создания русских анекдотов. Модель обучена с нуля на датасете русских анекдотов с использованием кастомного Byte-level BPE токенизатора.
Архитектура
Модель представляет собой decoder-only трансформер с современными архитектурными улучшениями:
- ALiBi (Attention with Linear Biases): замена классических позиционных эмбеддингов на линейные bias'ы в attention scores, что улучшает экстраполяцию на длинные последовательности и экономит память
- GQA (Grouped-Query Attention): компромисс между Multi-Head и Multi-Query attention для ускорения inference при сохранении качества
- SwiGLU: gated activation в feed-forward блоках вместо классического ReLU для улучшения выразительности модели
- RMSNorm: упрощенная нормализация вместо LayerNorm для ускорения обучения
Конфигурации моделей
| Версия | Слои | Heads | KV Heads | Hidden Dim | FFN Dim | Параметры |
|---|---|---|---|---|---|---|
| nano | 3 | 4 | 2 | 96 | 256 | ~0.9M |
| mini | 6 | 6 | 3 | 384 | 1024 | ~5M |
| small | 12 | 12 | 6 | 768 | 2048 | ~30M |
Результаты обучения
| Конфигурация | Steps | Batch Size | LR | Weight Decay | Final Loss | Пример генерации |
|---|---|---|---|---|---|---|
| nano (default) | 3000 | 16 | 3e-3 | 0.1 | 4.331 | Заходит в бара - А в кого, как-то не сем, а у нас, что ты игру. |
| mini (default) | 3000 | 16 | 3e-3 | 0.1 | 4.126 | Заходит в бары, что-тоянии, адутки. Мужиканкий снуть котовать, что я тебе в том. |
| mini (tuned) | 3000 | 32 | 6e-3 | 0.02 | 2.976 | Заходит в бар с бармену в магазину и спрашивает:- Петрович! Мама, у вас что ли? |
| mini (stable) | 5000 | 32 | 2e-3 | 0.05 | 2.852 | Заходит в бар с улицу и приходит к продавцу: Слушай, а кто это делает место? Меня, мама, я не пытался. Там же самое глубоко, что сегодня в семье пять раз в день. |
| mini (extended) | 10000 | 32 | 6e-3 | 0.02 | 2.532 | Заходит в бар мужик и говорит: — Сэр, вы такая хуйня, что я сейчас на работу не видел? |
Лучшие результаты достигнуты на конфигурации mini с увеличенным batch size и тщательно подобранным learning rate.
Использование
from huggingface_hub import hf_hub_download
import torch
# Загрузка модели
model = TransformerForCausalLM.from_pretrained("your-username/russian-jokes-transformer")
model.eval()
# Загрузка токенизатора
tokenizer = BPETokenizer.load("tokenizer.json")
# Генерация
prompt = "Заходит в бар"
input_ids = torch.tensor(tokenizer.encode(prompt)[:-1]).unsqueeze(0)
generated = model.generate(
input_ids,
max_new_tokens=100,
eos_token_id=tokenizer.eos_token_id,
temperature=0.8,
do_sample=True,
top_k=50
)
joke = tokenizer.decode(generated[0].tolist())
print(joke)
This model has been pushed to the Hub using the PytorchModelHubMixin integration:
- Code: notebook
- Downloads last month
- 4