
Minden szolgáltatás, amely lehetővé teszi a felhasználók számára, hogy saját tartalmat hozzanak létre (UGC - felhasználó által generált tartalom), kénytelen nemcsak üzleti problémákat megoldani, hanem rendet rakni az UGC-ben is. A rossz vagy nem megfelelő tartalommoderálás végső soron csökkentheti a szolgáltatás vonzerejét a felhasználók számára, akár a működésének leállításáig is.
Ma elmondjuk nektek a Jula és az Osztálytársak közötti szinergiát, amely segít hatékonyan moderálni a hirdetéseket a Julában.
A szinergia általában nagyon hasznos dolog, és a mai világban, amikor a technológiák és trendek nagyon gyorsan változnak, varázspálcává válhat. Minek pazarolni a szűkös erőforrásokat és időt olyan dolgok feltalálására, amelyeket már feltaláltak és tökéletesítettek előttünk?
Mi is így gondoltuk, amikor szembesültünk a felhasználói tartalom moderálásának feladatával - képek, szövegek és linkek. Felhasználóink naponta milliónyi tartalmat töltenek fel a Julába, és anélkül, hogy automatizált feldolgozást alkalmaznánk, lehetetlen minden egyes adatot manuálisan moderálni.
Ezért egy már meglévő moderációs platformot használtunk, amelyet az Osztálytársak kollégáink addigra már "majdnem tökéletessé" fejlesztettek.
Miért az Osztálytársak?
Naponta tízmilliók látogatják meg a közösségi hálót, akik milliárdnyi tartalmat tesznek közzé: a fényképektől kezdve a videókig és szövegekig. Az Osztálytársak moderációs platformja segít ellenőrizni a rendkívül nagy mennyiségű adatot és fellépni a spamerek és botok ellen.
Az OK moderációs csapata nagyon nagy tapasztalatra tett szert, mivel már 12 éve tökéletesítik eszközüket. Fontos, hogy nemcsak meg tudták osztani meglévő megoldásaikat, hanem a platformjuk architektúráját is be tudták állítani a mi specifikus feladatainkhoz.

Továbbiakban a moderációs platformot csak "platformnak" nevezzük.
Hogyan működik minden
A Jula és az Osztálytársak közötti adatcsere .
Miért választottuk ezt az eszközt:
- A Julában minden hirdetés posztmoderáláson megy keresztül, ezért kezdetben szinkron válaszra nem volt szükség.
- Ha váratlan helyzet adódik, és a Jula vagy az Osztálytársak nem elérhetők, beleértve bármilyen csúcs terhelést, akkor a Kafka-ból származó adatok nem tűnnek el, és később visszaolvashatók lesznek.
- A platform már integrálva volt a Kafka-val, így a biztonsággal kapcsolatos legtöbb kérdés már megoldódott.

Minden egyes felhasználó által létrehozott vagy módosított hirdetés esetén egy JSON jön létre adatokka, amely a Kafka-ba kerül a további moderációhoz. A Kafka-ból a hirdetések betöltődnek a platformra, ahol automatikusan vagy manuálisan döntenek róluk. A rossz hirdetéseket blokkolják, megadva az okot, míg azokat, ahol a platform nem talált megsértésre utaló jeleket, „jóként” jelölik meg. Az összes döntést ezután visszaküldik a Júlába és alkalmazzák a szolgáltatásban.
Végső soron a Júla számára mindez egyszerű lépésekké redukálódik: küldj el egy hirdetést a Háló középső platformjára, és kapj egy „rendben” határozatot, vagy ha nem, akkor az okát.
Automatikus feldolgozás
Mi történik a hirdetéssel, miután bekerül a platformra? Minden hirdetést több entitásra bontanak:
- címsor,
- leírás,
- fotók,
- a felhasználó által választott kategória és al-kategória a hirdetéshez,
- ár.

