En modell för att bedöma textkvalitet

Den hälsosamme ekonomisten, Sunday 25 August, 2019
Bild: 2017-09/dsc01062.jpg

Har ägnat helgen åt att försöka lösa ett problem som antagligen är ganska vanligt när man programmerar. Frågan är hur man kan låta användare sätta betyg på något - i detta fall blogginlägg - och samtidigt låta datorn sätta betyg på hur bra användarna är på att sätta betyg?

Man kan tycka att detta borde vara Moment 22, men faktum är att sådana algoritmer ligger bakom kvalitetsuppföljning i många andra sammanhang. Ett exempel är den vetenskapliga världen, där peer-review innebär att de som har visat sig bra på att bedöma kvalitet tidigare upphöjs till domare för sina kollegor.

Även om processen fungerar riskerar den att leda till likriktning, eftersom normen blir genomsnittet av domarnas bedömningar. Man sållar fram en liten grupp som får en central roll för att avgöra vad som är kvalitet eller inte.

Började i lördags med att försöka hantera saken med matrisalgebra, men gav upp efter ett tag då det blir svårt och beräkningsintensivt att invertera matriser med väldigt många nollor. Fastnade i stället för en betydligt enklare algoritm (bifogar koden nedan).

Domarna får i det här fallet möjlighet att välja mellan godkänt och underkänt när de bedömer kvaliteten för olika blogginlägg. Rösterna registreras i en databas, där även alla användare och blogginlägg finns registrerade. Poängen för ett enskilt blogginlägg blir summan av alla domare som röstat för att godkänna inläggen multiplicerat med domarnas kvalitet. Poängen beräknas i den första funktionen blogscore nedan.

Nästa steg är att bedöma hur väl domarna har lyckats med att bedöma varje blogginlägg. För att ha en referens beräknas genomsnittspoängen för alla blogginlägg och en korrekt bedömning definieras som att domaren antingen godkänt ett inlägg som har högre poäng än genomsnittet eller att domaren har underkänt ett inlägg som har lägre poäng än genomsnittet. Jag använder det aritmetiska medelvärdet som referens här - man kanske egentligen borde använda medianen.

Som brukligt använder jag Ruby och Sinatra med databashanteraren Sequel. Det verkar som om algoritmen är stabil, jag har låtit den loopa 1000 gånger. Koden nedan är f ö bara en del av ett större projekt.

Nästa steg blir att koppla in AI. Som jag tidigare nämnt planerar jag att vektorisera alla blogginlägg med Doc2Vec hos Algorithmia för att se om inlägg som bedöms som "bra" ligger nära varandra i rummet när man mäter skalärprodukten. Genom att vektorisera texten kan man jämföra nya inlägg med befintliga bedömda inlägg. Det är ungefär samma algoritm som man använder för att upptäcka plagiat i skoluppsatser. Tanken är alltså att riktiga bedömare ska kunna lära datorn hur bra blogginlägg ser ut så att datorn själv ska kunna göra en preliminär bedömning.

Ytterst är tanken att göra det möjligt att samla text från många olika källor - via bloggars RSS-flöden - för att sätta ihop en högkvalitativ medieprodukt. Man skapar alltså en tidning, utan att behöva teckna avtal med alla tänkbara skribenter. Man kan likna det vid processen bakom en vetenskaplig tidskrift - men helt utan någon mänsklig redaktör. Algoritmer samlar ihop skribenter och via peer review upprättthålls en tillräcklig hög kvalitet i materialet. Samtidigt kan skribenterna få betalt för att bedöma andra skribenters texter genom att få företräde att publicera sina egna alster (ett slags annonser).

Det är förstås en bit kvar innan jag har hela strukturen klar. Men när jag är klar kommer jag säkert behöva hjälp med att testa programmet. Och om inte jag uppfinner det så lär någon annan göra det - tidningarna i dagens form lever på lånad tid.


