CoolFace
Modelpublic

GaborMadarasz/gemma_3_270m_ITN_finetune_16bit

sourceHugging Faceapache-2.0updated 3mo agoView on Hugging Face
1likes68downloads
Model Card

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ána 2. világháború után
két fiú és két lány apja2 fiú és 2 lány apja
negyven kilométer40 kilométer
kilencszer jelölték9-szer jelölték
a tömegmészárlásnak három túlélője ismerta 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ásSorokLeírás
Common Voice5 802Mozilla open-source magyar beszédkorpusz
VoxPopuli2 878EU parlament beszédek (magyar)
Whisper12 483OpenAI 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: qproj, kproj, vproj, oproj, gateproj, upproj, down_proj
  • —Precision: float16
  • —Max sequence length: 2048 tokens

Training Hyperparameters

ParameterValue
Learning rate2e-5
LR schedulerlinear
Optimizeradamw_8bit
Batch size16
Gradient accumulation1
Warmup steps150
Epochs1
Weight decay0.001
LoRA dropout0

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

python
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

python
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

DatasetSorokForrás
Common Voice test1 000Mozilla Common Voice hu test split
VoxPopuli test1 110VoxPopuli hu test split
FLEURS test905Google FLEURS hu test split
Összesen3 015

Results

DatasetExact MatchNumber AccuracyWERCER
Common Voice test97.70%99.30%0.35%0.18%
VoxPopuli test96.94%99.28%0.82%0.59%
FLEURS test93.81%98.33%1.93%1.40%
Összesített96.25%99.00%1.15%0.81%

Error Analysis

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

  1. 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:
  2. 2."egészen" → "1." (hibás, az "egész" nem szám)
  3. 3."egyike" → "1." (hibás, az "egyike" főnév)
  4. 4."egyre" → "1re" (hibás, az "egyre" határozószó)
  1. 1.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.
  1. 1.Rossz számok (ritka): A modell néha rossz számot generál (pl. "négyszer" → "2-szer").
  1. 1.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

bibtex
@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