Runorna som fattas – ett pågående arbete med Vitkis sannolikhetsmodell
Många runstenar har ställen där runor har fallit bort. Vi bygger en modell som föreslår vad som stod där och säger hur säker den är. Här redovisar vi hur långt vi har kommit och hur modellen är prövad: sex prov med känt svar, kalibrerade procent och kontroller av koden. Modellen är ännu inte släppt i appen.
Nästan ingen runsten har klarat tusen år utan skador. Stenar har spruckit, flisor har lossnat och vittringen har ätit sig in i ristningen. Av de 2 633 vikingatida runstenarna i Samnordisk runtextdatabas har 1 087 minst ett ställe där en till fyra runor har gått förlorade.
När runologerna ger ut en sten fyller de ofta sådana luckor. De ifyllda runorna sätts inom hakparentes, som i GæiRf[as]tr. Hakparentesen säger att runorna inte syns på stenen. Den säger inte hur säker utgivaren var, eller vilka andra möjligheter som vägdes.
I Vitki bygger vi en modell som gör samma arbete på ett annat sätt. Den föreslår vad som stod i luckan, rangordnar förslagen och anger hur säker den är. Procenten är prövad mot luckor där svaret är känt, så att 90 procent ska betyda att förslaget stämmer ungefär nio gånger av tio. Här berättar vi hur långt vi har kommit, och vi redovisar varje prov, så att den som vill kan granska hur modellen är byggd och prövad innan den släpps.
Ett pussel med för få bitar
Den yngre runraden har bara 16 runor, men språket hade många fler ljud. Samma runa fick därför stå för flera ljud: ᚴ kunde vara k, g eller ng, och ᛁ kunde vara i, e, æ eller j. Ristarna satte inte heller alltid skiljetecken mellan orden. En runföljd kan alltså läsas på flera sätt redan när alla runor finns kvar. När några saknas blir möjligheterna ännu fler.
Så resonerar modellen
Ta Sö 45 som exempel. Enligt Södermanlands runinskrifter är stenen sprucken i tre delar. Det första namnet börjar med runorna kai på den nedersta delen och fortsätter med Rfastr på den övre vänstra. Där är staven i a "otydlig genom flinta", och av s finns bara "övre staven och mellanstreckets utgångspunkt, det övriga av runan är förstört genom en djup grop". Utgivarna läser GæiRf[as]tr. Modellen får se runorna kaiRf??tr, där de två frågetecknen är de förlorade runorna.
Först prövar modellen vilka ord som kan stavas med de bevarade runorna och två runor till. Sedan vägs varje förslag efter hur väl det passar där det står. Det är samma princip som när telefonen föreslår nästa ord: vissa ord brukar följa på vissa andra. Här står ordet först i texten, följt av ännu ett namn, Æistfari, och verbet ræisþu, 'reste'. Namnet GæiRfastr finns på flera andra stenar, till exempel Sö 227, Sm 111 och U 1144, så modellen känner det. Några spår av runorna har vi inte lagt in här.
Svaret blir GæiRfastr med 95 procent och GæiRfriðr med 1. Det första förslaget är samma namn som utgivarna skrev in. Modellen har inte sett Sö 45:s egen text, för en sten läses alltid av en version av modellen som har tränats utan den.
Byggstenarna
Modellen är inte en enda stor maskin utan flera delar, och varje del går att pröva för sig. Flera av dem är beprövade metoder från språkteknologin. Språket lär sig modellen ur alla slags vikingatida inskrifter, inte bara runstenarna, eftersom det är detsamma på en amulett som på en sten.
- Stavningen. Modellen har lärt sig hur ljud skrevs med runor ur 27 218 par av huggna ord och deras normaliserade form, från 2 877 inskrifter. Stavningen skattas för varje tid och trakt, så att en sten från 900-talet inte läses som en från 1000-talet.
- Ordföljden. Hur ofta ett ord följer på ett annat räknas med en metod från taligenkänningen, Kneser–Ney-utjämning (Kneser & Ney 1995). Den ger också sällsynta ordpar en rimlig chans.
- Ordklasserna. Ord som står i liknande sammanhang grupperas automatiskt. Genitiverna hans, hennaR, sina och þæiRa hamnar i samma klass, utan att någon har talat om för modellen vad en genitiv är. Det hjälper den med ovanliga ord. Klasserna räknas fram med scikit-learn.
- Namnen. Många namn finns bara på en enda sten. Modellen bygger därför okända namn av förled, efterled och ändelse, stavade som ristarna stavade dem. Förledet Ragn- är till exempel huggit som rahn 17 gånger i Rundata.
- Grannstenarna. Namn som står på stenar inom en mil väger lite tyngre, eftersom samma familjer ofta reste flera stenar i samma bygd.
- Skiljetecknen. Ristarna skilde sig åt. De flesta satte skiljetecken mellan nästan alla ord, några mellan inga alls. Modellen skattar därför för varje sten hur ofta just den ristaren markerade en ordgräns, och låter det avgöra hur gärna den själv sätter en gräns där ristaren inte satte något tecken.
- Spåren. Syns en rest av en runa i skanningen eller i utgåvans beskrivning kan den läggas in. Spåret räknas som troligt men inte säkert, så att en felläst rest inte stänger ute rätt svar.
- Kalibreringen. Modellens egna procent var för höga, särskilt för namn. De justeras därför med en logistisk modell, samma princip som hos Platt (1999), olika för formelord, kända namn, namn som modellen själv har satt ihop och andra ord. Alla förslag i en lucka kalibreras tillsammans, och även "inget av förslagen" får en sannolikhet; förstavalet får ett eget avdrag, eftersom det valdes just för att dess sannolikhet var högst. Kalibreringen är skattad på tre slags luckor med känt svar, som vi beskriver nedan.
- Inget fusk. Materialet är delat i fem delar efter signum. En sten läses alltid av en modell som har tränats på de fyra andra, så att utgivarnas ifyllning aldrig läcker in. När en enda sten ska analyseras kan modellen också tränas på allt utom just den stenen.
Sex prov med känt svar
Ett förslag är bara värt något om man vet hur ofta det stämmer. Vi prövar därför modellen på sex sätt, alltid på stenar som den inte har tränats på. Varje prov svarar på en egen fråga:
- Läsprovet: läser modellen hela texter rätt, när den själv måste avgöra var orden börjar?
- Maskeringsprovet: kan den fylla runor som vi döljer i texter med känt svar?
- Det svåra maskeringsprovet: klarar den detsamma när svaret aldrig är ett formelord?
- Utgivarnas luckor: kommer den fram till samma ord som utgivarna där de har fyllt en lucka?
- De dokumenterade luckorna: träffar den rätt där runorna verkligen har fallit bort, men är kända från äldre avbildningar?
- Dateringsprovet: kan den säga när en text skrevs, bara ur språket?
Skalan går från 0 till 90 %. Källa: Vitkis prov med textmodel-18, i fem delar. Proven mäter olika saker och är svåra på olika sätt, så staplarna ska inte jämföras som en tävling.
Läsprovet. Modellen läser 808 inskrifter där svaret är känt, sammanlagt 10 669 ord, utan utgivarnas ordgränser. Den väljer samma ord som utgivarna i 84,3 procent av fallen och delar orden rätt i 94,6 procent. När den första versionen var klar i oktober låg siffrorna på 81 och 92 procent. Tre procentenheter kan låta lite, men det är ungefär 300 fler rätt lästa ord, och ungefär hälften av vinsten kom när modellen lärde sig bygga namn. De 808 inskrifterna är 698 runstenar, 84 andra stenar och 26 lösa föremål. På runstenarna väljer modellen samma ord som utgivarna i 85,2 procent av fallen och delar orden rätt i 95,4 procent. De lösa föremålen är svårast, med 56 och 71 procent.
Samma ord som utgivarna
Rätt delade ord
Skalan går från 0 till 100 %. Källa: Vitkis läsprov på 808 inskrifter (698 runstenar, 84 andra stenar och 26 lösa föremål) med 10 669 ord, i fem delar.
Maskeringsprovet. Här döljer vi runor i texter där svaret är känt och låter modellen fylla i dem. Saknas några runor inne i ett ord på en runsten ger den rätt ord i 76 procent av fallen. Saknas ett helt ord blir det 59 procent, för då finns inga runor kvar att gå på, bara orden runt omkring. I ett simulerat prov på runstenar, där hälften av varje förlorad runa syns, stiger andelen rätta hela ord till 84 procent, och den är fortfarande 77 procent när vart femte spår är felläst. Det provet är simulerat med rena runformer och visar vad spåren är värda i bästa fall.
Det svåra maskeringsprovet. Formelorden, som sten, reste och efter, är lätta att gissa. I det här provet döljer vi därför bara ord som inte hör till de 50 vanligaste. Då ger modellen rätt ord i 47 procent av fallen när några runor saknas inne i ordet, och i 9 procent när hela ordet saknas. Provet visar hur mycket formlerna hjälper, och hur svårt det är att gissa ett ovanligt ord utan spår. Det viktiga är att modellen vet om det, och det gör den nästan hela vägen: när den säger minst 95 procent har den rätt i 96 av hundra också här, mätt med samma regel som i utgivarnas luckor – räknar man i stället varje normaliseringsvariant som fel, som hakun mot hakon, blir det 92 av hundra. En reservation har provet dock lärt oss: i bandet 80–95 procent är modellen något för säker på ovanliga ord. Den påstår där i snitt 89 procent men har rätt i 84 av hundra. Den som fyller en lucka där svaret inte kan vara ett formelord bör läsa procent i det bandet med den marginalen.
Utgivarnas luckor. Vi prövar modellen på 565 luckor på 399 runstenar som utgivarna har fyllt. Modellen lämnar ett förslag i 544 av dem, och 85 procent av förslagen är samma ord som utgivarna valde. Formelorden blir rätt i 96 procent, namnen i 75 och övriga ord i 65 procent. Det provet är ändå lättare än verkligheten. Utgivare fyller helst luckor där svaret är givet och lämnar de svåra öppna, så luckorna de har fyllt är ofta de enkla.
De dokumenterade luckorna. Ett bättre prov finns i Rundata självt. Runor inom hakparentes är förlorade på stenen men kända från äldre avbildningar. De har fallit bort av fysiska skäl, inte för att de var lätta att gissa, och svaret är ändå dokumenterat. Vi gör varje sådan följd av en till fyra runor inne i ett ord till en lucka. På 361 sådana luckor på runstenar ger modellen rätt ord i 69 procent av fallen. Det är lägre än i de andra proven, och det är väntat: här ligger luckorna där skadorna råkade hamna, och resten av stenen är ofta också skadad. Det är det prov som mest liknar de luckor modellen ska användas på.
Dateringsprovet. Modellen kan också uppskatta när en text skrevs, ur stavningen och ordförrådet. Den läser texten med var och en av fyra tidsperioder, från 800-talet till 1100-talet, och väljer den där texten är mest sannolik. På 1 670 daterade runstenar väljer den rätt period i 59 procent av fallen. Att alltid gissa den vanligaste perioden ger 47 procent. Den hamnar högst en period fel i 95 procent. Det räcker inte för att ersätta stilgrupperna, men kan ge en första datering åt de stenar som saknar en.
Säger den 90 procent, menar den 90 procent
Det viktigaste är inte att modellen har rätt så ofta som möjligt, utan att dess procent går att lita på. En väderprognos som säger 70 procents risk för regn ska ha regn ungefär sju dagar av tio. Samma krav ställer vi på modellen.
Här var de dokumenterade luckorna avgörande. Med en kalibrering skattad bara på utgivarnas luckor stämde procenten där, men inte på de dokumenterade. När modellen sa ungefär 62 procent hade den rätt i bara 33 procent av fallen. Den var alltså för säker just där svaret var osäkert. Nu skattas kalibreringen på tre slags luckor tillsammans: utgivarnas luckor, de maskerade orden och de dokumenterade luckorna. Appen använder de dokumenterade luckornas nivå, eftersom de liknar verklig skada.
Kalibreringen gör mer än att justera siffror: modellen väljer numera det ord som får högst kalibrerad procent, inte nödvändigtvis språkmodellens eget förstaval. Ett ords procent kan aldrig gå om ett annat ord av samma ordklass, men ett formelord kan gå om ett hopsatt namn, eftersom hopsatta namn oftare är fel. I korsvaliderade prov höjde det valet andelen rätt ord från 69,1 till 69,9 procent på de dokumenterade luckorna och från 85,5 till 85,7 på utgivarnas.
Modellen säger under 50 %
Modellen säger 50–80 %
Modellen säger 80–95 %
Modellen säger minst 95 %
Skalan går från 0 till 100 %. Källa: 361 dokumenterade luckor på runstenar (runor kända från äldre avbildningar). Varje lucka har fått sin procent från en kalibrering som är gjord utan dess sten.
Staplarna i varje par ska vara lika långa, och i tre av de fyra nivåerna är de det. I mellanregistret, där luckorna är få, är modellen fortfarande något för säker. Det genomsnittliga avståndet mellan vad modellen säger och hur ofta den har rätt, det mått som kallas kalibreringsfel, sjönk på de dokumenterade luckorna från 14,4 till 3,4 procentenheter. När modellen säger minst 95 procent har den rätt i 99 procent av fallen. Det gäller 165 av de dokumenterade luckorna.
Vi prövade också kalibreringen där den inte hade fått se svaren. I det svåra maskeringsprovet, som inte ingick när den skattades, sjönk kalibreringsfelet för luckor inne i ord från 17 till 4,8 procentenheter. I utgivarnas luckor kommer modellen till samma ord som utgivarna i 99,6 procent av de fall där den säger minst 95 procent. Och i läsprovet skilde sig modellens egna procent för orden i snitt 8,8 procentenheter från hur ofta den faktiskt hade rätt; efter kalibreringen är skillnaden 0,6 procentenheter.
Kontrollerad i detalj
Ett verktyg som ska användas i forskning måste gå att lita på också i de delar man inte ser. Vi har därför kontrollerat modellens räkningar mot oberoende program och mot sig själv:
- Ordföljden räknas exakt som i NLTK, ett vanligt bibliotek för språkteknologi. Den största skillnaden på 3 000 ordpar är 10⁻¹⁶, alltså inget annat än avrundning.
- Kalibreringen ger samma resultat som scikit-learn. Vi prövade också en annan metod, isoton kalibrering, men den gav sämre resultat och används inte.
- Den snabbare uträkningen. För varje förslag i en lucka läste modellen förut om hela texten. Eftersom ett ord aldrig går över ett skiljetecken räcker det att läsa om gruppen kring luckan. Den nya uträkningen ger samma svar som den gamla, med skillnader på högst 10⁻¹⁴, och är 4,7 gånger snabbare.
- Stenar med många luckor. När luckornas förslag ger fler än 256 kombinationer söker modellen fram den bästa lucka för lucka. På U 512, med nio luckor, gav det samma svar som att pröva alla kombinationer.
- Automatiska tester. 32 tester körs vid varje ändring av koden.
- Allt är öppet. Koden, proven och siffrorna finns på GitHub, och metoden beskrivs i METHODS.md, avsnitt 8.1.
Ett blindtest, låst i förväg
Alla siffror ovan kommer från prov som vi själva har byggt och läst av under arbetets gång. Ingen teststen ingår någonsin i sin egen modell, men den som bygger ett verktyg kan ändå omedvetet forma det efter sina testdata. Därför avslutade vi med ett blindtest enligt ett förregistrerat protokoll. Population, dragningsregel, inställningar, mått och godkäntgränser skrevs ned och låstes i versionshistoriken innan en enda lucka fylldes, och dragningens slumpfrö är registreringens egen kontrollsumma – urvalet kan alltså inte ha valts i efterhand. Ur 197 runstenar med dokumenterade luckor, där varje sten som någonsin förekommit i våra artiklar, skanningar eller fallstudier var bortplockad i förväg, drogs 14 stenar med 21 luckor. Det låsta kravet: mellan 10 och 18 rätt av 21 vore förenligt med riktmärket, testet körs en gång, och resultatet redovisas vad det än visar.
Modellen valde utgivarnas ord i 16 av 21 luckor, 76 procent – mitt i det låsta intervallet. Alla 13 luckor där den påstod minst 95 procent blev rätt. Och fyra av de fem missarna bar modellens egen varning, med påståenden under 45 procent: spaka där utgivarna läser sammansättningen malspaka, gissningar på 14 procent där svaret är ortnamnet svanaby och det sällsynta namnet liðsvaldr. Den enda halvsäkra missen är värd att citera som den är: i Sm 121:s ---ur föreslog modellen faður, "fader", med 77 procent – utgivarna läser moðurbroður, "morbror". Protokollet, urvalet och varje luckas utfall ligger orörda i versionshistoriken på GitHub.
Sö 206: en enda runa avgör
Sö 206 står vid Överselö kyrka. Inskriften lyder i utgåvans översättning: "Här skall stånda stenarna dessa, av runor röda, reste dem Gudlög efter sina söner, och Hjälmlög efter sina bröder." Två ställen är skadade.
I det första ordet, ru?niR, är runan enligt utgåvan "helt borta, därigenom att en flisa av stenytan fallit av". Modellen har två huvudförslag: Hrungnir, namnet på en jätte i Eddan, och roðnir, 'rödfärgade', som är utgivarnas läsning. Språkmodellen själv föredrar jätten, med 60 procent mot 27. Men i prov med känt svar visar sig sådana förstaval ofta fel, och efter kalibreringen återstår 26 procent för Hrungnir och 18 för roðnir – resten lämnas öppet. Språket ensamt avgör alltså inte saken.
Skillnaden mellan förslagen är en enda runa. roðnir skrivs med þ och Hrungnir med k, rukniR. Om skanningen hade visat en rest av den ena eller den andra skulle frågan nästan vara avgjord.
På Sö 206 finns ingen sådan rest, för flisan är borta. Utgivarna avgjorde i stället saken med betydelsen. Elias Wessén skriver i utgåvan att det är "icke möjligt att genom insättning av någon annan runa än þ få ett ord, som ger en förnuftig mening i sammanhanget". Han nämner att Hallström hade invänt mot läsningen i Fornvännen 1931, men avfärdar invändningarna som "en alltför långt driven skepsis". Modellen räknar med ord och ordföljd, inte med mening. Det den tillför är att visa exakt vad avgörandet vilar på: en enda runa, och betydelsen.
I det andra skadade ordet, k???auk, finns enligt utgåvan bara de nedre delarna av staplarna i tre runor kvar, "men läsningen är säker på grund av Sö 208". På den stenen, vid samma kyrka, står Guðlaug och Hjalmlaug tillsammans. Sö 208 ligger i samma provdel som Sö 206, och därför har den vanliga modellen inte sett den. Den ger inget förslag mer än 11 procent: Guðlaug 11, Gíslaug 8 och kumbl 6 procent. Den säger alltså att den inte vet. När en enskild sten ska analyseras på riktigt tränas modellen därför på allt utom just den stenen, så att den ser systerstenarna men aldrig stenens egen text.
Alla runstenar med luckor
Vi har låtit modellen läsa alla 1 087 vikingatida runstenar som har luckor på en till fyra runor. 58 av dem har färre än fyra läsbara runor och kan inte läsas. De andra 1 029, med sammanlagt 1 910 luckor, läses i fem delar samtidigt på en vanlig dator, och körningen tar ungefär 25 minuter. Den första körningen tog betydligt längre tid; den snabbare uträkningen ovan har kortat den. Samtidigt läste modellen 247 inskrifter på andra stenar och lösa föremål, med 476 luckor, men dem räknar vi inte med här.
Skalan går från 0 till 60 %. Källa: Vitkis körning av textmodel-18 på alla vikingatida runstenar i Rundata med luckor på 1–4 runor, också fragment och försvunna stenar.
I 18 procent av luckorna är modellen minst 95 procent säker. I 56 procent är den under 50 procent, och där ger den en lista med flera förslag i stället för ett svar.
Mest intressant är jämförelsen med utgivarna. Bland luckorna på svenska runstenar som utgivarna har fyllt säger modellen minst 95 procent i 267 av 555. Bland dem som utgivarna har lämnat öppna gör den det inte i någon av de 70. Där runologerna inte kunde avgöra saken påstår sig modellen alltså aldrig veta. Så vill vi att den ska fungera.
I 108 luckor står orden utan skiljetecken, och förslaget ändras om man delar orden som utgivarna gör. Där visar modellen båda förslagen.
Varför det spelar roll
- Säkerheten syns. En hakparentes visar att något är ifyllt. Modellen visar också hur säkert det är och vilka andra möjligheter som finns, med procent som är prövade mot facit.
- Samma måttstock för alla stenar. Alla 1 910 luckor på runstenarna är lästa efter samma regler. När modellen förbättras, eller när en ny läsning kommer, kan allt räknas om.
- Den visar var man ska titta. På Sö 206 hänger allt på om en rest av þ eller k finns kvar. Med 3D-skanningar kan sådana ställen granskas med en halv millimeters noggrannhet.
- Allt är öppet. Koden, proven och siffrorna finns på GitHub, så att vem som helst kan pröva om dem.
Liknande verktyg har byggts för grekiska inskrifter, där modellen Ithaca föreslår förlorade bokstäver (Assael m.fl. 2022). Vitkis modell är byggd för runornas egna svårigheter: den tvetydiga stavningen, de många namnen och spåren i skanningarna. Den ersätter inte runologen. Den ger runologen en andra bedömning som går att räkna på.
Innan modellen släpps
Det återstår arbete innan modellen kommer ut i appen:
- Spår ur skanningarna. I dag räknar modellen bara med spår som någon har lagt in för hand, men läsaren som ska hämta dem direkt ur 3D-skanningen är på god väg. Bistavarna, som skiljer runorna åt, går inte att lita på i de uttunnade spårlinjerna – de läses nu i stället ur själva djupbilden, viktade efter hur djupt de är huggna. I ett första prov på 17 skannade stenar, där hela ord maskerades och fylldes av en modell som aldrig sett stenen, steg andelen rätt från 53,5 till 59,9 procent när skannerns spår fick hjälpa till – och med spåren slumpvis omflyttade mellan stenens runor försvann hela vinsten. Det är alltså stenen som läses, inte en räknelek. Vid svårt vittrade partier kan spåren vilseleda, så panelen visar vad skannern ser – bistavarna med huggdjup och de möjliga runorna – och spåren räknas först när användaren har bekräftat dem. En runa med fler djupa bistavar än någon runa har, en möjlig bindruna, föreslår inget alls.
- Namnen. Namn blir rätt i 75 procent av utgivarnas luckor, mot 96 för formelord. De flesta fel i de dokumenterade luckorna gäller namn. Den senaste versionen tog ett steg just här: namnbyggarens förslag föll tidigare bort ur kandidatlistan innan de hann vägas, och när de fick en egen plats (textmodel-18) vann modellen åtta maskerade luckor – bland dem namnen Guðfastr och Þormóðr – utan att förlora någon.
- Fler texter från Danmark och Norge, så att måttstocken blir lika rättvis för alla länder.
- Böjningen. Modellen kan inte kasus och kongruens. Det gäller dock bara omkring ett ord av hundra i läsprovet, mest namn i fel kasus. Det mesta av det som ser ut som fel form är i stället olika normaliseringar i Rundata, som sin och sinn.
- Facit. Utgivarnas ifyllning är själv en bedömning. Maskeringsprovet och de dokumenterade luckorna har säkrare facit.
När detta är på plats kommer modellen ut i panelen Läsning och luckor på varje inskrifts sida i Vitki.
Den andra modellen: hur språklik är en runföljd?
Vitki har också en mindre modell som mäter hur mycket en runföljd liknar språk. Den använde vi i artikeln Tyde den som kan för att dela de otolkade inskrifterna i runrader, trasigt språk och följder som inte liknar språk. Också den har förbättrats genom prov som först gick fel. Korta, trasiga bitar såg obegripliga ut bara för att de var korta, så nu jämförs varje inskrift med riktiga texter som klippts i exakt samma längder. Danska och norska fragment mättes först mot en mest svensk måttstock; nu jämförs de med texter från samma land. Runraden på DR EM85;470C, fuþrkhainsl, bedömdes först som "inte språk" eftersom den avviker från den vanliga ordningen; nu känns också runrader med avvikelser igen. Och Rundatas alternativa läsningar räknas inte längre som en del av texten. Varje ändring står i koden.
Så gjorde vi
- Data: Samnordisk runtextdatabas (Rundata). Modellen lär sig av alla 3 662 vikingatida inskrifter med translitterering och normalisering och av Eddans ordförråd. Proven och körningen redovisas för de 2 633 runstenarna, också fragment och försvunna stenar. Andra stenar och lösa föremål nämns för sig (utdata/modellartikel/runstenar.py).
- Läsprovet: scripts/runlm_calibrate.py, på 808 inskrifter där Rundatas ord täcker den huggna texten exakt. Materialet delas i fem delar efter signum.
- Maskeringsproven: scripts/runlm_restore_test.py, 1396 dolda luckor på runstenar, och med --hard bara ord utanför de 50 vanligaste. Spåren i det simulerade provet är ritade med typsnittet Apple Symbols.
- Utgivarnas luckor: scripts/runlm_gaps.py. Samma ord i annan böjning eller normalisering räknas som samma ord.
- De dokumenterade luckorna: scripts/runlm_documented_test.py. Runor inom hakparentes görs till luckor, och facit är de dokumenterade runorna och Rundatas normalisering.
- Kalibreringen: scripts/runlm_gap_calibrate.py, med alla tre slagen av luckor och korsvalidering där hela stenar hålls utanför.
- Dateringsprovet: scripts/runlm_dating.py, på 1 670 daterade runstenar.
- Körningen över alla stenar: scripts/textmodel_batch.py. Jämförelsen med utgivarna görs i utdata/modellartikel/batch_status.py.
- Sö 206 med spår: modellens svar när bara þ, eller bara k, är tillåten i luckan (src/textmodel.py, med spåren som troliga).
- Bilderna: Sö 45 i strykljus, beräknad i Vitki. Sö 206 exporterad i hög upplösning ur Vitki. Illustrationerna är ritade med utdata/modellartikel/figurer.py.
- Hela metoden: METHODS.md, avsnitt 8.1.
Om skanningarna
Sö 45 och Sö 206 skannades av Laila Kitzler Åhfeldt vid Riksantikvarieämbetet inom forskningsprojektet Runristandets dynamik (2009–2014), med en skanner som mäter ytan med strukturerat ljus. Bara de ristade ytorna är skannade. År 2024 publicerade hon skanningarna av 35 sörmländska runstenar fritt på Zenodo, med licensen CC BY 4.0. Vi använder filerna So 45_1_4 thin_closed holes.stl och So 206_thin03_closed holes.stl som de är publicerade. Bilden av Sö 45 är beräknad i Vitki, och bilden av Sö 206 exporterade Viktor Kvant ur Vitki i hög upplösning. Hennes egna studier av skanningarna finns i Kitzler Åhfeldt 2015 och 2017. Vi tackar för att datamängden har gjorts fritt tillgänglig.
Källor
- Kitzler Åhfeldt, L. 2024. 3D-data Runstenar i Södermanland [Dataset]. Riksantikvarieämbetet. doi:10.5281/zenodo.11951255. CC BY 4.0.
- Kitzler Åhfeldt, L. 2015. Rune Carvers and Local Mobility. Viking and Medieval Scandinavia 11, s. 143–182.
- Kitzler Åhfeldt, L. 2017. Runristare och mobilitet i Södermanland. Rapport. Stockholm: Riksantikvarieämbetet.
- Samnordisk runtextdatabas (Rundata), Institutionen för nordiska språk, Uppsala universitet. Open Database License.
- Brate, E. & Wessén, E. 1924–36. Södermanlands runinskrifter (Sveriges runinskrifter 3). Stockholm: KVHAA. Digitaliserad av Riksantikvarieämbetet. Sö 45 på s. 34 f., Sö 206 och Sö 208 på s. 181 ff.
- Kneser, R. & Ney, H. 1995. Improved backing-off for M-gram language modeling. Proceedings of the 1995 International Conference on Acoustics, Speech, and Signal Processing 1, s. 181–184.
- Bird, S., Klein, E. & Loper, E. 2009. Natural Language Processing with Python. Sebastopol: O'Reilly. (NLTK)
- Pedregosa, F. m.fl. 2011. Scikit-learn: Machine Learning in Python. Journal of Machine Learning Research 12, s. 2825–2830.
- Platt, J. 1999. Probabilistic outputs for support vector machines and comparisons to regularized likelihood methods. I: Smola, A. m.fl. (red.), Advances in Large Margin Classifiers. Cambridge, MA: MIT Press, s. 61–74.
- Assael, Y., Sommerschield, T., Shillingford, B. m.fl. 2022. Restoring and attributing ancient texts using deep neural networks. Nature 603, s. 280–283.