# Beräkna poäng för blogginlägg (score är mellan 0 och 1)
def blogscore
  poster = DB[:blogposts]
  users = DB[:users]
  roster = DB[:votes]
  poster.each do | post |
    poang = 0.0
    raknare = 0
    roster.each do | rost |
      user = users.first(uid: rost[:uid])
      if rost[:slug] == post[:slug] then
        poang += user[:score] if rost[:vote]
        raknare += 1
      end
    end 
    score = (raknare == 0) ? 0 : poang/raknare
    poster.where(slug: post[:slug]).update(:score => score)
  end
end

# Beräkna poäng för en användare (score är mellan -1 och 1)
def userscore
  poster = DB[:blogposts]
  users = DB[:users]
  roster = DB[:votes]
  snittpoang = poster.avg(:score)
  puts snittpoang
  users.each do | user |
    # Nollställ poäng och räknare.
    poang = 0.0
    raknare = 0
    poster.each do | post |
      # Se hur användaren *user* röstat på blogginlägget *post*. Kan bli true, false eller nil.
      rost = roster.where(uid: user[:uid], slug: post[:slug]).first
      rost = rost[:vote] if !rost.nil?
      # Variabeln flag_korrekt ska vara true om användaren röstat godkänna när poäng är över snittet.
      if !rost.nil? then
        flag_korrekt = false # Default false
        flag_korrekt = true if (rost == true) && (post[:score] > snittpoang)
        flag_korrekt = true if (rost == false) && (post[:score] < snittpoang)
        poang += 1 if flag_korrekt
        raknare += 1
      end
    end 
    userscore = (raknare == 0) ? 0 : 2 * poang / raknare - 1
    users.where(uid: user[:uid]).update(:score => userscore)
  end
end  

Bidraget som är för krångligt att söka

Den hälsosamme ekonomisten
Bild: 2017-09/dsc01062.jpg

"Vi uppfinner ett bidrag som är så krångligt och integritetskränkande att söka att nästan ingen söker det." "Ja, lysande idé. Då blir det flera miljarder billigare." Man funderar på om det var så politikerna resonerade när bostadstillägget infördes. Intressant nog har många i målgruppen begränsad kognitiv kapacitet - antingen för att de är gamla eller för att de hade det från början och därför har sjukersättning. Det har aldrig funnits någon egentlig vilja att göra om de …

Läs mer!

Sverige har nu högre arbetslöshet än snittet i EU

Den hälsosamme ekonomisten
Bild: 2017-09/dsc01062.jpg

För mycket länge sedan utfärdade den Socialdemokraterna ett löfte om att Sverige år 2020 skulle ha EU:s lägsta arbetslöshet. Man har sedermera tagit tillbaka löftet, men ändå är det intressant att notera att Sverige sedan innevarande månad har högre arbetslöshet än snittet i EU. En stor del av denna arbetslöshet är strukturarbetslöshet - och handlar om att vissa personer bland annat har för dåliga språkkunskaper för att kunna anställas på reguljära arbeten. Nytt är att vi även börjar …

Läs mer!

Objektorientering handlar om oberoende

Den hälsosamme ekonomisten

Funderar på om samhället rent generellt kan lära sig av programmerare. När jag jobbade på Socialdepartementet slog det mig att lagstiftningen i väldigt stor utsträckning liknar ett datorprogram som måste hänga ihop logiskt. Den enda stora skillnaden är att det är jurister som tolkar lagen och kiselchip som tolkar datorprogrammen. Vissa skulle sä… Läs mer!

Regeringens kontantkortsförbud redan överspelat

Den hälsosamme ekonomisten

I syfte att stoppa brottslingar från att använda kontantkort kommer regeringen att stifta en lag som göra att den som köper ett kontantkort måste registrera sig. Förhoppningen måste ha varit att brottslingar inte längre ska kunna använda anonyma telefoner. Problemet är att den gamle hackaren Ygeman ligger flera decennier bakom den tekniska … Läs mer!

Partier och medier snart helt förstatligade

Den hälsosamme ekonomisten

Läser att de politiska partierna blir allt mer beroende av statligt stöd. Implikationen blir att partierna endast får ses som deltagare i offentliga tävlingar där priset beror på hur många väljare de lyckas attrahera. Problemet är att man i nästa tävling dopar vinnarna i den första tävlingen så att de med större sannolikhet ska vinna igen. Hur … Läs mer!

