
Hver tjeneste, hvis brugere kan skabe deres eget indhold (UGC - User-generated content), er nødt til ikke kun at løse forretningsmæssige opgaver, men også at holde styr på UGC. Dårlig eller utilstrækkelig moderering af indhold kan i sidste ende reducere tjenestens tiltrækningskraft for brugerne, op til en total nedlukning af tjenesten.
I dag vil vi fortælle dig om synergien mellem Jula og Odnoklassniki, som hjælper os med effektivt at moderere annoncer på Jula.
Synergi er generelt en meget nyttig ting, og i den moderne verden, hvor teknologi og trends ændrer sig hurtigt, kan det blive et værktøj i nødsituationer. Hvorfor bruge begrænsede ressourcer og tid på at opfinde det, som andre allerede har opfundet og forbedret?
Det var også vores tanke, da vi stod over for opgaven med at moderere brugerindhold - billeder, tekst og links. Vores brugere uploader dagligt millioner af indholdsenheder til Jula, og uden automatisk behandling er det umuligt at moderere alle disse data manuelt.
Derfor benyttede vi en allerede eksisterende moderationsplatform, som vores kolleger fra Odnoklassniki havde forbedret til næsten perfektion.
Hvorfor Odnoklassniki?
Dagligt kommer der titusindvis af brugere til det sociale netværk, som publicerer milliarder af indholdsenheder: fra fotos til videoer og tekster. Moderationsplatformen fra Odnoklassniki hjælper med at kontrollere meget store datamængder og modvirke spammer og bots.
Moderationsteamet hos OK har akkumulere stor erfaring, da de har forbedret deres værktøj i 12 år. Det er vigtigt, at de ikke kun kunne dele deres færdige løsninger, men også tilpasse arkitekturen af deres platform til vores specifikke opgaver.

Fremover vil vi kort kalde moderationsplatformen OK ganske enkelt 'platformen'.
Hvordan alt er arrangeret
Mellem Jula og Odnoklassniki er datudvekslingen etableret gennem .
Hvorfor vi valgte dette værktøj:
- På Jula gennemgår alle annoncer post-moderation, så der var ikke behov for et synkront svar fra starten.
- Hvis der opstår en omfattende udbrud, og Jula eller Odnoklassniki er utilgængelige, blandt andet på grund af spidsbelastninger, vil dataene fra Kafka ikke gå tabt og kan senere læses videre.
- Platformen er allerede blevet integreret med Kafka, så de fleste sikkerhedsspørgsmål er blevet løst.

For hver annonce oprettet eller ændret af brugeren på Jule, genereres der en JSON med data, som placeres i Kafka til efterfølgende moderering. Annoncerne hentes fra Kafka til platformen, hvor beslutninger træffes automatisk eller manuelt. Dårlige annoncer blokeres med angivelse af årsagen, mens de, hvor platformen ikke fandt overtrædelser, bliver markeret som 'gode'. Alle beslutninger sendes derefter tilbage til Jule og anvendes i servicen.
I sidste ende handler det for Jule om enkle handlinger: at sende annoncen til platformen for Odnoklassniki og få en 'ok' respons tilbage, eller hvorfor det ikke er 'ok'.
Automatisk behandling
Hvad sker der med annoncens efter, at den kommer ind på platformen? Hver annonce opdeles i flere enheder:
- titel,
- beskrivelse,
- fotos,
- den valgte kategori og underkategori for annoncen,
- pris.

Derefter udfører platformen klyngeanalyse på hver enhed for at finde duplikater. Desuden klynges tekst og billeder efter forskellige skemaer.
Teksterne normaliseres før klyngeanalysen for at fjerne specialtegn, ændrede bogstaver og andet affald. De resulterende data opdeles i N-grammer, som hver især hashes. Resultatet er mange unikke hashes. Ligheden mellem teksterne måles ved mellem de to opnåede mængder. Hvis ligheden overstiger tærsklen, samles teksterne i en enkelt klynge. For at fremskynde søgningen efter lignende klynger anvendes MinHash og Locality-sensitive hashing.
Der er forskellige metoder til samling af billeder, fra sammenligning af pHash billeder til at finde duplikater ved hjælp af et neuralt netværk.
Den sidste metode er den mest 'rutinerede'. Til træning af modellen blev der udvalgt sådanne billedtrioer (N, A, P), hvor N ikke ligner A, og P ligner A (er en semi-duplikat). Derefter lærte neuralt netværk at gøre A og P så tæt på som muligt, mens A og N var så langt fra som muligt. Dette resulterer i færre falske positive sammenlignet med blot at tage embeddings fra et foruddannet netværk.
Når neuronet modtager billeder, genererer det for hver af dem en N(128)-dimensionel vektor og sender en forespørgsel om at vurdere billedernes lighed. Dernæst beregnes der en tærskel, hvorefter nærliggende billeder betragtes som duplikater.
Modellen er dygtig til at identificere spammere, som bevidst fotograferer det samme produkt fra forskellige vinkler for at omgå sammenligning ved hjælp af pHash.


