när det gäller nyhetsflödesalgoritmen finns det många teorier och myter. De flesta förstår att det finns en algoritm på jobbet, och många känner till några av de faktorer som informerar den algoritmen (oavsett om du gillar ett inlägg eller engagerar dig i det etc.). Men det finns fortfarande en hel del som missförstås.
vi delar offentligt många av detaljerna och funktionerna i nyhetsflödet. Men under huven är maskininlärning (ML) rankningssystem som driver nyhetsflödet otroligt komplext, med många lager. Vi delar nya Detaljer om hur vårt rankningssystem fungerar och utmaningarna med att bygga ett system för att anpassa innehållet för mer än 2 miljarder människor och visa var och en av dem innehåll som är relevant och meningsfullt för dem, varje gång de kommer till Facebook.
Vad är så svårt med detta?
för det första är volymen enorm. Mer än 2 miljarder människor runt om i världen använder Facebook. För var och en av dessa människor finns det mer än tusen ”kandidat” – inlägg (eller inlägg som potentiellt kan visas i den personens flöde). Vi pratar nu om biljoner inlägg över alla människor på Facebook.
Tänk nu på att för varje person på Facebook finns det tusentals signaler som vi behöver utvärdera för att avgöra vad den personen kan hitta mest relevanta. Så vi har biljoner inlägg och tusentals signaler — och vi måste förutsäga vad var och en av dessa människor vill se i deras flöde direkt. När du öppnar Facebook händer den processen i bakgrunden på bara den andra eller så som det tar att ladda ditt nyhetsflöde.
och när vi har fått allt detta arbete, saker förändras, och vi måste faktor i nya frågor som uppstår, såsom clickbait och spridningen av desinformation. När detta händer måste vi hitta nya lösningar. I verkligheten är rankningssystemet inte bara en enda algoritm; det är flera lager av ML-modeller och rankningar som vi tillämpar för att förutsäga det innehåll som är mest relevant och meningsfullt för varje användare. När vi går igenom varje steg minskar rankningssystemet de tusentals kandidatposterna till de få hundra som visas i någons nyhetsflöde när som helst.
Hur fungerar det?
enkelt uttryckt bestämmer systemet vilka inlägg som visas i ditt nyhetsflöde och i vilken ordning genom att förutsäga vad du mest sannolikt är intresserad av eller engagera dig med. Dessa förutsägelser baseras på en mängd olika faktorer, inklusive vad och vem du har följt, gillat eller engagerat dig nyligen. För att förstå hur detta fungerar i praktiken, låt oss börja med vad som händer för en person som loggar in på Facebook: vi kallar honom Juan.
sedan Juans inloggning igår publicerade hans vän Wei ett foto av sin cocker spaniel. En annan vän, Saanvi, publicerade en video från hennes morgonkörning. Hans favoritsida publicerade en intressant artikel om det bästa sättet att se Vintergatan på natten, medan hans favoritlagningsgrupp publicerade fyra nya surdegsrecept.
allt detta innehåll är sannolikt relevant eller intressant för Juan eftersom han har valt att följa de personer eller sidor som delar det. För att bestämma vilka av dessa saker som ska visas högre i Juans nyhetsflöde måste vi förutsäga vad som är viktigast för honom och vilket innehåll som har det högsta värdet för honom. I matematiska termer måste vi definiera en objektiv funktion för Juan och utföra en enda objektiv optimering.
vi kan använda egenskaperna hos ett inlägg, till exempel vem som är taggad på ett foto och när det publicerades, för att förutsäga om Juan kanske gillar det. Till exempel, om Juan tenderar att interagera med Saanvis inlägg (t. ex., dela eller kommentera) ofta och hennes löpande video är väldigt ny, det är hög sannolikhet att Juan kommer att gilla hennes inlägg. Om Juan har engagerat sig med mer videoinnehåll än foton tidigare, kan liknande förutsägelse för Weis foto av hans cocker spaniel vara ganska låg. I det här fallet skulle vår rankningsalgoritm rangordna Saanvis löpande video högre än Weis hundfoto eftersom det förutsäger en högre sannolikhet att Juan skulle vilja ha det.
men att gilla är inte det enda sättet människor uttrycker sina preferenser på Facebook. Varje dag delar människor artiklar som de tycker är intressanta, tittar på videor från människor eller kändisar de följer eller lämnar tankeväckande kommentarer på sina vänners inlägg. Matematiskt blir saker mer komplexa när vi behöver optimera för flera mål som alla lägger till vårt primära mål: skapa det mest långsiktiga värdet för människor genom att visa dem innehåll som är meningsfullt och relevant för dem.
flera ML-modeller producerar flera förutsägelser för Juan: sannolikheten för att han kommer att engagera sig i Weis foto, Saanvis video, Vintergatan artikeln eller surdegsrecepten. Varje modell försöker rangordna dessa innehåll för Juan. Ibland är de oense — det kan vara en högre sannolikhet att Juan skulle vilja ha Saanvis löpande video än Vintergatan artikeln, men han kan vara mer benägna att kommentera artikeln än på videon. Så vi behöver ett sätt att kombinera dessa olika förutsägelser till en poäng som är optimerad för vårt primära mål för långsiktigt värde.
hur kan vi mäta om något skapar långsiktigt värde för en person? Vi frågar dem. Vi undersöker till exempel människor för att fråga hur meningsfullt de hittade en interaktion med sina vänner eller om ett inlägg var värt sin tid så att vårt system återspeglar vad folk säger att de tycker om och tycker är meningsfullt. Då kan vi ta hänsyn till varje förutsägelse för Juan baserat på de åtgärder som människor berättar för oss (via undersökningar) är mer meningsfulla och värda sin tid.
skalar tillbaka lagren
för att rangordna mer än tusen inlägg per användare, per dag, för mer än 2 miljarder människor — i realtid — måste vi göra processen effektiv. Vi hanterar detta i olika steg, strategiskt ordnade för att göra det snabbt och för att begränsa mängden datorresurser som krävs.
först samlar systemet alla kandidatposter som vi eventuellt kan rangordna för Juan (cocker spaniel-fotot, den löpande videon etc.). Denna kvalificerade inventering inkluderar alla inlägg som delas med Juan av en vän, grupp eller sida som han är ansluten till som gjordes sedan hans senaste inloggning och inte har raderats. Men hur ska vi Hantera inlägg skapade före Juans senaste inloggning som han inte har sett än?
för att se till att osynliga inlägg omprövas tillämpar vi en oläst bumpningslogik: nya inlägg som rankades för Juan (men inte sett av honom) i hans tidigare sessioner läggs till i den berättigade inventeringen för denna session. Vi tillämpar också en action-bumping logik så att alla inlägg Juan redan har sett som sedan har utlöst en intressant konversation bland hans vänner läggs till i den berättigade inventeringen också.
Därefter måste systemet göra poäng för varje inlägg för olika faktorer, till exempel typ av inlägg, likhet med andra objekt och hur mycket inlägget matchar vad Juan tenderar att interagera med. För att beräkna detta för mer än 1000 inlägg, för var och en av miljarder användare — allt i realtid — kör vi dessa modeller för alla kandidathistorier parallellt på flera maskiner, kallade prediktorer.
innan vi kombinerar alla dessa förutsägelser till en enda poäng måste vi tillämpa några ytterligare regler. Vi väntar tills vi har dessa första förutsägelser så att vi kan begränsa poolen av inlägg som ska rankas — och vi tillämpar dem över flera pass för att spara beräkningskraft.
för det första tillämpas vissa integritetsprocesser på varje inlägg. Dessa är utformade för att avgöra vilka integritetsdetekteringsåtgärder, om några, måste tillämpas på de berättelser som valts för rangordning. I nästa pass smalnar en lättviktsmodell poolen av kandidater till cirka 500 av de mest relevanta inläggen för Juan. Ranking färre berättelser tillåter oss att använda mer kraftfulla neurala nätverksmodeller för nästa pass.
nästa är huvudpoängspasset, där det mesta av personaliseringen händer. Här beräknas en poäng för varje berättelse oberoende, och sedan sätts alla 500 inlägg i ordning efter poäng. För vissa kan poängen vara högre för likes än för att kommentera, eftersom vissa människor gillar att uttrycka sig mer genom att tycka om än att kommentera. Varje handling som en person sällan engagerar sig i (till exempel en liknande förutsägelse som är mycket nära noll) får automatiskt en minimal roll i rankningen, eftersom det förutsagda värdet är mycket lågt.
slutligen kör vi det kontextuella passet, där kontextuella funktioner som mångfaldsregler för innehållstyp läggs till för att se till att Juans nyhetsflöde har en bra blandning av innehållstyper och han ser inte flera videoinlägg, en efter en. Alla dessa rankningssteg händer under den tid det tar för Juan att öppna Facebook-appen, och inom några sekunder har han ett nytt nyhetsflöde som är klart för honom att bläddra och njuta av.