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  

Hur bestäms bankernas marginaler?

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

Finansinspektionens statistik om bankernas bolånemarginaler är intressant. Marginalen har nämligen varierat mellan som lägst 0,2 procentenheter och som högst 1,8. Det är uppenbart att bankerna inte kontrollerar marginalerna - frågan är bara vilka krafter som styr? Min spekulation som ekonom är att marginalerna bestäms av restriktionerna på bankernas utlåning. Man kan tänka sig två lägen - i det första försöker bankerna låna ut så mycket som möjligt och är inte begränsade av lagar och …

Läs mer!

Med svenskt euromedlemskap hade det slutat illa

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

En artikel i Ekonomisk Debatt som jämför den hypotetiska situationen där Sverige hade gått med i eurosamarbetet 2003 med den verkliga situationen - alltså att vi stod utanför - visar att det hade gått riktigt illa under finanskrisen om vi hade valt att gå med. Det är nationalekonomen Björn Olsson som i en analys målat upp de två scenarierna och konstaterar att tillväxten hade varit betydligt lägre vid ett medlemskap. Enligt skattningarna skulle tillväxten varit 0,7 procent per år (2003-2017…

Läs mer!

Dags att bolla över till rättsväsendet

Den hälsosamme ekonomisten

Efter ytterligare några dödsskjutningar och sprängdåd i Malmö rasar oppositionen. "Regeringen måste göra något!" Fast det är ytterst oklart vad regeringen kan göra. Man kan anslå mer resurser till rättsväsendet, men om de högsta juristerna dömer ut anmärkningsvärt låga straff, prioriterar fel och tillämpar särdeles höga beviskrav ter sig … Läs mer!

Tre frontfigurer som möjliggjorde murens fall

Den hälsosamme ekonomisten

Det är framför allt tre personer som möjliggjorde att Berlinmuren småningom föll - två amerikanska presidenter och en svensk statsminister. Jag tänker då givetvis på John F Kennedy  som vid rådhuset i Schöneberg , yttrade de klassiska orden: "Ich bin ein Berliner". Sedan kom Ronald Reagan  som 1987 framför muren sade: "Mr Gorbatjev, tear down … Läs mer!

Men visst är det ett problem med lösa terrorister

Den hälsosamme ekonomisten

Det kan knappast ha undgått någon att sju terrorister nyligen har släppts lösa i Sverige. Men vad misstänktes de för? Det bör oroa oss att en av dessa personer införskaffat hundratals kilogram med kemikalier som rimligen skulle användas för att sätta ihop bomber. Målet tycks ha varit Stockholms Central .  I tingsrätten dömdes terroriste… Läs mer!

OECD tar ett steg mot globala minimiskatter

Den hälsosamme ekonomisten

OECD har nu presenterat principerna för minimiskatter för globalt verksamma företag. Arbetet sker i relativ enighet - i vetskapen att alternativet antagligen är att vissa länder går före och etablerar egna skatter på internationellt aktiva företag. Det är ännu oklart vilka nivåer skatterna kommer att hamna på. OECD skriver i ett uttalande … Läs mer!

11 000 forskare kan inte ha fel

Den hälsosamme ekonomisten

I går presenterade Sveriges Television nyheten om att 11 000 forskare undertecknat ett klimatupprop med krav på att någon måste göra något väldigt snabbt. Det mest konkreta förslaget i artikeln är att vi bör satsa på att begränsa barnafödandet. Jag antar då att det inte handlar om barnafödandet i vår del av världen, utan i de delar av … Läs mer!

Parisavtalet det största miljöhotet

Den hälsosamme ekonomisten

Det glädjer mig att USA lämnar Parisavtalet . Skulle vilja utnämna avtalet till det största miljöhot som planeten står inför - om det nu är så att koldioxidutsläppen är ett miljöhot. Skälet är att avtalet konserverar en uppfattning om att ansvaret för koldioxidutsläppen är en nationell fråga - där varje nation ska få sina företag att minska … Läs mer!

Men ni har ju lagt ert eget material bakom betalvägg?

Den hälsosamme ekonomisten

Två Schibstedtchefer skriver i SvD om att de sociala nätverken bör ta ett större ansvar för desinformation som sprids. De glömmer dock bort att den kanske främsta orsaken till att nyheter förmedlas via Facebook är att DN, SvD och andra publikationer lagt sitt material bakom betalväggar. What's a girl supposed to do , liksom. Helst skulle … 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.

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