
Ogni servizio i cui utenti possono generare contenuti (UGC - User-generated content) deve affrontare non solo sfide aziendali, ma anche gestire l'UGC stesso. Una scarsa o inadeguata moderazione dei contenuti può ridurre l'attrattiva del servizio per gli utenti, fino a causarne la chiusura.
Oggi vi parleremo della sinergia tra Yula e Odnoklassniki, che ci aiuta a moderare efficacemente gli annunci su Yula.
La sinergia è generalmente molto utile e, nell'era attuale, dove le tecnologie e le tendenze cambiano rapidamente, può diventare una vera e propria bacchetta magica. Perché sprecare risorse e tempo prezioso per reinventare ciò che è già stato inventato e perfezionato prima di te?
Anche noi abbiamo pensato questo quando ci siamo trovati di fronte alla sfida della moderazione dei contenuti degli utenti — immagini, testi e link. Ogni giorno gli utenti caricano su Yula milioni di contenuti, e senza un'elaborazione automatica non sarebbe affatto possibile moderare manualmente tutti questi dati.
Pertanto, abbiamo utilizzato una piattaforma di moderazione già pronta, che i nostri colleghi di Odnoklassniki avevano sviluppato fino a raggiungere uno stato di 'quasi perfezione'.
Perché Odnoklassniki?
Ogni giorno nella rete sociale arrivano decine di milioni di utenti che pubblicano miliardi di contenuti: da fotografie a video e testi. La piattaforma di moderazione di Odnoklassniki è utile per controllare volumi molto ampi di dati e per contrastare spammatori e bot.
Il team di moderazione di OK ha accumulato una notevole esperienza, poiché perfeziona il proprio strumento da 12 anni. È importante che non solo potevano condividere le loro soluzioni già pronte, ma anche adattare l'architettura della loro piattaforma alle nostre specifiche esigenze.

Per brevità, d'ora in poi chiameremo semplicemente la piattaforma di moderazione di OK 'piattaforma'.
Come è tutto strutturato
Tra Yula e Odnoklassniki lo scambio di dati è organizzato tramite .
Perché abbiamo scelto questo strumento:
- Su Yula tutti gli annunci vengono sottoposti a post-moderazione, quindi in origine non era necessaria una risposta sincrona.
- Se si verifica un imprevisto e Yula o Odnoklassniki non sono disponibili, anche a causa di picchi di carico, i dati di Kafka non andranno persi e potranno essere letti successivamente.
- La piattaforma è già stata integrata con Kafka, quindi la maggior parte delle questioni di sicurezza sono state risolte.

Per ogni annuncio creato o modificato dall'utente su Yula viene generato un JSON con i dati, che viene inserito in Kafka per la successiva moderazione. Dalla piattaforma vengono caricati gli annunci da Kafka, sui quali vengono prese decisioni automaticamente o manualmente. Gli annunci inadeguati vengono bloccati con l'indicazione del motivo, e quelli in cui la piattaforma non ha trovato violazioni vengono contrassegnati come 'buoni'. Tutte le decisioni vengono poi restituite a Yula e applicate nel servizio.
In conclusione, per Yula tutto si riduce a semplici azioni: inviare l'annuncio alla piattaforma di Odnoklassniki e ricevere indietro la risoluzione 'ok', o spiegare perché non è 'ok'.
Elaborazione automatica
Cosa succede all'annuncio dopo che arriva sulla piattaforma? Ogni annuncio viene suddiviso in più entità:
- titolo,
- descrizione,
- foto,
- categoria selezionata dall'utente e sottocategoria dell'annuncio,
- prezzo.

Successivamente, per ciascuna entità, la piattaforma esegue una clustering per trovare i duplicati. I testi e le foto vengono clusterizzati secondo schemi differenti.
I testi vengono normalizzati prima della clustering per rimuovere caratteri speciali, lettere modificate e altri elementi superflui. I dati ottenuti vengono suddivisi in N-grammi, ognuno dei quali viene hashato. Alla fine si ottiene un insieme di hash unici. La somiglianza tra i testi è calcolata secondo tra i due insiemi risultanti. Se la somiglianza supera la soglia, i testi vengono uniti in un unico cluster. Per accelerare la ricerca di cluster simili si utilizza MinHash e hashing locale-sensibile.
Per le foto sono state ideate diverse varianti di unione delle immagini, dal confronto delle immagini con pHash alla ricerca di duplicati tramite una rete neurale.
L'ultimo metodo è il più «rigoroso». Per addestrare il modello sono state selezionate triple di immagini (N, A, P) in cui N non somiglia ad A, mentre P è simile ad A (è un quasi duplicato). Successivamente, la rete neurale ha studiato come rendere A e P il più vicini possibile, e A e N il più lontani possibile. In questo modo si ottengono meno falsi positivi rispetto a semplicemente utilizzare gli embedding da una rete pre-addestrata.
Quando la rete neurale riceve in input le immagini, genera per ognuna di esse un vettore N (128) dimensionale e fa una richiesta per valutare la somiglianza dell'immagine. Successivamente viene calcolata una soglia, al di sotto della quale le immagini simili sono considerate duplicati.
Il modello è in grado di individuare con maestria gli spammer che fotografano appositamente lo stesso prodotto da angolazioni diverse per eludere il confronto tramite pHash.


