Views
No views yet
google/gemma-2-2b-it to convert
casual Arabic-in-Latin-script text into scholarly diacritized form (macrons,
ʿayn/hamza, emphatic consonants).in: Man Safara Safaran Mubaha.
out: Man Sāfara Safaran Mubaḥā.main — link is to the working branch).google/gemma-2-2b-it (instruction-tuned checkpoint, so
apply_chat_template + response-only loss masking work without a custom
prompt format)olanigan/gemma-4-good-dataset
(1,015 rows, instruction/input/output), 90/10 split, seed=3407q/k/v/o_proj +
gate/up/down_proj, 4-bit quantized base, response-only masked loss
(train_on_responses_only)a10g-large), ~11 min wall-clock, <$1| Metric | Value |
|---|---|
| Exact match | 7/10 |
| Near-miss (single misplaced diacritic) | 2/10 |
| Content drift / dropped text | 0/10 |
| Final train loss | 0.0375 |
| Final eval loss | 0.0151 |
1from transformers import AutoModelForCausalLM, AutoTokenizer
2from peft import PeftModel
3import torch
4
5base = AutoModelForCausalLM.from_pretrained("google/gemma-2-2b-it", torch_dtype=torch.bfloat16)
6model = PeftModel.from_pretrained(base, "olanigan/gemma-2-2b-transliterate")
7tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-2b-it")
8
9messages = [{"role": "user", "content": "Transliterate the following Arabic Latin text to scholarly diacritized form:\nMan Safara Safaran Mubaha."}]
10inputs = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt", return_dict=True)
11out = model.generate(**inputs, max_new_tokens=256, do_sample=False)
12print(tokenizer.decode(out[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=True))