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: