Ämnen i SOUniversum 3 – Topic Modelling

Det regnar ute och jag funderar på olika sätt som man kan behandla SOU-materialet på. För hundra år sedan skrevs en utredning på en skrivmaskin och nu ska jag behandla den med ett dator som är designad i Kalifornien och byggd i Taiwan. Om vi någonsin har varit moderna går det att snabbspola denna modernitet i gigahertz-hastighet.

En metod som har blivit populär inom digital humaniora är ”topic modeling”, som beskrivs av Journal of Digital Humanities som:

Topic modeling is a form of text mining, a way of identifying patterns in a corpus. You take your corpus and run it through a tool which groups words across the corpus into ‘topics’. Miriam Posner has described topic modeling as “a method for finding and tracing clusters of words (called “topics” in shorthand) in large bodies of texts.”

Mitt ursprungsläge präglas av skepsis. Varför ska vi använda maskininlärning på ett material som redan är systematiserat, kategoriserat och strukturerat av författarna. En SOU har ju en rubrik, innehållsförteckning, sammanfattning, osv., och har noggrant skrivits fram enligt rådande konventioner. Stopp och belägg! Åter till humaniora som det alltid har varit.

Men skepsis är en i grunden reaktiv affekt. Vi har ju redan datorerna i våra knän, varför inte experimentera och se vad som händer?

Jag började med att ladda ned programmet Mallet och följde sedan en välskriven installationsanvisning för samtliga operativsystem. Jag körde sedan några tester på engelska textkorpus för att få lite känsla för vad programmet gjorde. Denna teknologiska hermeneutik präglades av fullständig blackboxing till en början. Ofta är det ju så vi gör med teknologier som vi tror är ”verktyg”. Vi använder dem med en lätthet tills de inte gör som vi vill.

Problemet med SOUerna är ju att de innehåller massa brus och artefakter från inskanning och konvertering till text. Jag har fortfarande inte klurat ut hur detta ska lösas, men så länge kan man ”fuska” sig fram litegrann, för att få en helhetsbild.

Som testobjekt valde jag SOU 1924:35 Ylleindustriens produktionsförhållanden. Inget slår modernitetsångesten när det regnar. Man tänker på de där fabrikerna som nu huserar designbyråers kontor, men som en gång i tiden höll textilarbetare inspärrade vid dånande maskiner. Nu utvecklar man istället appar i dessa fabriker.

För att ta en genväg (som inte håller rent lingvistiskt) runt allt brus som finns i textfilen av denna SOU, valde jag att bara inkludera ord som är längre än fem tecken. Ett exempel på hur man kan göra detta är:


ag -o '\b[\wåäöÅÄÖ]{5}(.*?)\b' Ylleindustriens\ produktionsförhållanden\ -\ SOU\ 1924\:35.txt > ylle.txt

(byt ut ag -o mot grep -Eoi om du bara har det senare installerat)

Jag vet inte om man får göra så här. Om någon lingvist läser, kommentera gärna. Men nu har jag iallafall filen ylle.txt, som består av långa ord från hela SOUn. Här kan man läsa intressanta ord, exempelvis ”vicuñageten”. Här är en bild på ett sådant djur:

Vicugna-ESO

Därefter är det dags att använda Mallet. Jag lägger filen ylle.txt i en ny katalog och börjar med att bygga ett korpus:


./bin/mallet import-dir --token-regex '[\p{L}\p{M}]+' --input /home/anon/Desktop/ylle/ylleord/ --output ylle.mallet --keep-sequence --remove-stopwords

(observera att om ni använder windows ska ni inte skriva ./ i början, samt byta ut katalogstrukturen till motsvarigheten på erat system)

Jag vet inte riktigt vad jag gör här. Men --token-regex '[\p{L}\p{M}]+' ska iallafall göra det lite snällare för icke-engelsk text. Men nu har jag i alla fall korpuset ylle.mallet. Därefter är det dags för själva topic modelingen. Jag kör:


./bin/mallet train-topics --input ylle.mallet --num-topics 10 --output-state topic-state.gz --output-topic-keys ylle_keys.txt --output-doc-topics ylle_composition.txt

