Results
Evaluated against a held-out set of human-corrected council utterances. val_corr
is the hard set (utterances a human actually corrected); val_reg is a
regression check on general speech (to confirm the model does not forget everyday
Greek). Lower is better; deltas are vs. the un-adapted whisper-large-v3 baseline
scored the same way.
Table with columns: Set, n, WER, WER (norm), CER| Set | n | WER | WER (norm) | CER |
|---|
| val_corr (corrections) | 3,157 | 37.74 (−17.9) | 29.35 (−17.6) | 17.46 (−15.5) |
| val_reg (general, regression) | 4,722 | 10.46 (−14.3) | 4.87 (−10.4) | 3.43 (−10.9) |
WER (norm) lowercases, strips accents, folds final sigma, and drops
punctuation. The adapter improves the hard corrections set and general speech
— no regression.
Intended use
Greek-language automatic speech recognition for municipal-council recordings and
similar formal Greek speech. Designed as a drop-in ASR provider for the
OpenCouncil transcription pipeline (schemalabz/opencouncil-tasks). It performs
transcription only — speaker diarization is done downstream (pyannote), so
this model assigns no speakers.
How to use
import torch
from transformers import WhisperForConditionalGeneration, WhisperProcessor, pipeline
from peft import PeftModel
base = WhisperForConditionalGeneration.from_pretrained(
"openai/whisper-large-v3", torch_dtype=torch.float16)
model = PeftModel.from_pretrained(base, "opencouncil/whisper-large-v3-el-council-lora").merge_and_unload()
model.generation_config.language = "greek"
model.generation_config.task = "transcribe"
proc = WhisperProcessor.from_pretrained("openai/whisper-large-v3", language="greek", task="transcribe")
asr = pipeline("automatic-speech-recognition", model=model,
tokenizer=proc.tokenizer, feature_extractor=proc.feature_extractor,
chunk_length_s=30, torch_dtype=torch.float16, device="cuda")
print(asr("council_clip.wav", generate_kwargs={"language": "greek", "task": "transcribe"}))
A harness that emits transcripts in the exact OpenCouncil Transcript JSON
schema (drop-in for the Scribe transcriber) lives in the project repo at
eval/oc_inference_harness.py.
Training data
Human-corrected transcripts of Greek municipal-council meetings, combined with an
un-edited backbone of the same meetings (~28.6h total). The dataset is private
and under a GDPR/DPO legal hold and is not released. Only this model artifact is
public.
Limitations & responsible-use notes
- PII memorization: LoRA fine-tuning on
q_proj/v_proj carries a low but
nonzero risk of memorizing rare tokens (e.g. names) from the training audio.
Do not treat the model as a source of personal data; use it to transcribe, not
to recall training content.
- Diarization: none. Pair with a separate diarizer for speaker labels.
- Domain: tuned for formal Greek council speech; expect smaller gains on
casual or non-council audio.
- Confidence scores: whisper does not expose calibrated word confidence; any
downstream consumer should not rely on per-word confidence from this model.
Provenance
Fine-tuned as part of OpenCouncil's GSoC 2026 Greek-ASR work. Base model:
openai/whisper-large-v3 (Apache-2.0). Adapter weights released under Apache-2.0.