zhanslu/llm-course-hw1
029
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)
Датасет
Обученные модели
Архитектура
Токенизатор
Byte-level BPE токенизатор с размером словаря 1024 токенов, обученный на тренировочной части датасета. Специальный токен: [EOS] — конец последовательности.
Качество
Примеры генерации
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()))