Homework 1: Byte-level BPE and Transformer
Учебная авторегрессионная модель для продолжения русских анекдотов. Токенизатор и Transformer реализованы в домашней работе. Внешние предобученные веса не использовались.
Файлы и запуск
model.safetensors: финальные веса модели.config.json: конфигурация финальной архитектуры.vocabulary.jsonиmerges.json: соответствующий весам Byte-level BPE, 4096 токенов.model.py: определения модели и токенизатора из ноутбука.generate.py: самостоятельный пример генерации.HSE_hw1_bpe_and_transformer-Zassimuk.ipynb: исходный ноутбук с реализацией, экспериментами, сохранёнными результатами и выводами.
Модель использует собственные классы из model.py; пример не требует Transformers AutoModel или повторного обучения.
Пример проверен в чистом окружении Python 3.11 с PyTorch 2.5.1 на CPU: финальные веса загрузились, encode/decode прошли проверки на русском, пробелах, emoji и китайских символах; генерация для «Штирлиц пришел домой» совпала с приведённым ниже результатом из ноутбука.
pip install -r requirements.txt
python generate.py --prompt "Штирлиц пришел домой"
Чтобы скачать все файлы репозитория, включая исходный код, в Python:
from huggingface_hub import snapshot_download
folder = snapshot_download("WhyZosa/hw1-russian-jokes")
print(folder)
После скачивания запустите python /путь/к/скачанной/папке/generate.py.
Для публичного репозитория загрузка не требует авторизации. GPU используется при наличии CUDA; иначе пример работает на CPU, где beam search может быть медленным.
Архитектура и обучение
Финальная модель: small, 84 167 424 обучаемых параметра, 12 слоёв, hidden size 768, 12 query-голов и 6 KV-голов, intermediate size 2048, контекст 128 токенов. Используются GQA, ALiBi, SwiGLU и RMSNorm. Финальный dropout — 0.05. EOS имеет ID 4095.
Источник — IgorVolochay/russian_jokes, файл dataset.csv, revision df1d9100b15b470ef20bc1bf53ae014a3776aa4e. Исходное разделение: 135 497 train и 15 056 development, seed 0xC0FFEE.
В ноутбуке обучены nano, mini, small, mini с RoPE и mini с MLA; сохранены их метрики и примеры. RoPE и MLA — отдельные бонусные эксперименты, в финальных весах используется ALiBi + GQA.
Для дополнительных экспериментов тексты нормализованы и очищены от точных дубликатов; из development удалены 111 текстов, совпавших с очищенным train. BPE4096 обучен на train. При расширении словаря веса собственной small-модели перенесены через соответствующие старые токены, затем дообучены.
Финальный checkpoint — short48, дополнительный шаг 6000. Этот этап продолжает vocab4096-b128/step-3000 и обучается на полных анекдотах длиной 12–48 токенов: 95 102 train и 10 534 development-примера. AdamW, learning rate 1e-4, weight decay 0.1, batch size 128, warmup 300 и cosine decay. В ноутбуке для всей цепочки указано 19 000 шагов. Обучение выполнено на A100 с bf16.
Результаты
Значения ниже взяты из сохранённых выводов ноутбука, а не получены новым независимым прогоном.
| Эксперимент | Токенизатор | Development loss | Perplexity |
|---|---|---|---|
| nano | BPE1024 | 3.1956 | 24.43 |
| mini | BPE1024 | 2.6614 | 14.32 |
| small | BPE1024 | 2.4509 | 11.60 |
| mini + RoPE | BPE1024 | 2.6420 | 14.04 |
| mini + MLA | BPE1024 | 2.6526 | 14.19 |
| small-tuned | BPE1024 | 2.4317 | 11.38 |
| Финальный short48: короткая очищенная development-подвыборка | BPE4096 | 3.7909 | 44.29 |
Для финального checkpoint loss на исходном development с обрезанием до контекста 128 равен 4.8310. Loss разных токенизаторов и разных подвыборок напрямую несопоставим. Development использован для выбора весов и декодирования; независимая итоговая test-оценка не проводилась.
На short48 тренировочный loss снизился до 1.1177, а development loss вырос с 3.2863 до 3.7909: наблюдается переобучение. Финальные веса выбраны ради более связных коротких продолжений, а не минимального development loss.
Примеры генерации
Сохранённые примеры финальной модели из ноутбука. Параметры: num_beams=32, length_penalty=0.3, no_repeat_ngram_size=6, max_new_tokens=96; промпт кодируется без EOS. Маркер [EOS] ниже опущен для чтения.
Штирлиц пришел домой и застал жену с любовником. Это была любовь.
Студент приходит на экзамен с тремя бутылками коньяка и говорит профессору:- Прошу вас, пожалуйста, поставьте мне три!
— Доктор, у меня проблема, я не могу открываться людям. — можно поподробнее? — нет.
Сидят два рыбака, один с удочкой, второй еще трезвый...
Это выбранные примеры; полная панель из десяти начал, включая неудачные ответы, приведена в ноутбуке.
Ограничения
Связность и юмор нестабильны, возможны бессмыслица и повторы. В ноутбуке сообщается, что 3 из 20 продолжений полностью совпали с очищенными текстами train; новизна не подтверждена. Корпус и генерации могут содержать ненормативную лексику и оскорбительный контент. Модель предназначена для учебной демонстрации.
- Downloads last month
- 28