Eksempler på spam-billeder, der er sammenflettet af et neuralt netværk som duplikater.
I den endelige fase søges der samtidig efter duplikater af annoncer både efter tekst og billeder.
Hvis der samlet set er to eller flere annoncer i et cluster, aktiverer systemet en automatisk blokering, der ved hjælp af bestemte algoritmer vælger, hvilke duplikater der skal fjernes, og hvilke der skal beholdes. For eksempel, hvis to brugere har identiske billeder i deres annoncer, så blokerer systemet den nyere annonce.
Efter oprettelse gennemgår alle klynger en række automatiske filtre. Hvert filter tildeler klyngen et pointantal (score): med hvilken sandsynlighed den indeholder en trussel, som dette filter identificerer.
For eksempel analyserer systemet beskrivelsen i annoncen og vælger potentielle kategorier for den. Derefter vælger den den, som har den højeste sandsynlighed, og sammenligner den med den kategori, som annonseforfatteren har angivet. Hvis de ikke stemmer overens, blokeres annoncen for en forkert kategori. Og fordi vi er venlige og ærlige, siger vi direkte til brugeren, hvilken kategori de skal vælge for at annoncen kan komme igennem moderationen.

Underretning om blokering for forkert kategori.
På vores platform lever maskinlæring i harmoni. For eksempel bruger vi det til at finde forbudte varer i titler og beskrivelser i Rusland. Og neurale netværksmodeller 'gransker' omhyggeligt billederne for URL-adresser, spam-tekster, telefonnumre og alt det samme 'forbudte'.
I tilfælde hvor en forbuden vare forsøges solgt, maskeret som noget lovligt, og der ikke er nogen tekst hverken i titlen eller beskrivelsen, bruger vi billedmærkning. For hvert billede kan der tildeles op til 11.000 forskellige tags, der beskriver, hvad der findes på billedet.

En vandpibe forsøges solgt, maskeret som en samovar.
Simpel filtre arbejder parallelt med komplekse og løser åbenlyse opgaver relateret til tekst:
- anti-mat;
- detektor til URL-adresser og telefonnumre;
- nævnelser af messenger og andre kontakter;
- lav pris;
- annoncer, hvor der ikke sælges noget, osv.
I dag passerer hver annonce gennem en finmasket si af mere end 50 automatiserede filtre, der forsøger at finde noget dårligt i annoncen.
Hvis ingen af detektorerne aktiveres, sendes der et svar til Yulu, der siger, at der 'sandsynligvis' ikke er problemer med annoncen. Dette svar anvender vi, og brugere, der har abonnere på sælgeren, modtager en meddelelse om, at der er et nyt produkt tilgængeligt.

En meddelelse om, at sælgeren har et nyt produkt.
Som følge heraf 'omgives' hver annonce af metadata, hvoraf en del genereres ved oprettelsen af annoncen (forfatterens IP-adresse, user-agent, platform, geolokation osv.), mens resten er scoren givet af hver filter.
Køer af annoncer
Når en annonce kommer ind på platformen, placerer systemet den i en af køerne. Hver kø dannes ved hjælp af en matematisk formel, der kombinerer annoncemetadata på en måde, der opdager et dårligt mønster.
For eksempel kan man oprette en kø af annoncer i kategorien 'Mobiltelefoner' fra Yulu-brugere, der angiveligt kommer fra Sankt Petersborg, men hvis IP-adresser stammer fra Moskva eller andre byer.

Eksempler på annoncer placeret af en bruger i forskellige byer.
Eller man kan danne køer baseret på de point, som neuralt netværk tildeler annoncerne, og arrangere dem i faldende rækkefølge.
Hver kø tildeler, i henhold til sin formel, en samlet score til annoncen. Herefter kan man handle forskelligt:
- angive en tærskelværdi, hvor annoncen vil modtage en bestemt type blokering;
- sende alle annoncer i køen til moderatorerne for manuel kontrol;
- eller kombinere de tidligere muligheder: angive en tærskel for automatisk blokering og sende de annoncer, der ikke når denne tærskel, til moderatorerne.

