En av många uppgifter jag har på jobbet är att hålla mig ajour med omvärldens utveckling och hur denna utveckling förhåller sig till/påverkar oss. Detta innebär mycket läsande, skummande, annoterande osv. Allt med målsättningen att identifiera sådan information, eller data, som kan påverka hur vi valt, eller väljer, att dimensionera våra skyddsåtgärder. En viktig källa till sådan här information är givetvis öppna källor. Och här i ligger också problemet.

Det finns vääääldigt mycket att läsa, analysera, ta ställning till och kasta bort. Ensam skulle jag kanske kunna klara av att bearbeta (i begränsad omfattning) ett hundratal artiklar per dag. Kanske fler om detta vore det enda jag gjorde varje dag, men så är inte fallet. Svårigheten ligger egentligen inte i mängden artiklar, utan att hitta de som är relevanta. Relevanta för någon given målsättning (eller underrättelse-inriktning).

Första steg mot en lösning

För någon vecka sedan tog jag ett första steg mot att adressera denna problematik genom att studera, programmera och tillämpa lite maskininlärning. Det jag ville försöka göra är att programmera ett system som kan inhämta information från olika källor, men exempelvis RSS (tänk Feedly). Tanken är sedan att systemet läser in artiklarna, presenterar dem i ett webbgränssnitt som sedan ger mig möjlighet att kategorisera utifrån innehåll. Systemet skulle kunna få föreslå ett antal kategorier utifrån de viktigaste orden i dokumentet, eller kanske genom en textmässig sammanfattning som gör det enkelt för mig att välja kategori. Detta är alltså en supervised maskininlärning.

Unsupervised

Efter den inledande träningen som jag antagligen kommer behöva göra för ett antal tusen dokument/artiklar tar jag nästa steg mot en mer unsupervised maskininlärning. Tanken är då att arbeta mer med liknelser osv. Synonymer av ord, eller där den semantiska meningen är liknande andra artiklar.

Lite mer tekniskt

Specifikt implementerade jag (för att förstå hur det fungerar) TF-IDF algoritmen i kombination med cosine similarity. Detta är dels en enkel algoritm, men samtidigt en kraftfull. Cosine similarity ger mig en matris av hur alla dokument förhåller sig till varandra, hur lika de är. Detta gör att jag snabbt kan jämföra ett dokument med en grupp av dokument få ett värde på hur lika de är.

Tanken är sedan också att använda Naive Bayes för att räkna fram sannolikheten att ett givet dokument tillhör en specifik kategori vilket framförallt fungerar med väldigt lite input. Det är inte massa deep learning med RNNs vilket givetvis skulle vara jättehäftigt att få prova på. Men jag tycker det känns viktigare att ta små steg och förstå problembilden och sedan hur jag eventuellt skulle kunna tillämpa mer avancerade metoder/algoritmer för min utmaning om det är nödvändigt.

Allt är skrivet i python och jag använder sklearn, pandas och numpy för delar av uträkningarna. I övrigt bara en massa standard komponenter.

Just det… kanske borde säga att jag kommit så långt att jag har ett fungerande program för att läsa in dokument, analysera, göra lite beräkningar och spotta ut en matris (cosine sim.). Det jag behöver göra nu är att bygga webb-applikationen för att enkelt kunna presentera artiklar och visa några knappar för att kategorisera och ”träna” upp algoritmen. Och sedan blir det till att förfina all preprocessing som att ta bort stoppord, lemmatisera ord och kanske börja extrahera lite sentiment för att göra bättre analyser. Men… ett steg i taget.

TL;DR

Jag ansvarar för omvärldsbevakning. Det finns mycket att läsa. Jag orkar inte läsa allt. Jag bygger ett system för att hjälpa mig läsa mer. Systemet klassificerar artiklar enligt innehåll och är tänkt att ta bort artiklar som upprepar samma sak samt hjälper till att fokusera inhämtning av OSINT.

Tankar, funderingar eller nyfikna frågor?