русские анекдоты, hw1

учебная языковая модель, byte-level bpe реализован с нуля, в трансформере используются alibi, gqa, swiglu и rmsnorm

данные и обучение

источник: IgorVolochay/russian_jokes, revision df1d9100b15b470ef20bc1bf53ae014a3776aa4e, удалены пустые тексты и точные дубликаты, разбиение 90/5/5, seed 12648430

лучшая основная модель: mini_tuned, параметры: 10,523,520, контекст 128, словарь 1024, dropout 0.05

mini_tuned продолжает лучшие веса mini еще на 6000 шагов, dropout снижен до 0,05, learning rate для нового этапа 0,0003, в таблице для него указано суммарное число шагов

качество

запуск шаги batch lr лучший шаг validation ce
nano 10000 64 0.001 10000 3.2858
mini 8000 32 0.0005 8000 2.8145
small 1500 16 0.0003 1500 3.4099
rope 2000 64 0.001 2000 3.5485
mla 2000 64 0.001 2000 3.5785
mini_tuned 14000 32 0.0003 14000 2.6850

test cross entropy: 2.6893, perplexity: 14.72

loss усредняется по настоящим целевым токенам, padding исключен, eos учитывается, тексты длиннее контекста обрезаются

бюджеты запусков отличаются, поэтому таблица не доказывает преимущество архитектуры при равных ресурсах

примеры

temperature 0.8, top_k 10, до 100 новых токенов, seed фиксирован отдельно для каждого примера

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

в примерах есть форма короткого диалога, но персонажи и смысл часто путаются, после дообучения loss снизился, а связных анекдотов в этих четырех примерах все равно нет

greedy зацикливается, изменение temperature и top_k заметно не улучшило связность, для основного сравнения оставлены temperature 0,8 и top_k 10

ограничения

маленькая модель не гарантирует связный сюжет и смешную концовку, возможны повторы, ошибки и воспроизведение текстов из обучения

датасет содержит грубую лексику и стереотипы, модель предназначена для учебного эксперимента

загрузка

для локального запуска перейди в папку hw1_artifacts/model, для загрузки из hugging face скачай hw1_model.py рядом со своим скриптом, установи зависимости из requirements.txt и выполни

import torch
from hw1_model import ByteLevelBPETokenizer, TransformerForCausalLM

repo_id = "superuser77/llm-course-hw1"
model_path = "." if repo_id.startswith("local/") else repo_id
tokenizer = ByteLevelBPETokenizer.from_pretrained(model_path)
model = TransformerForCausalLM.from_pretrained(model_path).eval()
ids = torch.tensor([tokenizer.encode("Заходит в бар", add_eos_token=False)])
torch.manual_seed(12648430)
output = model.generate(ids, 100, tokenizer.eos_token_id, temperature=0.8, do_sample=True, top_k=10)
print(tokenizer.decode(output[0].tolist()))

реализация

alibi, rope, mla

Downloads last month
19
Safetensors
Model size
10.6M 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 superuser77/llm-course-hw1

Paper for superuser77/llm-course-hw1