Russian Jokes Generator

Языковая модель, обученная с нуля, для генерации анекдотов

О задании

В рамках задания был реализован с нуля полный пайплайн обучения языковой модели:

  1. Byte-level BPE токенизатор
  2. Transformer-модель с современными архитектурными решениями: RMSNorm, GQA/MLA, SwiGLU, ALiBi/RoPE
  3. Train-loop: linear warmup + linear decay scheduler, cross-entropy loss с маскированием паддингов.

Архитектура

Параметр Значение
Число слоёв 12
Hidden dim 768
Intermediate dim (FFN) 2048
Число attention голов 12
Head dim 64
Attention Multi-Head Latent Attention
KV-латент dim 256
RoPE head dim 32
Активация SwiGLU
Нормализация RMSNorm (pre-norm)
Позиционное кодирование RoPE
Всего параметров ~80M

Токенизатор

  • Тип: Byte-level BPE
  • Размер словаря: 1024

Данные

  • Датасет: IgorVolochay/russian_jokes
  • Train/test split: 90/10
  • Средняя длина: ~70 токенов на анекдот

Гиперпараметры обучения

Параметр Значение
Optimizer AdamW
Learning rate 2e-4
LR schedule linear warmup (10%) + linear decay to 0
Batch size 32
Max sequence length 128
Weight decay 0.01
Gradient clipping 1.0
Количество шагов 14,000

Результаты

Метрика Значение
Final train loss 2.3490
Final validation loss 2.4395
Baseline ("nano" model) 3.497

Loss Curve

Примеры генерации

Параметры генерации: do_sample=True, top_k=40, temperature=0.8, max_new_tokens=200.

Пример 1

Prompt: «Заходит в бар»

Заходит в бар пьяный мужик, а тащит за диваном.
 Мужик:
 - Бармен, почему ты так долго не видел вон тот джип?
 - За что?
 - Хм.. Я так и знал, ты бы послал ее в этой бочке,
 когда я ем все в вашем теле, ты меня ругаешь, а ты - нет..

Пример 2

Prompt: «Сидят два»

Сидят два зека, один жирный, второй спрашивает:
- Где плачешь?
- А я плачу...
- Как он умеет?
- Еще нет

Пример 3

Prompt: «Учительница спрашивает»

Учительница спрашивает учеников:
 - Вовочка, назови пожалуйста, учителя: "Скока-Петя,
 дядя, ты отдал 250 литров пять лет, а я - 10".
 - У меня 150. Пол - это 17.
 - А что, не знает, что такое 20-летняя сестра?
 - Не знаю.
 - А какая разница?
 - По-русски "газ" и "Родина".
 - Я тебе с ней расскажу, тормози.

Использование

import torch

# Определи классы из ноутбука перед использованием

tokenizer = ByteLevelBPETokenizer.from_pretrained("Kass-sandra/llm-course-hw1-mla-rope")
model = TransformerForCausalLM.from_pretrained("Kass-sandra/llm-course-hw1-mla-rope")
model.eval()

prompt = "Заходит в бар"
input_ids = torch.tensor(tokenizer.encode(prompt)[:-1])[None, :]
output = model.generate(
    input_ids,
    max_new_tokens=200,
    eos_token_id=tokenizer.eos_token_id,
    do_sample=True,
    top_k=40,
    temperature=0.8,
)
print(tokenizer.decode(output[0].tolist()))

Downloads last month
126
Safetensors
Model size
80.2M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Dataset used to train Kass-sandra/llm-course-hw1-mla-rope