Jag väljer här att Mallet ska sammanfatta tio topics. Denna variabel går att öka och minska efter smak. Ur detta får jag dels tio olika topics i filen ylle_keys.txt samt en beräkning på hur hög täckningsgrad varje topic har i filen ylle_composition.txt. Här kan man se att topic 9 har den högsta sammanfattningsgraden (undrar om man kan säga så) på ungefär 12% (vet inte vad det betyder riktigt). Detta ämne lyder:

ylleindustrien bomullsindustrien kombinerade produktionskostnader produktion inventarier förbrukning totalkostnad sydamerikansk kapitalkostnaderna framträdande rörelsekapital importerat tillverkningar kamylleindustri uppdelning spridningen undersökningen sydamerikanska

Nästa ämne är topic 4 som lyder:

sammanlagt kamyllevä kardylleindustrien innehåller utredningen egenskaper produktionsf löngodsfabriker konsumtion tillverkningen kardyllebranchen beräknats resultatet världskriget spinnerier noteringar rentvättad kortulliga verkställd

Maskinen har arbetat. Jag vet inte riktigt vad jag har gjort.

Hur går jag vidare med detta? Skulle det vara intressant att göra en liknande analys av hela SOU-materialet? Finns det något mindre brutalt sätt att göra filerna rena och snygga och anpassade till svenskt alfabet och svenska stoppord? Blir vi bildade av denna kunskap eller är detta ett intellektuellt förfall? Kommentera!

Uppdatering: Sverker Lundin har gjort en liknande analys men med flera topics. Läs här!.

Uppdatering 2: Ändrade och uppdaterade efter att ha anpassat till svenska tecken, se kommentaren nedan.

6 svar på “Ämnen i SOUniversum 3 – Topic Modelling”

  1. Hej Christopher,
    det ligger i min pipeline att göra TM (Topic Modelling) på ditt SOU-material. Jag har satt ihop ett litet verktyg i Mathematica som fungerar som gränssnitt till MALLET. Jag har skapat ett ”kommando” där jag i Mathematics syntax kan skriva:

    {wp,dp}=TopicModel[data, Topics->40, Iterations->1000, Stopwords->ls]

    som genererar en datamängd med topicsarna och en datamängd som säger hur mycket av varje topic som finns i varje dokument.

    Jag går igång med att testa detta nu. Datorer vill ju ofta krångla, och det här materialet är lite större än de jag jobbat med tidigare, så jag är inte säker på att det kommer att funka rakt av. Men i bästa fall kan jag återkomma ikväll.

  2. Sverker: Grymt! Det här var första gången jag testade TM och jag vet inte riktigt vad jag gjorde. Men intuitivt känns det som att man skulle kunna få fram något intressant om man lyckades visualisera eller begripliggöra vissa förändringar i ”topics” över tid. Till exempel, hur har man diskuterat arbetsmarknaden, skolpolitiken, sjukvården etc. över tid. Dessa återkommande utredningsämnen säger ju mycket om vår historia tänker jag.

    1. http://cdh.blogg.gu.se/2015/06/06/en-borjan-till-kartlaggning-av-souniversum-100-amnen-pa-1990-talet/

      Superkul detta! Det finns alltid så mycket som borde berättas om den här sortens arbete. Jag orkade inte det nu, utan vill bara visa resultatet med minimal kommentering. Jag har fått jobba igenom mitt verktyg lite och kommer nog kunna köra på hela materialet inom ganska kort.

      OBS att jag är rätt ovan vid både blogg och twitter så påminn mig gärna om det verkar vara så att jag missat något…

      /Sverker

  3. Det verkar som dina verktyg struntar i vissa tecken (t.ex. åäö), har du dina texter i UTF och arbetar dina verktyg med UTF?

  4. As: felet ligger i det reguljära uttryck jag använder för att hämta ord. Det är \w som spökar med svenska tecken.

    Testa:

    ag -o '\b[\wåäöÅÄÖ]{10}(.*?)\b' Ylleindu... så får du med åäö.

    (uppdaterade bloggposten)

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *

Time limit is exhausted. Please reload CAPTCHA.