How to use from
Docker Model Runner
docker model run hf.co/GaborMadarasz/gemma_3_270m_ITN_finetune_16bit
Quick Links

Gemma-3-270M Hungarian ITN Finetune

A Gemma-3 270M Instruct modell Inverse Text Normalization (ITN) feladatra finetune-olva magyar nyelven. A modell automatikusan átalakítja a beszédfelismerés (ASR) által generált szövegben a betűvel kiírt számokat, dátumokat és mértékegységeket normalizált írott formára.

Model Details

  • Base model: unsloth/gemma-3-270m-it
  • Model type: Gemma-3 270M with LoRA adapters (merged to 16-bit)
  • Language: Hungarian (hu)
  • License: Gemma
  • Finetuning framework: Unsloth + TRL SFTTrainer

Intended Use

A modell célja, hogy magyar ASR (beszédfelismerő) rendszerek kimenetét normalizálja.

Examples

Bemenet (ASR kimenet) Kimenet (normalizált)
a második világháború után a 2. világháború után
két fiú és két lány apja 2 fiú és 2 lány apja
negyven kilométer 40 kilométer
kilencszer jelölték 9-szer jelölték
a tömegmészárlásnak három túlélője ismert a tömegmészárlásnak 3 túlélője ismert

Direct Use

A modell közvetlenül használható magyar ASR kimenetek normalizálására. Ajánlott használati esetek:

  • Beszédfelismerő rendszerek utófeldolgozása
  • Automatikus feliratozás
  • Diktált szövegek formázása

Out-of-Scope Use

  • Nem ASR kimenetek normalizálása (pl. helyesírási hibák javítása)
  • Más nyelvű szövegek (a modell kizárólag magyarra lett optimalizálva)
  • Generatív feladatok (a base modell képességei korlátozottak a finetune miatt)

Training Data

A training dataset ~21 000 sorból áll, három forrásból:

Forrás Sorok Leírás
Common Voice 5 802 Mozilla open-source magyar beszédkorpusz
VoxPopuli 2 878 EU parlament beszédek (magyar)
Whisper 12 483 OpenAI Whisper ASR által generált magyar átírások

A dataset "needle in the haystack" megközelítéssel készült: regex alapú szűréssel csak az ITN-re releváns (számokat, dátumokat, mértékegységeket tartalmazó) sorok kerültek be. A normalizált targetek regex alapú normalizálással készültek, komplex esetekben lokális LLM-mel (Gemma 4 12B) javítva.

Data Preprocessing

A szövegek Gemma-3 chat template-re lettek konvertálva:

  • System prompt: "Alakítsd át a következő magyar ASR szöveget normalizált írott formára (számok, dátumok, mértékegységek):"
  • User: az eredeti ASR szöveg
  • Assistant: a normalizált szöveg

Training Procedure

Finetuning Details

  • Framework: Unsloth + TRL SFTTrainer
  • Method: LoRA (Low-Rank Adaptation)
  • LoRA rank: 128
  • LoRA alpha: 128
  • Target modules: q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj
  • Precision: float16
  • Max sequence length: 2048 tokens

Training Hyperparameters

Parameter Value
Learning rate 2e-5
LR scheduler linear
Optimizer adamw_8bit
Batch size 16
Gradient accumulation 1
Warmup steps 150
Epochs 1
Weight decay 0.001
LoRA dropout 0

Special Training Techniques

  • Train on responses only: A loss csak az assistant válaszokra számítódik, a user input és system prompt mask-olva van (-100 ignore index). Ez növeli a finetune pontosságát.
  • Unsloth optimizations: Gradient checkpointing "unsloth" módban (~30% VRAM megtakarítás).

How to Use

Installation

pip install unsloth transformers peft torch

Inference with Unsloth

from unsloth import FastModel
import torch

model, tokenizer = FastModel.from_pretrained(
    model_name="GaborMadarasz/gemma_3_270m_ITN_finetune_16bit",
    max_seq_length=2048,
    load_in_4bit=False,
    dtype=torch.float16,
)

messages = [
    {"role": "system", "content": "Alakítsd át a következő magyar ASR szöveget normalizált írott formára (számok, dátumok, mértékegységek):"},
    {"role": "user", "content": "a második világháború után negyven évvel"},
]

text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(text, return_tensors="pt").to("cuda")