Ezután minden entitás esetében a platform klaszterezést végez, hogy megtalálja a duplikációkat. A szövegek és a fotók klaszterezése különböző rendszerekkel történik.
A szövegeket klaszterezés előtt normalizálják, hogy eltávolítsák a speciális karaktereket, a módosított betűket és egyéb szemetet. Az így kapott adatokat N-grammokra bontják, mindegyik hármas formájában hash-elik. Végül sok egyedi hash keletkezik. A szövegek közötti hasonlóságot a a két kapott halmaz között. Ha a hasonlóság a küszöbérték felett van, a szövegek egy klaszterbe kerülnek. A hasonló klaszterek keresésének felgyorsítása érdekében MinHash-t és helyi érzékeny hashinget alkalmaznak.
A fotók esetén különböző képkombinálási módszereket dolgoztak ki, a képek pHash összehasonlításától kezdve a duplikáltak kereséséig neurális hálózatok segítségével.
Az utolsó módszer a leg«súlyosabb». A modell tanításához olyan képsorozatokat választottak ki (N, A, P), ahol N nem hasonlít A-ra, P pedig hasonlít A-ra (fél-duplikátum). Ezután a neurális hálózatot úgy tanították, hogy A és P maximálisan közel legyen egymáshoz, míg A és N maximálisan távol legyen egymástól. Így kevesebb hamis riasztás történik, mint ha egyszerűen a már betanított hálózattól kapsz beágyazásokat.
Amikor a neurális háló képeket kap bemenetként, mindegyikhez generál egy N(128)-dimenziós vektort, és lekérdezést indít a kép közelségnek értékelésére. Ezután kiszámolják a küszöböt, amelynél a közeli képeket duplikátumoknak tekintik.
A modell mesteri módon képes észlelni a spamelőket, akik szándékosan a ugyanazt a terméket különböző szögekből fényképezik, hogy megkerüljék a pHash szerinti összehasonlítást.


A spam képek példája, amelyeket a neurális háló biztosít duplikátumokként.
A végső lépésben a hirdetések duplikátumait párhuzamosan keresik a szöveg és a kép alapján is.
Ha egy klaszterbe két vagy több hirdetés kerül, a rendszer automatikus blokkolást indít, amely bizonyos algoritmusok alapján dönti el, hogy mely duplikátumokat távolítson el, és melyeket hagyjon meg. Például, ha két felhasználónál a hirdetésben azonos képek találhatók, akkor a rendszer a frissebb hirdetést blokkolja.
A létrehozás után minden klaszter áthalad egy sor automatikus szűrőn. Minden szűrő pontszámot (score) ad a klaszternek: mekkora valószínűséggel tartalmazza azt a fenyegetést, amelyet ez a szűrő azonosít.
Például a rendszer elemzi a hirdetés leírását, és potenciális kategóriákat választ ki számára. Ezután azt választja, amelynek a legnagyobb a valószínűsége, és összehasonlítja a hirdetés írójának megadott kategóriával. Ha ezek nem egyeznek, a hirdetést a hibás kategória miatt blokkolják. Mivel viszont jóságosak és tisztességesek vagyunk, elmondjuk a felhasználónak, hogy milyen kategóriát kellene választania ahhoz, hogy a hirdetés áteshessen a moderáción.

Értesítés a hibás kategória miatti blokkolásról.
Platformunkon a gépi tanulás otthonosan érzi magát. Például ennek segítségével keresünk az oroszországi tiltottnak számító termékeket a címekben és leírásokban. A neurális hálók gondosan "megcsodálják" a képeket, hogy vannak-e rajtuk URL-címek, spam szövegek, telefonszámok és ugyanaz a "tiltott" tartalom.
Az olyan esetekre, amikor tiltottnak számító terméket próbálnak eladni valami legálisra álcázva, és nincs semmilyen szöveg sem a címben, sem a leírásban, kép címkézést alkalmazunk. Minden képhez legfeljebb 11 ezer különböző címke rendelhető, amelyek leírják, mi található a képen.

