TranslateGemma-12B-IT-sah

Двунаправленный переводчик якутский (саха, sah) ↔ русский (ru) на базе TranslateGemma-12B-IT.

Якутский — тюркский язык Сибири, не покрытый ни базовой TranslateGemma (55 языков), ни NLLB-200, ни FLORES-200. Эта модель добавляет якутский к Gemma 3 через дообучение на 121 376 реальных пар + self-back-translation

  • forward-translation.

Метрики

Out-of-domain (OPUS Tatoeba sah-ru, 994 пары, разговорный домен):

Направление chrF++ BLEU (sacrebleu, 13a)
ru → sah 38.99 12.76
sah → ru 33.85 15.26

In-domain (held-out из train, литературный домен, 1000 пар):

Направление chrF++ BLEU (sacrebleu, 13a)
ru → sah 45.21 16.97
sah → ru 43.41 21.38

Использование

⚠️ Модель использует свой prompt-формат (Gemma-3 chat), а не родной TranslateGemma chat-template — тот валидирует языковые коды и sah отвергает.

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

model_id = "lab-ii/translategemma-12b-it-sah"
tok = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id, dtype=torch.bfloat16, device_map="auto")

INSTR = {
    ("ru", "sah"): "Translate the following text from Russian to Yakut (Sakha).",
    ("sah", "ru"): "Translate the following text from Yakut (Sakha) to Russian.",
}

def translate(text, src="ru", tgt="sah"):
    prompt = (f"<start_of_turn>user\n{INSTR[(src, tgt)]}\n\n{text}"
              f"<end_of_turn>\n<start_of_turn>model\n")
    inp = tok(prompt, return_tensors="pt", add_special_tokens=True).to(model.device)
    out = model.generate(**inp, max_new_tokens=256, do_sample=False,
                         pad_token_id=tok.pad_token_id)
    return tok.decode(out[0][inp.input_ids.shape[1]:],
                      skip_special_tokens=True).strip()

print(translate("Привет, как дела?", "ru", "sah"))
print(translate("Дорообо!", "sah", "ru"))

Тренировка

  • База: google/translategemma-12b-it (Gemma 3 12B IT, доученная Google под перевод, январь 2026)
  • Метод: LoRA (r=32, α=64) SFT в bf16 на всех проекциях; затем merge_and_unload
  • Эпохи / эфф. батч: 2 / 32 (per-device 16 × grad-accum 2)
  • Оптимизатор: Adafactor, lr 1e-4, cosine, warmup 3%, gradient checkpointing
  • Токенизатор: не расширяли — byte-fallback Gemma 3 SPM покрывает якутскую кириллицу (включая ҥ ҕ һ ө ү) без потерь; расширение vocab по LLaMAX-исследованию ухудшает MT

Данные

Источник Размер Роль
ailabykt/sakha-russian-parallel 121 376 пар реальный train (обе стороны)
Leipzig sah_wikipedia_2021 + Glot500 sah_Cyrl 329 063 предложений якутский монолингв для self-BT
OPUS OpenSubtitles2018 (ru) 200 000 предложений русский монолингв (конверсационный) для FT
Self-back-translation (sah → ru через v1) ~150 000 пар синтетика только для ru→sah (нативный sah-таргет)
Forward-translation (ru → sah через v2) ~150 000 пар синтетика только для sah→ru (нативный ru-таргет)

Рецепт

Линия ALMA → ALMA-R → X-ALMA → TranslateGemma, упрощённая под одну H100:

  1. v1 = LoRA SFT на 121 376 реальных пар (обе стороны)
  2. v2 = + self-BT (v1 переводит 150k якутского монолингва в русский → пары с настоящим sah-таргетом) → прокачка ru→sah
  3. v3 = + forward-trans (v2 переводит 150k русского монолингва в якутский → пары с настоящим ru-таргетом) → прокачка sah→ru

После v3 LoRA сливалась в базу для финального чекпойнта.

Eval-сет

Out-of-domain Tatoeba собран из OPUS Tatoeba sah-ru (v2023-04-12, 994 пары после чистки), дедуплен против train. FLORES-200 якутский не содержит — стандартного бенчмарка нет.

Downloads last month
29
Safetensors
Model size
12B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 1 Ask for provider support

Model tree for lab-ii/translategemma-12b-it-sah

Finetuned
(7)
this model

Dataset used to train lab-ii/translategemma-12b-it-sah