outputs = model.generate(
    **inputs,
    max_new_tokens=256,
    temperature=1.0,
    top_p=0.95,
    top_k=64,
)

print(tokenizer.decode(outputs[0], skip_special_tokens=True))

Inference with Transformers

from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained(
    "GaborMadarasz/gemma_3_270m_ITN_finetune_16bit",
    torch_dtype="auto",
    device_map="auto",
)
tokenizer = AutoTokenizer.from_pretrained("GaborMadarasz/gemma_3_270m_ITN_finetune_16bit")

Limitations and Bias

  • Méret: A 270M paraméter korlátozza a modell által kezelhető komplex eseteket (pl. összetett dátumok, többes számok mondaton belül)
  • Domain: A training data főleg Common Voice, VoxPopuli és Whisper forrásból származik, ami nem fedi le az összes magyar beszédtípust (pl. dialektusok, szaknyelv)
  • Hallucináció: Ritkán előfordulhat, hogy a modell nem csak a számokat normalizálja, hanem más szavakat is módosít
  • ITN coverage: A regex alapú normalizálás nem fedi le az összes magyar szám-kifejezést (pl. tört számok: "másfél", "háromnegyed")

Evaluation

Az értékelés három független, a trainingből teljesen kizárt test set-en történt. Egyik test set sem volt benne a training datasetben (a Common Voice és VoxPopuli train splitjeiből származó adatokat használtunk csak a tanításhoz, a test splitjeiket kizárólag az értékeléshez).

Test Datasets

Dataset Sorok Forrás
Common Voice test 1 000 Mozilla Common Voice hu test split
VoxPopuli test 1 110 VoxPopuli hu test split
FLEURS test 905 Google FLEURS hu test split
Összesen 3 015

Results

Dataset Exact Match Number Accuracy WER CER
Common Voice test 97.70% 99.30% 0.35% 0.18%
VoxPopuli test 96.94% 99.28% 0.82% 0.59%
FLEURS test 93.81% 98.33% 1.93% 1.40%
Összesített 96.25% 99.00% 1.15% 0.81%

Error Analysis

A leggyakoribb hibatípusok a legrosszabb esetek alapján:

  1. Túl agresszív normalizálás (leggyakoribb): A modell olyan szavakat is számra cserél, amelyek csak tartalmazzák a szám tövét, de nem számok. Például:

    • "egészen" → "1." (hibás, az "egész" nem szám)
    • "egyike" → "1." (hibás, az "egyike" főnév)
    • "egyre" → "1re" (hibás, az "egyre" határozószó)
  2. Nagybetűsítés: A modell automatikusan nagybetűsíti a mondatkezdést, de a gold adat kisbetűs. Valójában helyesírásilag a modell kimenete a helyes, de nem egyezik a gold standarddal.

  3. Rossz számok (ritka): A modell néha rossz számot generál (pl. "négyszer" → "2-szer").

  4. Tartalmi változtatás (ritka): A modell néha szavakat hagy el vagy változtat meg a számokon kívül.

Metrikák magyarázata

  • Exact Match: A teljes normalizált szöveg pontos egyezése a gold-dal
  • Number Accuracy: Csak a számok/dátumok/mértékegységek helyessége
  • WER (Word Error Rate): Szószintű hibaarány
  • CER (Character Error Rate): Karakter szintű hibaarány

Limitations and Bias

  • Méret: A 270M paraméter korlátozza a modell által kezelhető komplex eseteket (pl. összetett dátumok, többes számok mondaton belül)
  • Túl agresszív normalizálás: A modell néha olyan szavakat is számra cserél, amelyek csak tartalmazzák a szám tövét ("egyike", "egész", "egyre")
  • Domain: A training data főleg Common Voice, VoxPopuli és Whisper forrásból származik, ami nem fedi le az összes magyar beszédtípust (pl. dialektusok, szaknyelv)

Citation

@misc{gemma3_270m_itn_hu,
  author = {Madarász, Gábor},
  title = {Gemma-3-270M Hungarian ITN Finetune},
  year = {2026},
  publisher = {HuggingFace},
  howpublished = {\url{https://huggingface.co/GaborMadarasz/gemma_3_270m_ITN_finetune_16bit}}
}

Acknowledgements

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

Model tree for GaborMadarasz/gemma_3_270m_ITN_finetune_16bit

Finetuned
(424)
this model