Klasifikátor tematických oblastí bodů programu zastupitelstev

Fine-tunovaná RobeCzech pro multi-label klasifikaci bodů programu zastupitelstev českých měst do 17 tematických oblastí.

Korpus, ruční anotace, kontrolní sady a interaktivní demo jsou v doprovodném Space. Data jsou pod CC BY 4.0, tedy otevřená — nekomerční omezení níže se týká jen vah tohoto modelu.

K čemu to je

Česká města zveřejňují materiály ze zasedání zastupitelstev bez struktury a bez tematických štítků, takže na otázku přesahující jeden dokument se z nich odpovědět nedá. Model přiřazuje bodu programu oblasti, kterých se věcně týká, a tím je zpřístupní pro dotazy a analýzu.

Je určen pro výzkum a analýzu otevřených dat. Výstupy jsou analytické odhady dědící chyby modelu — nejsou autoritativním záznamem toho, čím se zastupitelstvo zabývalo, a nehodí se jako podklad pro rozhodnutí o konkrétních osobách.

Použití

import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification

MODEL = "martin0925/council-voting"
tok = AutoTokenizer.from_pretrained(MODEL)
model = AutoModelForSequenceClassification.from_pretrained(MODEL).eval()

title = "Návrh prodeje pozemku p.č. 441/29 v k.ú. Třebeš"
annotation = "Zastupitelstvo schvaluje prodej pozemku o výměře 312 m2…"

enc = tok(f"{title}\n\n{annotation}", truncation=True, max_length=512,
          return_tensors="pt")
with torch.no_grad():
    probs = torch.sigmoid(model(**enc).logits)[0]

for i, p in enumerate(probs):
    if p >= 0.65:                      # globální práh, viz níže
        print(f"{model.config.id2label[i]:32s} {p:.3f}")

Vstup je název bodu + "\n\n" + anotace a nic jiného. Návrh usnesení ani důvodová zpráva se nepoužívají, protože při inferenci nejsou napříč městy spolehlivě k dispozici.

Prahy

inference_config.json nese dvě varianty:

  • per_class_thresholds — výchozí pro nasazení, ladené na validačním splitu, rozsah 0,3–0,85 podle třídy
  • threshold: 0.65 — jediný globální práh; všechna čísla níže používají tento, aby srovnání napříč modely, systémy a městy stálo na jednom rozhodovacím pravidle

Bod, u něhož žádná třída práh nepřesáhne, je veden jako nezařazený. nezarazeno není třída modelu.

Třídy

majetek · doprava · finance_rozpocet · skolstvi · sport · kultura_cestovni_ruch · zivotni_prostredi · socialni_oblast · zdravotnictvi · bydleni · bezpecnost · komunalni_sluzby · uzemni_planovani · rozvoj_verejneho_prostranstvi · informacni_technologie · mezinarodni_spoluprace · legislativa_vnitrni_predpisy

Bod má typicky 1–3 oblasti. finance_rozpocet a majetek se přidávají i tam, kde je hlavní téma jiné, pokud je finanční mechanismus nebo majetková dispozice věcným obsahem bodu.

Trénování

Data 2 113 ručně anotovaných bodů Zastupitelstva města Brna
Split 1 685 / 215 / 213, iterativní stratifikace nad množinami štítků
Epochy 18, nejlepší checkpoint v epoše 15 podle validačního micro F1
Optimalizátor AdamW, lr 2e-5, weight decay 0,01, linear decay po 10 % warmupu
Loss binary cross-entropy, pos_weight = inverzní frekvence štítků
Batch 16, dynamický padding, max_length 512
Seed 42

Výsledky

In-domain (Brno, test $n=213$), globální práh 0,65:

metrika hodnota
micro F1 0,903
macro F1 0,893
precision 0,881
recall 0,926

95% bootstrapový interval na micro F1 je ±2,8 bodu (10 000 resamplů). S per-class prahy vychází micro F1 0,896. Šestnáct ze sedmnácti tříd je nad 0,80; nejslabší je informacni_technologie s pěti pozitivy v testu (F1 0,600).

Přenos na města mimo trénink, proti slepě anotovaným gold setům:

$n$ micro F1 (95 % CI) macro P R
Brno (in-domain) 213 0,903 [0,874 – 0,930] 0,893 0,881 0,926
Hradec Králové 93 0,820 [0,768 – 0,868] 0,837 0,857 0,786
Most 100 0,784 [0,725 – 0,839] 0,728 0,781 0,786

Srovnání s jinými přístupy na týchž 213 položkách a týchž gold štítcích:

systém micro F1 cena / 1 000 položek
TF-IDF + logistická regrese 0,812 0
TF-IDF + LinearSVC 0,861 0
Qwen2.5 7B, lokálně 0,760 0
Gemini 2.5 Flash-Lite 0,824 $0,18
Claude Haiku 4.5 0,847 $2,01
Claude Sonnet 5 0,888 $1,18
RobeCzech (tento model) 0,903 0

Rozdíl proti Sonnetu je +0,016, CI [−0,014, +0,044] — data ho nerozliší. Proti oběma levnějším komerčním modelům a proti otevřenému modelu je rozdíl významný. Per-item výstupy všech běhů jsou v data/eval/llm_runs/.

Omezení

  • Trénováno na jediném městě. Brno je po Praze největší zastupitelstvo v zemi; na menších obcích ani na jiných systémech správy dokumentů model takhle neuvidíte. Výkon mimo Brno klesá o 8–12 bodů.
  • Hlavní chyba v přenosu je finance_rozpocet — recall padá z 0,90 v Brně na 0,733 (HK) a 0,711 (Most). Hranice té třídy je napříč městy vedená jinak.
  • Žánr vstupu. Model je trénován na popisné anotaci psané před zasedáním. Na textu usnesení, který má jiný registr, se spíš zdrží odpovědi — v Mostu nevrátil žádný štítek u 14 ze 100 položek.
  • Taxonomie má měkké hranice. Při kontrolní studii na 50 položkách se čtyři anotátoři shodli na Krippendorffově α 0,511 (MASI) a 0,594 (Jaccard); po třídách od 0,24 u dopravy do 0,78 u školství. To je strop toho, co tu může jakýkoli klasifikátor dosáhnout.
  • Jen čeština a jen bod programu zastupitelstva. Na jiné správní dokumenty nebyl testován.

Licence a citace

Váhy jsou pod CC BY-NC-SA 4.0, protože základní model ufal/robeczech-base je pod ní a klauzule ShareAlike nedovoluje ji zvolnit. Nekomerční použití při uvedení zdroje a zachování licence; komerční vyžaduje předchozí písemný souhlas autora.

Data v doprovodném Space jsou naopak pod CC BY 4.0, tedy použitelná i komerčně. Omezení výše platí pro tyto váhy, ne pro korpus — kdo si na těch datech natrénuje model z jiného základu, není jím vázán.

@misc{janecek2026councilvoting,
  author = {Jane{\v c}ek, Martin},
  title  = {Klasifik{\'a}tor tematick{\'y}ch oblast{\'i} bod{\r u} programu
            zastupitelstev},
  year   = {2026},
  url    = {https://huggingface.co/martin0925/council-voting}
}

Kontakt: Martin Janeček, xjanec31@vutbr.cz

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

Model tree for martin0925/council-voting

Finetuned
(20)
this model

Space using martin0925/council-voting 1