Russian Jokes LLM

Языковые модели, обученные на датасете русских анекдотов в рамках домашней работы по курсу Deep Learning.

Описание задания

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

  • Byte-level BPE токенизатор — обучение словаря заданного размера и набора слияний, кодирование и декодирование текста
  • Transformer для языкового моделирования со следующими компонентами:
    • RMSNorm — предварительная нормализация
    • GQA (Grouped Query Attention) — механизм внимания с группировкой запросов
    • SwiGLU — активация в Feed-Forward блоке
    • ALiBi — позиционные эмбеддинги
    • RoPE — Rotary Positional Embedding
    • MLA (Multi-Head Latent Attention)

Датасет

IgorVolochay/russian_jokes

Обученные модели

Модель Репозиторий Positional Encoding Attention
Базовая llm-course-hw1 ALiBi GQA
RoPE llm-course-hw1-rope RoPE GQA
MLA llm-course-hw1-mla RoPE MLA

Архитектура

Параметр Значение
Слоёв 3
Голов внимания 4
KV голов 2
Hidden dim 96
Intermediate dim 256
Vocab size 1024
Max seq len 128
Параметров ~0.5M

Токенизатор

Byte-level BPE токенизатор с размером словаря 1024 токенов, обученный на тренировочной части датасета.
Специальный токен: [EOS] — конец последовательности.

Качество

Модель Train Loss Val Loss
ALiBi 3.496 3.490
RoPE 3.461 3.473
MLA 3.512 3.522

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

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

ALiBi: Заходит в баре. Пока:- Ну что ты не могу внутьсячу?- Я не могу идешь!- Ну, сегодня я не могу сразу.

RoPE: Заходит в бар в кухни:- Папа, а вчера не знает, кто у тебя снова.

MLA: Заходит в барпарату. Слышал с пациенту:- Я тебе не папа, что я тебе, и с ним и говорит: - Мама, доктор, я не придется! - Ну и что, что это? - Да нет, ты мне, что у меня ведь я не понимаешь, что это я, что он у меня не знаю, что у тебя на кого?

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

import torch
from huggingface_hub import snapshot_download

tokenizer = ByteLevelBPETokenizer.from_pretrained("zhanslu/llm-course-hw1")
model = TransformerForCausalLM.from_pretrained("zhanslu/llm-course-hw1")
model.eval()

text = "Заходит в бар"
input_ids = torch.tensor(tokenizer.encode(text)[:-1])[None, :]
output = model.generate(
    input_ids,
    max_new_tokens=100,
    eos_token_id=tokenizer.eos_token_id,
    do_sample=True,
    top_k=10
)
print(tokenizer.decode(output[0].tolist()))
Downloads last month
98
Safetensors
Model size
551k params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support