Hvorfor er disse køer nødvendige? Antag, at en bruger uploader et billede af en skydevåben. Neuro-netværket tildeler det en score fra 95 til 100 og identificerer med 99 procents nøjagtighed, at billedet indeholder et våben. Men hvis scoren er under 95 %, begynder modellens nøjagtighed at falde (det er en egenskab ved neurale netværk).
Som et resultat dannes en kø baseret på modellens score, og de annoncer, der har fået en score fra 95 til 100, blokeres automatisk som «Forbudt vare». Annoncer med en score under 95 sendes til manuel behandling af moderatorer.

Chokolade Beretta med patroner. Kun til manuel moderation! 🙂
Manuel moderation
I starten af 2019 blev cirka 94 % af alle annoncer på Yula modereret automatisk.

Hvis platformen ikke kan afgøre noget omkring visse annoncer, sendes de til manuel moderation. Odnoklassniki har udviklet deres eget værktøj: i opgaverne til moderatorerne vises al nødvendig information for at træffe en hurtig beslutning — om annoncen er godkendt eller skal blokeres med angivelse af årsag.
For at kvaliteten af tjenesten ikke lider under manuel moderation, overvåges menneskers arbejde konstant. For eksempel vises der «fælder» i strømmen af opgaver — annoncer, for hvilke der allerede er færdige løsninger. Hvis moderatorens beslutning ikke stemmer overens med den færdige løsning, får moderator et fejltrin.
En moderator bruger i gennemsnit 10 sekunder på at kontrollere en annonce. Antallet af fejl udgør ikke mere end 0,5 % af alle kontrollerede annoncer.
Folkebaseret moderation
Kollegaer fra Odnoklassniki er gået endnu længere og har anvendt «hjælpen fra salen»: de har skrevet en app-spil for sociale medier, hvor man hurtigt kan mærke et stort antal data ved at fremhæve en dårlig egenskab — Moderator Odnoklassniki (). En god måde at udnytte hjælp fra OK-brugere, der stræber efter at gøre indholdet mere behageligt.

Et spil, hvor brugere markerer fotos, der indeholder et telefonnummer.
Enhver annoncekø på platformen kan omdirigeres til Mo deratoren i Odnoklassniki-spillet. Alt, hvad brugerne markerer i spillet, sendes derefter til de interne moderatorer til godkendelse. Denne ordning gør det muligt at blokere annoncer, for hvilke der endnu ikke er oprettet filtre, samtidig med at der oprettes træningsdata.
Opbevaring af moderationsresultater
Vi gemmer alle beslutninger truffet under moderationen, så vi ikke skal behandle de annoncer, for hvilke der allerede er truffet en beslutning, igen.
Der oprettes millioner af klynger dagligt for annoncer. Over tid får hver klynge betegnelsen 'god' eller 'dårlig'. Hver ny annonce eller dens version, der falder ind under en klynge med en vurdering, modtager automatisk beslutningen fra klyngen. Sådanne automatiske beslutninger når omkring 20.000 om dagen.

Hvis der ikke kommer nye annoncer til klyngen, slettes den fra hukommelsen, og dens hash og beslutning gemmes i Apache Cassandra.
Når platformen modtager en ny annonce, prøver den først at finde en lignende klynge blandt de allerede oprettede og tage beslutningen derfra. Hvis en sådan klynge ikke findes, går platformen til Cassandra og søger der. Fandt den det? Fantastisk, anvender beslutningen på klyngen og sender det til Yula. Sådanne 'gentagne' beslutninger opsamles dagligt i gennemsnit til 70.000 — 8 % af det samlede antal.
Sammenfattende
Vi har brugt moderationsplatformen i Odnoklassniki i to og en halv år. Resultaterne tilfredsstiller os:
- Automatisk modererer 94 % af alle annoncer på en dag.
- Omkostningerne ved at moderere én annonce er reduceret fra 2 rubler til 7 kopeks.
- Takket være det færdige værktøj har vi glemt problemerne med at styre moderatorer.
- Vi har øget antallet af manuelt behandlede annoncer med 2,5 gange med samme antal moderatorer og budget. Desuden er kvaliteten af den manuelle moderation steget takket være automatiseret overvågning og ligger omkring 0,5 % fejl.
- Vi dækker hurtigt nye typer af spam med filtre.
- Vi tilslutter hurtigt nye afdelinger til moderationen . Siden 2017 har Yula haft vertikaler for Ejendom, Jobopslag og Bil.
Kilde: habr.com