Esempio di foto spammer unite dalla rete neurale come duplicati.
Nella fase finale, i duplicati degli annunci vengono cercati contemporaneamente sia nel testo che nelle immagini.
Se in un cluster si uniscono due o più annunci, il sistema avvia un blocco automatico, che secondo determinati algoritmi decide quali duplicati eliminare e quali mantenere. Ad esempio, se due utenti hanno foto identiche nell'annuncio, il sistema blocca l'annuncio più recente.
Dopo la creazione, tutti i cluster passano attraverso una serie di filtri automatici. Ogni filtro assegna al cluster un punteggio (score): la probabilità che contenga una minaccia che questo filtro identifica.
Ad esempio, il sistema analizza la descrizione nell'annuncio e seleziona le categorie potenziali. Quindi sceglie quella con la massima probabilità e la confronta con la categoria indicata dall'autore dell'annuncio. Se non coincidono, l'annuncio viene bloccato per categoria errata. E poiché siamo gentili e onesti, diciamo direttamente all'utente quale categoria deve selezionare affinché l'annuncio superi la moderazione.

Notifica di blocco per categoria errata.
Sulla nostra piattaforma, l'apprendimento automatico si sente a casa. Ad esempio, mediante il suo aiuto, cerchiamo nei titoli e nelle descrizioni beni proibiti in RF. E i modelli di reti neurali esaminano con attenzione le immagini, per vedere se ci sono URL, testi spam, numeri di telefono e, naturalmente, i beni proibiti.
Per i casi in cui un prodotto vietato viene tentato di vendere mascherandolo come qualcosa di legale, e non c'è alcun testo né nel titolo né nella descrizione, utilizziamo il tagging delle immagini. Per ciascuna immagine possono essere applicati fino a 11mila diversi tag che descrivono cosa si trova nell'immagine.

Un narghilè viene tentato di vendere mascherandolo come un samovar.
Parallelamente ai filtri complessi, lavorano anche filtri semplici che affrontano problemi ovvi legati al testo:
- antimateria;
- rilevatore di URL e numeri di telefono;
- menzione di messaggeri e altri contatti;
- prezzo basso;
- annunci in cui non si vende nulla, ecc.
Oggi ogni annuncio passa attraverso un setaccio fine di oltre 50 filtri automatici, che tentano di trovare qualcosa di negativo nell'annuncio.
Se nessuno dei rilevatori ha attivato l'allerta, viene inviata a Yula una risposta dicendo che l'annuncio è, "probabilmente", in ordine. Applichiamo questa risposta nel nostro sistema e agli utenti che si sono iscritti al venditore arriva una notifica riguardante l'arrivo di un nuovo prodotto.

Notifica che il venditore ha un nuovo prodotto.
Di conseguenza, ogni annuncio si "arricchisce" di metadati, parte dei quali viene generata al momento della creazione dell'annuncio (indirizzo IP dell'autore, user-agent, piattaforma, geolocalizzazione, ecc.), mentre il resto è composto da punteggi assegnati da ciascun filtro.
Code degli annunci
Quando un annuncio entra nella piattaforma, il sistema lo colloca in una delle code. Ogni coda è formata mediante una formula matematica che combina i metadati dell'annuncio in modo da rilevare un qualche cattivo modello.
Ad esempio, è possibile creare una coda di annunci nella categoria "Cellulari" da utenti di Yula apparentemente da San Pietroburgo, mentre i loro indirizzi IP sono di Mosca o di altre città.

Esempio di annunci pubblicati da un utente in diverse città.
Oppure si possono formare code basate sui punteggi che la rete neurale assegna agli annunci, ordinandoli per valore decrescente.
Ogni coda, secondo la sua formula, assegna un punteggio finale all'annuncio. Da qui si può agire in vari modi:
- stabilire un valore soglia, al di sotto del quale l'annuncio riceverà un certo tipo di blocco;
- inviare tutti gli annunci in coda ai moderatori per un controllo manuale;
- oppure combinare le opzioni precedenti: specificare la soglia di blocco automatico e inviare ai moderatori quegli annunci che non hanno raggiunto tale soglia.

