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:

Downloads last month
4
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Dataset used to train vekshinkir/llm-course-hw1