Генерация анекдотов на русском

Домашнее задание по курсу LLM. Реализованы BPE-токенизатор, авторегрессионный Transformer и цикл обучения. Модель обучалась с нуля на русских анекдотах.

В репозитории опубликован базовый чекпойнт nano с GQA и ALiBi. Бонусная часть с RoPE, MLA и сравнением mini/small находится в ноутбуке HSE_hw1_bpe_and_transformer.ipynb.

Данные и токенизатор

Использован датасет IgorVolochay/russian_jokes, файл dataset.csv: 150 553 текста.

Исходное разбиение — 90% на обучение и 10% на тест, seed — 0xC0FFEE. Для бонусных экспериментов из исходной обучающей части отдельно выделяется 5% на валидацию. Исходный test сохраняется.

Реализован byte-level BPE со словарём из 1024 токенов, включая EOS. Контекст при основном обучении — 128 токенов; более длинные тексты обрезаются.

Опубликованная модель

Конфигурация nano:

  • 501 408 параметров;
  • 3 Transformer-блока;
  • размер скрытого состояния - 96;
  • 4 головы внимания и 2 KV-головы;
  • Grouped-Query Attention и ALiBi;
  • RMSNorm и SwiGLU;
  • dropout - 0,1.

Модель обучена предсказанию следующего токена в течение 10 000 шагов. При расчёте функции потерь паддинги исключаются, EOS учитывается. Опубликованные веса относятся к nano; веса бонусных mini и small в репозитории отсутствуют.

Бонус: RoPE и MLA

В ноутбуке реализованы:

  • Rotary Positional Embedding: вращение пар координат Q и K в зависимости от позиции токена. При выборе RoPE ALiBi отключается.
  • Multi-Head Latent Attention: совместное низкоранговое сжатие K/V, сжатие Q и decoupled RoPE. При генерации сохраняются только latent KV и общий позиционный K; полный кэш K/V не создаётся.

Проверки вычисляются в ноутбуке. RoPE сравнивается с явными матрицами вращения, MLA - с независимым расчётом через PyTorch SDPA. Также проверяются градиенты, причинность, паддинги, обработка последовательности частями и совпадение генерации с кэшем и без него, включая сдвиг окна контекста.

Результаты представлены таблицей численных ошибок и графиками: вращение RoPE, расхождение MLA с эталоном и размер кэша. В сохранённой проверке максимальное расхождение сжатого MLA с эталоном составило около 1,2e-7. На тестовом примере кэш MLA содержит 168 элементов против 448 у GQA.

Режимы сравнения mini и small

Предусмотрены четыре конфигурации:

Конфигурация Learning rate
mini, GQA + RoPE 3e-4
mini, GQA + RoPE 8e-4
mini, MLA + RoPE 6e-4
small, MLA + RoPE 4e-4

Результаты ранних экспериментов

Модель Параметры Шаги обучения Test loss Test perplexity
nano, GQA + ALiBi 501 408 10 000 3,5272 34,03
mini, GQA + RoPE 10 523 520 2 971 3,3350 28,08
mini, MLA + RoPE 10 451 328 1 356 3,6855 39,86
small, MLA + RoPE 78 570 240 13 5,9796 395,30

Оценка качества

В ранних экспериментах mini с GQA и RoPE улучшила test loss с 3,5272 у nano до 3,3350, а perplexity — с 34,03 до 28,08.

Примеры генерации из ранних экспериментов

Тексты приведены без ручного редактирования и включают исходную фразу. Параметры: temperature = 0,65, top_k = 20, top_p = 0,9, repetition_penalty = 1,08.

Опубликованная nano

Начальная фраза: «Заходит в бар мужик и говорит:». Seed: 12648430.

Заходит в бар мужик и говорит: - Доктор, а почему я тебя такое?- Да нет, ты не хочешь.

Начальная фраза: «На экзамене профессор спрашивает студента:». Seed: 12648432.

На экзамене профессор спрашивает студента:  - Кто ты не пьяный!  - А вот, у меня такое называется?  - Нет, я, я тебя не придумал?  - Да вот, что у вас вчера нее милиционер,  несколько родителей.

Mini с GQA и RoPE

Начальная фраза: «Заходит в бар мужик и говорит:». Seed: 12648430.

Заходит в бар мужик и говорит: - Ты, пожалуйста, что, не поговорил? - Ну, а ты, какой у тебя не будет? - Да это, а тот пьяный!

Начальная фраза: «На экзамене профессор спрашивает студента:». Seed: 12648432.

На экзамене профессор спрашивает студента:  - Конечно, что ли?  - Нет, да идут по лампу!
Downloads last month
208
Safetensors
Model size
551k params
Tensor type
F32
·
BOOL
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Dataset used to train kseniamakeevaa/llm-course-hw1