Perché sono necessarie queste code? Supponiamo che un utente carichi una fotografia di un'arma da fuoco. La rete neurale le assegna un punteggio da 95 a 100 e con una precisione del 99% determina che nell'immagine c'è un'arma. Ma se il punteggio è inferiore al 95%, la precisione del modello inizia a diminuire (è una caratteristica dei modelli di reti neurali).
Di conseguenza si forma una coda basata sul punteggio del modello, e quelli degli annunci che hanno ricevuto da 95 a 100 vengono bloccati automaticamente come "Merce vietata". Gli annunci con punteggi inferiori a 95 vengono inviati per una lavorazione manuale ai moderatori.

Beretta di cioccolato con proiettili. Solo per moderazione manuale! 🙂
Moderazione manuale
All'inizio del 2019 circa il 94% di tutti gli annunci su Yula vengono moderati automaticamente.

Se la piattaforma non riesce a decidere su alcuni annunci, li invia per una moderazione manuale. Gli Odnoklassniki hanno sviluppato un proprio strumento: nei compiti per i moderatori viene mostrata immediatamente tutta l'informazione necessaria per prendere una decisione rapida — se l'annuncio è valido o se vale la pena bloccarlo, specificando il motivo.
E per garantire che la qualità del servizio non ne risenta durante la moderazione manuale, il lavoro delle persone è costantemente controllato. Ad esempio, nel flusso di compiti al moderatore vengono mostrati "trappole" — annunci per cui ci sono già soluzioni pronte. Se la decisione del moderatore non coincide con quella pronta, al moderatore viene conteggiato un errore.
In media, un moderatore impiega 10 secondi per controllare un annuncio. Inoltre, il numero di errori non supera lo 0,5% di tutti gli annunci esaminati.
Moderazione popolare
I colleghi di Odnoklassniki sono andati ancora oltre, sfruttando l'"aiuto del pubblico": hanno creato per il social network un'applicazione-gioco in cui è possibile etichettare rapidamente un gran numero di dati, evidenziando qualche caratteristica negativa — Moderatore di Odnoklassniki (). È un ottimo modo per coinvolgere gli utenti di OK, che cercano di rendere i contenuti più gradevoli.

Un gioco in cui gli utenti contrassegnano le fotografie che contengono un numero di telefono.
Qualsiasi coda di annunci sulla piattaforma può essere indirizzata al gioco Moderatore di Odnoklassniki. Tutto ciò che viene contrassegnato dagli utenti del gioco viene poi inviato ai moderatori interni per la verifica. Questo schema consente di bloccare gli annunci per i quali non sono ancora stati creati filtri e di creare contemporaneamente campioni formativi.
Archiviazione dei risultati di moderazione
Conserviamo tutte le decisioni prese durante la moderazione, in modo da non dover elaborare nuovamente quegli annunci per i quali è stata già presa una decisione.
Ogni giorno vengono creati milioni di cluster di annunci. Col tempo, ogni cluster riceve un'etichetta "buono" o "cattivo". Ogni nuovo annuncio o sua revisione, entrando in un cluster con etichetta, riceve automaticamente la risoluzione del cluster stesso. In totale, ci sono circa 20.000 risoluzioni automatiche al giorno.

Se nel cluster non arrivano nuovi annunci, viene rimosso dalla memoria e il suo hash e la risoluzione vengono registrati in Apache Cassandra.
Quando la piattaforma riceve un nuovo annuncio, cerca prima un cluster simile tra quelli già creati e prende la decisione da esso. Se non c’è un tale cluster, la piattaforma va in Cassandra e cerca lì. Trovato? Ottimo, applica la decisione al cluster e la invia a Yula. Ogni giorno si accumulano in media 70.000 "decisioni ripetute" — 8 % del numero totale.
In sintesi
Utilizziamo la piattaforma di moderazione di Odnoklassniki da due anni e mezzo. I risultati ci piacciono:
- Moderiamo automaticamente il 94 % di tutti gli annunci in un giorno.
- Il costo della moderazione di un annuncio è sceso da 2 rubli a 7 copechi.
- Grazie allo strumento pronto, ci siamo dimenticati dei problemi di gestione dei moderatori.
- Abbiamo aumentato di 2,5 volte il numero di annunci trattati manualmente mantenendo lo stesso numero di moderatori e budget. Inoltre, la qualità della moderazione manuale è aumentata grazie al controllo automatizzato, oscillando intorno allo 0,5 % di errori.
- Copriamo rapidamente con filtri nuovi tipi di spam.
- Colleghiamo rapidamente nuove unità alla moderazione . Dal 2017, in Yula sono apparse verticali come Immobili, Offerte di lavoro e Auto.
Fonte: habr.com