A vízipipát próbálják eladni, úgy tűnik, mint egy samovár.
A bonyolult szűrők mellett egyszerű szűrők is működnek, amelyek nyilvánvalóan szöveggel kapcsolatos feladatokat oldanak meg:
- antimat;
- URL- és telefonszám-érzékelő;
- messenger és egyéb kapcsolati információk említése;
- túlzottan alacsony ár;
- hirdetések, amelyekben semmi sem eladó, stb.
Ma minden egyes hirdetés átkerül egy több mint 50 automatikus szűrőből álló apró rostán, amelyek próbálnak valamilyen problémát azonosítani a hirdetésben.
Ha egyik érzékelő sem aktiválódott, akkor a Yuluhoz egy válasz kerül, amely szerint a hirdetéssel „valószínűleg” minden rendben van. Ezt a választ alkalmazzuk, és azoknak a felhasználóknak, akik feliratkoztak az eladóra, értesítést küldünk az új termék megjelenéséről.

Értesítés arról, hogy új termék érkezett az eladótól.
Így végül minden hirdetés „metadatokkal bővül”, amelynek egy része a hirdetés létrehozásakor generálódik (az író IP-címe, user-agent, platform, geolokáció stb.), a többi pedig a szűrők által kiadott score.
Hirdetési sorok
Amikor a hirdetés bekerül a platformra, a rendszer egy sorba helyezi. Minden sor egy matematikai képlet segítségével alakul ki, amely kombinálja a hirdetés metadatát annak érdekében, hogy felfedezzen valamilyen rossz mintát.
Például létrehozhatunk egy hirdetési sort a „Mobiltelefonok” kategóriában olyan felhasználók számára a Yulán, akik állítólag Szentpéterváron vannak, de az IP-címük Moszkvából vagy más városokból származik.

Példa hirdetésekre, amelyeket ugyanaz a felhasználó különböző városokban helyezett el.
Vagy létrehozhatunk sorokat a pontok alapján, amelyeket a neurális hálózat ad a hirdetéseknek, valamint csökkenő sorrendbe állítja őket.
Minden sor, a saját képlete szerint, végső score-t rendel a hirdetéshez. Ezt követően különböző módokon lehet eljárni:
- megadni egy küszöbértéket, amelyen a hirdetés bizonyos típusú blokkolást fog kapni;
- az összes hirdetést a sorban kézi ellenőrzésre küldeni a moderátoroknak;
- vagy kombinálni az előző lehetőségeket: megadni egy automatikus blokkolás küszöbértékét, és a moderátoroknak elküldeni azokat a hirdetéseket, amelyek nem érték el ezt a küszöbértéket.

Miért szükségesek ezek a sorok? Tegyük fel, hogy egy felhasználó feltöltött egy fényképet tüzelőfegyverről. A neurális hálózat 95 és 100 közötti pontszámot ad neki, és 99%-os pontossággal meghatározza, hogy a képen fegyver található. De ha a pontszám értéke 95% alatt van, a modell pontossága csökkenni kezd (ez a neurális hálózatok sajátossága).
Ennek eredményeként egy sorozat alakul ki a modell pontszáma alapján, és azok a hirdetések, amelyek 95-től 100-ig terjedő pontot kaptak, automatikusan blokkolva lesznek, mint "Tilos termék". Azok a hirdetések, amelyek kevesebb mint 95 pontot kaptak, kézi moderálásra kerülnek.

Csokoládé színű Beretta tölténnyel. Csak kézi moderálásra! 🙂
Kézi moderálás
2019 elején a JuL hirdetések körülbelül 94%-a automatikusan moderálódik.