Arbetsförmedlingen det stora hindret för att få ett arbete

Den hälsosamme ekonomisten

Sitter med några marginaleffektsberäkningar framför mig och det slår mig att sådana här beräkningar görs utifrån helt fel premisser. För det första är det sällan någon som blir erbjuden ett bra jobb på den reguljära arbetsmarknaden tackar nej - det är inte där skon klämmer. Problemet är att så många av olika skäl inte är anställningsbara och att … Läs mer!

Riksbanken bör erkänna om man inte klarar av sitt uppdrag

Den hälsosamme ekonomisten

Läser att Riksbanken skyller den låga inflationen på arbetsmarknadens parter. Det är inget mindre än absurt. Inflationen är i första hand ett ansvar för Riksbanken. Om Riksbanken misslyckas måste regeringen gripa in. Och om regeringen misslyckas krävs det större systemreformer och kanske grundlagsförändringar. Men att inflationen blir låg … Läs mer!

Tysklands energipolitik inget föredöme för Sverige

Den hälsosamme ekonomisten

En ny rapport från McKinsey visar att Tysklands energipolitik har misslyckats på alla fronter. Man har inte lyckats nå målen för utsläpp av koldioxid, man har inte lyckats bygga ut överföringskapaciteten tillräckligt och nya energikällor står fortfarande för en ganska liten del av energiförsörjningen. Rationella Tyskland tycks ha havererat … Läs mer!

Är det viktigt att människor har ett jobb?

Den hälsosamme ekonomisten

Regeringen och samarbetspartierna har nu presenterat ett förslag som ger företag som anställer unga och utrikes födda reducerad arbetsgivaravgift - från 32 till 10 procent. Jag skulle vilja lyfta en större fråga - är det viktigt att till varje pris se till att människor har ett jobb? Om ett jobb som konstruerats på grund av att arbetsgivaren … Läs mer!

Om bloggen

Den hälsosamme ekonomisten är en blogg som handlar om sjukvårdens organisation, incitament och klassisk liberalism - allt skrivet ur ett ekonomistiskt perspektiv. Webbplatsen använder tredjepartskakor (cookies) från Disqus, Piwik, Facebook, Google och Twitter för att anpassa innehållet och annonserna till användarna, tillhandahålla funktioner för sociala medier och analysera vår trafik. Vi vidarebefordrar information om din användning av vår webbplats till de sociala medier och annons- och analysföretag som vi samarbetar med. Du kan läsa mer om webbplatsens kakpolicy här. Denna sida drivs med webbverktyget Bolt. Av Mattias Lundbäck.

VR och Vårdvalssidan

Den hälsosamme ekonomisten finns även tillgänglig i VR. Har man HTC Vive eller Occulus Rift når man hifi://ekonomism genom att först installera appen High Fidelity som ger tillgång till en stor mängd olika virtuella världar. Sedan skriver man bara "ekonomism" i Goto-fältet i HiFi. Fältet motsvarar adressraden i en vanlig webbläsare.

Besök gärna www.vårdval.se - det enklaste sättet att hitta och jämföra vårdgivare.

”Jag

Läs bloggkollegor

Anybodys Place Carl-Johan Westholm Cornucopia Danne Nordling Eskil Ullberg Fnordspottning Fredrik Malm Fredrik Segerfeldt Gustav Nipe Henrik Alexandersson Janerik Larsson Jonas Grafström Lennart Grundel Maria Abrahamsson Markus Uvell Mina Moderata Karameller Mattias Svensson Niclas Berggren Opassande Per Gudmundson Sjätte Mannen Tanja Bergkvist The Market Monetarist


Creative Commons-licens
Den hälsosamme ekonomisten av Mattias Lundbäck är licensierad under en Creative Commons Erkännande 4.0 Internationell licens.
Based on a work at https://www.ekonomism.us.

Sociala medier

Den hälsosamme ekonomisten är en blogg för dig som är intresserad av ekonomi, politik och teknik. Följ mig på Twitter för regelbundna uppdateringar. Läs mer om Den hälsosamme ekonomisten och Mattias Lundbäck här.


Linkonomism
Googelkonomism
Feedkonomism