Maktspråk

PROT. 2026/27:2·METOD OCH VALIDERING

Varför siffran sjönk från 0,78 till 0,62.

Den högre siffran kom från en vanlig valideringsfälla. Den lägre är talar-oberoende: ingen politiker i testet har en enda mening i träningsdatan. Här är skillnaden, och vad den kostar i siffror.

ANF. 1PROBLEMET

Att gissa parti från text är lätt att överskatta. Om samma politiker förekommer i både tränings- och testdata lär sig modellen delvis att känna igen enskilda personers formuleringar, inte partiets retorik. En vanlig radbaserad train/test-split (90/10 på anföranden) gör exakt det: samma talare hamnar på båda sidor.

Resultatet är en siffra som ser imponerande ut men mäter fel sak. Den säger egentligen: “känner modellen igen Magdalena Andersson när hon talar?”, inte “känner modellen igen Socialdemokraternas sätt att argumentera?”

ANF. 2LÖSNINGEN

Nuvarande validering är talar-oberoende: alla unika talare listas, blandas med ett fast frö, och 15 % läggs åt sidan i sin helhet innan träningen ens börjar. Ingen mening som en testad politiker någonsin sagt förekommer i träningsdatan.

Undanhållna talare
146
Andel av talarna
15 %
Träningsperiod
2015-2026
Anföranden i korpus
75 148
ANF. 3SIFFRORNA
ModellTräffsäkerhetMacro-F1
Nuvarande · talar-oberoende split0.6280.619
Radbaserad split (läckt)0.7760.775

Slumpbaslinje för 8-vägsklassificering: 0.125. Random Forest på samma korpus utan läckage landar i samma härad; 0.619 är alltså en verklig, försvarbar signal, inte brus.

En tidigare version korrigerade partiobalansen två gånger, både genom att översampla ovanliga partier och genom att vikta förlustfunktionen. Aggregerat syntes det knappt (macro-F1 0.595). Det syntes på korta meningar, där modellen föll tillbaka på de minsta partierna oavsett innehåll: »Stoppa invandringen!« lästes som V. Med en mekanism i stället för två läses samma mening som SD, med 95,9 %.

ANF. 4DATAN

Riksdagens protokoll är tvåspaltiga PDF:er. En naiv textextraktion läser rakt över kolumnerna och blandar ihop dem, och sidhuvuden (protokollnummer, datum) hamnar mitt i meningar. Parsern läser nu kolumnvis, känner igen och rensar bort återkommande sidhuvuden, och hanterar repliker (Anf. N X (Y) replik:) och talare utan partibeteckning korrekt, istället för att låta nästa anförande sluka det föregående.

Hela korpusen byggs om från källan med den fixade koden: 75 148 anföranden ur 2 970 protokoll, 2002-2026. Varje protokoll Riksdagen publicerat finns sparat lokalt, så korpusen är inte ett arv från tidigare körningar utan något som går att återskapa: ett kommando, utan nätverk, med samma resultat varje gång.

Det är inte en akademisk poäng. Radens id var länge protokoll_N där N var en räknare över det parsern råkade hitta, inte något som stod i dokumentet. När parsern lagades ändrades vilka anföranden som hittades, alla följande index sköts ett steg, och samma id kom att peka på två olika tal. Id:t är nu protokoll_talare_parti: det står i dokumentet och kan inte glida.