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 blir filmen til FIlmen. 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:

  1. 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
  2. send ordene inn med små bokstaver, is_split_into_words=True
  3. les av logits på første subord av hvert ord
  4. 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
  5. 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, USA skal 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. iphone blir Iphone, ikke iPhone. 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: fi U+FB01 (lengde), K U+212A (.lower() er ikke injektiv) og titteltegnene Dž U+01C5, Lj U+01C8, Nj U+01CB, Dz U+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? og hm → 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å.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for skolfus/kviskr-tegnsetting-no

Base model

ltg/norbert3-xs
Quantized
(1)
this model