Kviskr tegnsetting (norsk) — ordnivå, INT8 ONNX
Tegnsettings- og storbokstavmodell for norsk diktering, bygget for Kviskr. 15M parametre, 18,8 MB, 2,8 ms per diktering på en Apple M4 Max (ONNX Runtime, CPU, én tråd, 23 ord).
Den er en etterfølger til skolfus/kviskr-punctuation-no (XLM-R base,
47 språk, 266 MiB, 168 ms). Ærlig størrelsessammenligning, med tokenizer
regnet med på begge sider: 20,1 MB mot 275 MiB.
Hva garantien er — presist
Modellen spår to etiketter per mellomrom-avgrenset ord: hvilket tegn som skal stå etter ordet, og hvilken bokstavstørrelse ordet skal ha. Teksten settes sammen igjen av de opprinnelige ordene.
- Tegnspådommen kan ikke endre et ord. Tegnet settes bare mellom ord eller helt til slutt, og det kan ikke havne inne i et ord.
- Storbokstav-steget krever en sjekk, og den er ikke valgfri.
str.upper()i Unicode er ikke lengdebevarende:'fi'.upper()er'FI'(to tegn),'ß'.upper()er'SS', og'ı'.upper()er'I'— en annen bokstav. Uten sjekk blirfilmentilFIlmen. Oppskriften under forkaster derfor enhver storbokstav-endring som ikke er tegn-for-tegn samme lengde og samme bokstaver. - Laget kan bare LEGGE TIL tegn, aldri fjerne et. Avsluttende tegn som
allerede står i inndata (et forkortelsespunktum,
mill.) settes tilbake, og modellens spådom for det ordet ignoreres. - Hvitrommet settes tilbake tegn for tegn. Ikke
" ".join(tekst.split())— den spiser dobbelt mellomrom, NBSP (U+00A0), tabulator og linjeskift. Målt i ekte bruk: 6 av 571 dikteringer mistet linjeskiftene sine før denne regelen kom inn, og de tre andre ordbevaringsmålene var blinde for det fordi de også splitter på hvitrom.
Med de fire reglene er teksten bevart tegn for tegn. Målt: 0 brudd på 3 833 tekster (375 ASR-klipp med Ordrett inn, 375 med Standard inn, 3 000 tekstbiter, 83 dikteringer) — under fire definisjoner: streng (bare bokstavstørrelse og tegn kan skille), symmetrisk (ingenting fjernet), hvitrom (nøyaktig samme mellomrom, tabulatorer og linjeskift), og en uavhengig kritikers rå tegnsekvens.
Grensesnitt
| inn | input_ids [B, T] int64, attention_mask [B, T] int64 |
| ut | tegn [B, T, 7], stor [B, T, 5] (logits) |
| tokenizer | ltg/norbert3-xs (WordPiece, 50 000) |
| tegnklasser | ingen · , · . · ? · ! · : · ; — ! er slått av i kalibreringen (24 eksempler i 229 000 ord) |
| storklasser | liten · Stor · STORE · LEDD · BEGGE |
LEDD gir OL-komiteen, TV-aksjonen, EU-land.
BEGGE gir Nord-Norge, Sør-Afrika, Vest-Europa.
Oppskriften, alle fem stegene:
- del inndata på hvitrom, men ta vare på hvitrommet selv — det nøyaktige
skillet foran hvert ord og etter det siste; fjern avsluttende
.,!?;:fra hvert ord og husk hva du fjernet - send ordene inn med små bokstaver,
is_split_into_words=True - les av logits på første subord av hvert ord
- bygg teksten av de opprinnelige ordene og det opprinnelige hvitrommet; sto det et tegn der fra før, sett det tilbake og ignorer modellens spådom for det ordet
- endre bare bokstavstørrelse, og bare hvis endringen kan føres tilbake:
hvert endret tegn må være det opprinnelige tegnets egen store- eller
småform, OG det opprinnelige må komme tilbake av den motsatte operasjonen.
'Lj'.upper()er'LJ', men'LJ'.lower()er'lj'— ikke'Lj'. Ingen vei tilbake, altså ikke lov. Aldri rør et ord som allerede har stor bokstav inne i seg (iPhone,NB-Whisper,USAskal stå)
Behold likevel en vokter som sammenligner ordsekvensen før og etter og faller tilbake til inndata hvis noe avviker. Den skal aldri slå ut.
Målt (13.09.2026)
Alle kandidater får nøyaktig samme ASR-tekst inn; differansen er tegnlaget alene. 95 % paret bootstrap.
| benk | n | forgjenger | denne | paret |
|---|---|---|---|---|
| NB-benken, NB-Whisper large verbatim | 327 klipp | 58,2 | 63,7 | +5,4 [1,2, 9,5] |
| — bare spontan tale (Stortinget) | 60 | 47,3 | 58,1 | +10,8 [3,1, 18,6] |
| — opplest nyhetsprosa (FLEURS) | 150 | 72,7 | 71,7 | −0,9 [−6,0, 4,3] |
| holdt-ut norsk tekst (NCC) | 3 000 biter | 61,3 | 76,0 | +14,7 [13,5, 16,0] |
| — den helt lekkasjefrie delen (tallet som gjelder) | 2 484 | 61,4 | 75,5 | +14,1 [12,8, 15,5] |
| — den lekkende delen | 504 | 60,8 | 77,9 | +17,1 [14,4, 19,9] |
| dikteringstekst | 83 | 77,6 | 91,1 | +13,5 [4,7, 23,3] |
Storbokstav-F1 på NB-benken: 77,5 → 81,1 (+3,6 [1,8, 5,4]). Punktum-F1 på tekstbenken: 88,5 → 96,1 (+7,6 [7,1, 8,1]).
Om lekkasjen: 504 av de 3 000 tekstbitene deler minst ett 10-gram med treningsdataene, og modellen skårer 3 poeng høyere der. Tallet som skal siteres er derfor +14,1 [12,8, 15,5] fra den helt rene delen, ikke +14,7 fra hele benken. WER-endring: +0,0 [0,0, 0,1].
To tall som må stå ved siden av:
- Forgjengeren bryter ordsekvensen fordi den klassifiserer subord:
bl.a.→b.l...a.,m.v.→m...v.,ot.prp.→o.t. p.r.p.,p109→p.109. Målt: 125 av 1 226 tekstbiter (10,2 %), eller 279 av 3 000 (9,3 %) på hele tekstbenken. På ASR-tekst slår det ut sjelden — 1 av 327 — fordi talemodellen skriver «blant annet», ikke «bl.a.». (En tidligere utgave av dette kortet oppga 11,1 %. Det tallet var feil og er rettet.) - Forgjengeren er ikke koblet inn i noen app i dag (0 ONNX-referanser i Kviskrs Swift-kode). Ingen bruker rammes av feilen; den er en forskningsbaseline.
Trening
ltg/norbert3-xs finjustert på 28,2M ord norsk tekst med menneskelagd
tegnsetting fra NCC:
Stortingsdokumenter (13,8M), bøker (8,9M), Målfrid (3,9M), Wikipedia (1,5M).
10 842 steg, batch 64, AdamW, kosinus. Beslutningsgrensene er kalibrert per
klasse på et holdt-ut valideringssett.
De norske TALEkorpusene kan ikke brukes som fasit: NPSC har 0,0 komma per 1000 ord, NST 17,3, og NB Tale mangler tegnsetting i 48 av 49 klipp i Nasjonalbibliotekets eval-sett. Tegnsetting må komme fra tekstkorpora.
Kjente svakheter
- De to hodene er uavhengige og kan motsi hverandre. 6,4 % av kommaene modellen setter på ASR-tekst følges av stor bokstav (fasiten: 1,6 %) — «Hei, Anders, Jeg rakk ikke …».
- Den er mer villig enn mennesket på ekte ASR-tekst: 49,4 komma per 1000 ord mot fasitens 43,1. På ren tekst og på diktering treffer den tettheten nesten eksakt.
- Store bokstaver inne i et ord kan ikke gjenskapes fra små bokstaver.
iphoneblirIphone, ikkeiPhone. Ord som allerede HAR en stor bokstav inne i seg røres aldri. - Storbokstav-steget krever en TILBAKEFØRINGS-sjekk, ikke bare en
lengdesjekk. Tre tegnklasser bryter en svakere regel:
fiU+FB01 (lengde),KU+212A (.lower()er ikke injektiv) og titteltegneneDžU+01C5,LjU+01C8,NjU+01CB,DzU+01F2 (både stor- og småform stemmer, men tegnet er et annet og kommer ikke tilbake). Se oppskriften over, punkt 5. - Ett- og to-ords dikteringer får feil sluttegn:
hei→Hei?oghm→HM?. Treningsbitene var 8–70 ord, så modellen har aldri sett en diktering på ett ord. Det er ikke en sjelden form: 15 % av dikteringene i ekte bruk er tre ord eller kortere. En modell trent med korte biter fikser det, men mister da sluttegnet på korte HELE setninger (Send den til meg), og er statistisk uskillelig ellers — derfor er den ikke publisert. Riktig fiks er å kutte korte biter ved en setningsgrense.
Lisens
Apache 2.0, samme som ltg/norbert3-xs og NCC-lisensene den er trent på.
Model tree for skolfus/kviskr-tegnsetting-no
Base model
ltg/norbert3-xs