Googles Panda-uppdatering börjar bli en aning uttjatat som ämne på både den här bloggen och andra.

Trots det tänkte jag efter att ha fått lite uppmuntran nöta den ett varv till och försöka se det ur ett nytt perspektiv med min i sammanhanget udda bakgrund som programmerare med åsikten att maskininlärning är bra mycket mer spännande än SEO, även om jag inte skulle påstå att jag är en expert inom något av ämnena.

Om vi väljer att tro på det Google själva säger – och det väljer jag att göra, annars vet vi inte ens om det finns en Panda-uppdatering, och då blir alla vidare diskussioner meningslösa – så vet vi följande om Panda:

  • Det är inte en egentlig uppdatering av algoritmen utan en egen algoritm som levererar en signal till den befintliga algoritmen.
  • Den är döpt efter en ingenjör, Navneet Panda, som har haft stor betydelse för utvecklingen av den.
  • Algoritmen står inte och tuggar kontinuerligt utan startas manuellt, oftast i samband med uppdateringar
  • Det är en maskininlärningsalgoritm som ska kunna skilja på ”bra” och ”dåliga” sidor.

Maskininlärningslösningar för att göra bedömningar av typen ”Är den här sidan bra eller dålig” ser något förenklat ut här:

  1. Ta fram en mängd exempel som manuellt är märkta med ”Bra” eller ”Dålig”. Varje exempel kan kallas instans.
  2. Hitta ett sätt att omvandla all information om exemplen till rader i en tabell. En kolumn kan exempelvis innehålla antal ord på sidan, färgen på bakgrunden eller om det finns en rubrik. En kolumn benämns signal.
  3. Mata in en del av exemplen i en algoritm som utifrån dessa skapar ett system för att kunna göra samma bedömningar.
  4. Testa systemet genom att göra bedömningar på de återstående exemplen och jämför med den manuella märkningen för att få ett mått på framgång.

Bedömningssystemet kan exempelvis vara en matematisk formel, ett beslutsträd eller en lista med regler. ”Bra” eller ”Dålig” är exempel på vad man inom maskininlärning kallar klasser och den uppgift jag precis har beskrivit benämns följaktligen klassificering.

Så här långt har jag hållit mig till fakta, men det som följer nu är till stor del mina egna gissningar och spekulationer blandade med försök att förklara teknik och teori som jag har en begränsad erfarenhet av.

Navneet Pandas är inte en person helt utan tidigare meriter. Söker man efter honom på den alldeles utmärkta tjänsten Google Scholar dyker det upp både publikationer och patent. Hans doktorsavhandling har titeln: “Scalable techniques for the application of machine learning to large datasets”. I avhandlingen behandlas metoder för att öka hastigheten i maskininlärningsalgoritmen ”Support Vector Machine” och det är långt ifrån enda gången den algoritmen dyker upp i Pandas publikationer.

En inte allt för långsökt gissning är att det är just den typen av teknik som Google med Pandas hjälp lyckats få sådan fart på att den är användbar för att bedöma hela internet.

”Support Vector Machine”, hädanefter förkortat SVM, är trots namnet inte en maskin så mycket som en algoritm för att ta fram och tillämpa ett bedömningssystem. I sin ursprungsform representeras alla exempel av vektorer i ett flerdimensionellt rum där varje signal utgör en dimension. Lösningen utgörs av det plan (egentligen hyperplan) som skiljer alla exempel ur de båda klasserna åt med maximalt avstånd till båda och hittas genom lösningen av ett kvadratiskt optimeringsproblem. Optimeringslära är inte mitt ämne och jag tänker inte gå in närmare på detaljerna än att nämna att lösningen innehåller en del multiplikationer av vektorer. Även i klassificeringen av nya instanser behövs multiplikation av vektorer.

Den här algoritmen fungerar givetvis bara om det finns en linjär lösning som delar de båda klasserna men om det inte finns så behöver man inte ge upp. Man kan fortfarande använda SVM om man använder sig av en transform till ett vektorrum med betydligt fler dimensioner, där chansen att man hittar en linjär lösning ökar.

Problemet med det här är att när antalet dimensioner ökar så ökar också beräkningstiden på ett orimligt sätt när vektorer av gigantiska proportioner ska multipliceras med varandra. Lösningen är att fuska genom att helt enkelt inte göra multiplikationen av de transformerade vektorerna. Istället hittar man en funktion K sådan att för transformen f mellan vektrorrum gäller att K(x,y) = f(x)·f(y) där x och y är vektorer. Varje gång en transform och multiplikation behövs i algoritmen använder man sig istället av K (man behöver egentligen inte ens veta exakt hur f ser ut). Den här metoden kallas ”the kernel trick”, om ni vill förkovra er i ämnet.

En styrka med SVM, förutom de mycket goda resultaten, är förmågan att hantera stora datamängder, något som stöder hypotesen att det är den Google använder. En svaghet är hastigheten, som trots Pandas förbättringar förmodligen inte är jämförbar med till exempel neuronnät. Det kan vara en förklaring till att algoritmen bara körs vid manuellt angivna tidpunkter och inte kan ligga och rulla för att kontinuerligt räkna om bedömningen av sidor.

Andra fördelar som troligen tilltalar Google är den vetenskapliga grunden för algoritmen, determinism i resultatet som inte beror på något slumpvalt ”frö” och att algoritmen inte innehåller så många parametrar som måste provas fram.

Något som ofta ses som en nackdel, men som Google förmodligen inte har något problem med, är att resultatet ofta är svårtolkat. Lösningsplanet är för komplext för att kunna översättas till några enkla regler som kan ges en mänsklig tolkning.

Vad säger det här oss om Panda?

Att originalitet i texter skulle vara en faktor verkar helt orimligt, även om det är en signal för algoritmen så finns det inget skäl att tro att det är avgörande för om en sida uppfattas som ”bra” eller ”dålig” av en användare. Det som spelar roll är intrycket av sidan. Framstår texten som genuin och i ett trovärdigt sammanhang på en lättnavigerad sida spelar det ingen som helst roll om texten är stulen. Den här algoritmen klassificerar inte upphovsrättsbrott.

Det komplexa resultatet i kombination med de oregelbundna omräkningarna gör det förmodligen praktiskt omöjligt att på experimentell väg lista ut en optimal kombination av signaler. Däremot kan vi vara ganska säkra på att algoritmen är ganska bra på att gissa vad en människa skulle tycka om en sida. Det som är bra för en algoritm är dock inte samma sak som perfekt. Ett statistiskt fantastiskt resultat för Google och användarna innebär ändå att flera miljoner sidor missgynnas på ett orättvist sätt, för statistik har ingen känsla för rättvisa i enskilda fall. Googles mål är att ge användarna så bra resultat som möjligt så ofta som möjligt. Enskilda exempel är inte bevis på att algoritmen varken lyckats eller misslyckats.