Ha a platform nem tud dönteni egyes hirdetésekről, akkor azokat kézi moderálásra küldi. Az Odnoklassniki saját eszközt fejlesztett ki: a moderátorok feladatainál azonnal megjelenik minden szükséges információ a gyors döntéshozatalhoz — a hirdetés megfelelő, vagy letiltásra kerül indoklással.
A kézi moderálás során, hogy a szolgáltatás minősége ne szenvedjen csorbát, az emberek munkáját folyamatosan ellenőrzik. Például a feladatfolyamban a moderátor számára "csapdák" jelennek meg — olyan hirdetések, amelyekre már vannak megoldások. Ha a moderátor döntése nem egyezik a meglévővel, hibaelszámolásban részesül.
Egy hirdetés ellenőrzésére a moderátor átlagosan 10 másodpercet fordít. Ezzel párhuzamosan a hibák száma nem haladja meg a 0,5%-ot a vizsgált hirdetések közül.
Népi moderálás
Az Odnoklassniki csapatai még tovább mentek, és felhasználják a "terem segítségét": készítettek egy alkalmazásjátékot a közösségi hálózathoz, amelyben gyorsan meg lehet jelölni egy nagy mennyiségű adatot, kiemelve valamilyen rossz jellemzőt — Odnoklassniki moderátor (). Jó módszer, hogy kihasználják az OK felhasználóinak segítségét, akik arra törekednek, hogy a tartalom kellemesebb legyen.

Játék, amelyben a felhasználók megjelölik azokat a fényképeket, amelyeken telefonszám látható.
Bármely hirdetéssort az Odnoklassniki Moderátor játékba lehet átirányítani. Mindez, amit a játék felhasználói jelölnek, ezután a belső moderátorokhoz kerül ellenőrzésre. Ez a séma lehetővé teszi a hirdetések blokkolását, amelyekhez még nem készült szűrő, és mellékesen tanulási mintákat is létrehoz.
A moderálási eredmények tárolása
Minden moderációs döntést megőrizzük, hogy később ne kelljen újra feldolgozni azokat a hirdetéseket, amelyekre már született valamilyen döntés.
Naponta millió klaszter jön létre a hirdetésekről. Idővel minden klaszter kap egy "jó" vagy "rossz" megjelölést. Minden új hirdetés vagy azok szerkesztése, ha egy megjelölt klaszterbe kerül, automatikusan megkapja a klaszter határozatát. Ilyen automatikus határozatokból naponta körülbelül 20 ezer keletkezik.

Ha a klaszterhez nem érkeznek új hirdetések, akkor törlésre kerül a memóriából, és a hash-e, valamint a döntés beírásra kerül az Apache Cassandrába.
Amikor a platform új hirdetést kap, először megpróbál hasonló klasztert találni a már létrehozottak között, és abból átvenni a döntést. Ha nincs hasonló klaszter, a platform a Cassandrát keresi. Megtalálta? Remek, alkalmazza a döntést a klaszterre és elküldi a Yula számára. Az ilyen "visszatérő" döntésekből naponta átlagosan 70 ezer gyűlik össze – a teljes mennyiség 8 %-a.
Összefoglalva
Két és fél éve használjuk az Odnoklassniki moderáló platformot. Az eredmények tetszenek nekünk:
- A napi hirdetések 94 %-át automatikusan moderáljuk.
- A moderálási költségeket egy hirdetésre 2 rubelről 7 kopejkára csökkentettük.
- A kész eszköznek köszönhetően elfeledtük a moderátorok kezelésével kapcsolatos problémákat.
- 2,5-ször növeltük a manuálisan feldolgozott hirdetések számát ugyanazzal a moderátori létszámmal és költségvetéssel. A manuális moderálás minősége is nőtt az automatizált ellenőrzés révén, és körülbelül 0,5 % hibát mutat.
- Gyorsan lefedjük az új spam típusokat szűrőkkel.
- Gyorsan csatlakoztatjuk az új részlegeket a moderáláshoz . 2017 óta a Yulában megjelentek az Ingatlanok, Állások és Autók vertikálok.
Forrás: habr.com
