русские анекдоты, 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()))
реализация
- Downloads last month
- 19