Як мы мадэруем аб'явы

Як мы мадэруем аб'явы

Кожны сэрвіс, чые карыстачы могуць ствараць уласны кантэнт (UGC – User-generated content), змушаны не толькі вырашаць бізнэс-задачы, але і наводзіць парадак у UGC. Дрэнная ці няякасная мадэрацыя кантэнту ў выніку можа паменшыць прывабнасць сэрвісу для карыстачоў, аж да спыненні яго працы.

Сёння мы вам раскажам пра сінэргію паміж Юлай і Аднакласнікамі, якая дапамагае нам эфектыўна мадэраваць аб'явы ў Юлі.

Сінэргія наогул штука вельмі карысная, а ў сучасным свеце, калі тэхналогіі і трэнды змяняюцца вельмі хутка, яна можа ператварыцца ў палачку-ратавалачку. Навошта марнаваць дэфіцытныя рэсурсы і час на вынаходства таго, што да цябе ўжо вынайшлі і давялі да розуму?

Гэтак жа падумалі і мы, калі перад намі ва ўвесь рост паўстала задача мадэрацыі карыстацкага кантэнту - карцінак, тэксту і спасылак. Нашы карыстачы кожны дзень загружаюць у Юлу мільёны адзінак кантэнту, і без аўтаматычнай апрацоўкі прамадэраваць усе гэтыя дадзеныя ўручную наогул не рэальна.

Таму мы скарысталіся ўжо гатовай платформай мадэрацыі, якую да таго часу нашы калегі з Аднакласнікаў дапілавалі да стану "амаль дасканаласць".

Чаму Аднакласнікі?

Штодня ў сацыяльную сетку прыходзяць дзясяткі мільёнаў карыстальнікаў, якія публікуюць мільярды адзінак кантэнту: ад фатаграфій да відэа і тэкстаў. Платформа мадэрацыі Аднакласнікаў дапамагае правяраць вельмі вялікія аб'ёмы дадзеных і супрацьдзейнічаць спамерам і робатам.

Каманда мадэрацыі ОК назапасіла вельмі вялікі досвед, паколькі ўдасканальвае свой інструмент ужо 12 гадоў. Важна, што яны не толькі маглі падзяліцца сваімі гатовымі рашэннямі, але і настроіць архітэктуру сваёй платформы пад нашы спецыфічныя задачы.

Як мы мадэруем аб'явы

Далей для сцісласці будзем зваць платформу мадэрацыі ОК проста "платформа".

Як усё ўладкована

Паміж Юлай і Аднакласнікамі абмен дадзенымі наладжаны праз Apache Kafka.

Чаму мы выбралі гэты інструмент:

  • У Юлі ўсе аб'явы праходзяць постмадэрацыю, таму першапачаткова сінхронны адказ не патрабаваўся.
  • Калі здарыцца люты абзац, і Юла ці Аднакласнікі будуць недаступныя, у тым ліку з-за якіх-небудзь пікавых нагрузак, то дадзеныя з Kafka нікуды не знікнуць і пазней іх можна будзе дачытаць.
  • Платформа ўжо была інтэграваная з Kafka, таму большасць пытанняў бяспекі аказаліся вырашаны.

Як мы мадэруем аб'явы

На кожнае створанае ці змененае карыстачом аб'ява ў Юлі фармуецца JSON з дадзенымі, які кладзецца ў Kafka для наступнай мадэрацыі. З Kafka аб'явы загружаюцца ў платформу, дзе па іх выносяцца рашэнні аўтаматычна ці ўручную. Дрэнныя аб'явы блакуюцца з указаннем прычыны, а тыя, у якіх платформа не знайшла парушэнняў, пазначаюцца як "добрыя". Затым усе рашэнні адпраўляюцца зваротна ў Юлу і прымяняюцца ў сэрвісе.

У выніку, для Юлы ўсё зводзіцца да простых дзеянняў: адправіць аб'яву ў платформу Аднакласнікаў і зваротна атрымаць рэзалюцыю "ок", ці чаму не "ок".

Аўтаматычная апрацоўка

Што адбываецца з аб'явай пасля таго, як яна трапляе ў платформу? Кожная аб'ява разбіваецца на некалькі сутнасцяў:

  • назва,
  • апісанне,
  • фатаграфіі,
  • абраная карыстальнікам катэгорыя і падкатэгорыя аб'явы,
  • цана.

Як мы мадэруем аб'явы

Затым па кожнай сутнасці платформа праводзіць кластарызацыю, каб знайсці дублікаты. Прычым тэкст і фатаграфіі кластарызуюцца па розных схемах.

Тэксты перад кластэрызацыяй нармалізуюцца, каб выкінуць спецзнакі, змененыя літары і іншае смецце. Атрыманыя дадзеныя разбіваюцца на N-грамы, кожная з якіх хэшуецца. У выніку атрымліваецца мноства ўнікальных хэшаў. Падабенства паміж тэкстамі лічыцца па меры Жаккара паміж двума атрыманымі мноствамі. Калі падабенства больш парогавай, то тэксты склейваюцца ў адзін кластар. Для паскарэння пошуку падобных кластараў выкарыстоўваецца MinHash і Locality-sensitive hashing.

Для фатаграфій прыдуманы розныя варыянты злепвання малюнкаў, ад параўнання pHash карцінак да пошуку дублікатаў з дапамогай нейронавай сеткі.

Апошні спосаб самы "суровы". Для навучання мадэлі падбіраліся такія тройкі малюнкаў (N, A, P), у якіх N не падобны на А, а P – падобны на А (з'яўляецца полудубликатом). Затым нейрасетка вучылася рабіць так, каб A і P былі максімальна блізкія, а A і N - максімальна далёкія. Так атрымліваецца менш ілжывых спрацоўванняў у параўнанні з тым, каб проста ўзяць эмбедынгі ад прадугледжанай сеткі.

Калі нейросетка атрымлівае на ўваход карцінкі, яна для кожнай з іх генеруе N(128)-мерны вектар і робіцца запыт на адзнаку блізкасці малюнка. Далей разлічваецца парог, пры якім блізкія выявы лічацца дублікатамі.

Мадэль умее па-майстэрску знаходзіць спамераў, якія спецыяльна фатаграфуюць адзін і той жа тавар з розных ракурсаў, каб абыйсці параўнанне па pHash.

Як мы мадэруем аб'явыЯк мы мадэруем аб'явы
Прыклад спамерскіх фота, злепленых нейронавай сеткай як дублікаты.

На канчатковым этапе дублікаты аб'яваў шукаюцца адначасова і па тэксце, і па выяве.

Калі ў кластары склейваюцца дзве і больш аб'явы, сістэма запускае аўтаматычнае блакіроўку, якая па пэўных алгарытмах выбірае, якія дублікаты выдаліць, а якія пакінуць. Напрыклад, калі ў двух карыстальнікаў у аб'яве аднолькавыя фатаграфіі, то сістэма заблакуе больш свежую аб'яву.

Пасля стварэння ўсе кластары праходзяць праз шэраг аўтаматычных фільтраў. Кожны фільтр выстаўляе кластару колькасць ачкоў (score): з якой верагоднасцю той утрымоўвае пагрозу, якую выяўляе гэты фільтр.

Напрыклад, сістэма аналізуе апісанне ў аб'яве і выбірае для яго патэнцыйныя катэгорыі. Затым бярэ тую, у якой максімальная верагоднасць, і параўноўвае з катэгорыяй, якую паказаў аўтар аб'явы. Калі яны не супадаюць, аб'ява блакуецца за няправільную катэгорыю. А паколькі мы добрыя і сумленныя, то прама які гаворыцца карыстачу, якую катэгорыю яму трэба абраць, каб аб'ява прайшло мадэрацыю.

Як мы мадэруем аб'явы
Апавяшчэнне аб блакіроўцы за няправільную катэгорыю.

У нашай платформе машыннае навучанне адчувае сябе як дома. Напрыклад, з яго дапамогай мы шукаем у назвах і апісаннях забароненыя ў РФ тавары. А мадэлі нейронавых сетак прыдзірліва "разглядаюць" выявы, ці няма на іх URL-адрасоў, спамерскіх тэкстаў, тэлефонаў і ўсё той жа "забароненкі".

Для выпадкаў, калі забаронены тавар спрабуюць прадаць, замаскіраваўшы пад нешта легальнае, і пры гэтым няма ніякага тэксту ні ў назове, ні ў апісанні, мы выкарыстоўваем тэгаванне малюнкаў. Для кожнага выявы могуць быць прастаўлены да 11 тысяч розных тэгаў, якія апісваюць, што знаходзіцца на малюнку.

Як мы мадэруем аб'явы
Кальян спрабуюць прадаць, замаскіраваўшы яго пад самавар.

Паралельна са складанымі фільтрамі працуюць і простыя, рашаючыя відавочныя задачы, звязаныя з тэкстам:

  • антымат;
  • дэтэктар URL-адрасоў і тэлефонных нумароў;
  • згадка мэсэнджараў і іншых кантактаў;
  • прыніжаная цана;
  • аб'явы, у якіх нічога не прадаецца, і г.д.

Сёння кожная аб'ява праходзіць праз дробнае сіта з больш за 50 аўтаматычных фільтраў, якія спрабуюць знайсці ў аб'яве нешта дрэннае.

Калі ні адзін з дэтэктараў не спрацаваў, то ў Юлу адпраўляецца адказ, што з аб'явай, "хутчэй за ўсё", поўны парадак. Мы гэты адказ прымяняем у сябе, і карыстальнікам, якія падпісаліся на прадаўца, прыходзіць апавяшчэнне аб з'яўленні новага тавару.

Як мы мадэруем аб'явы
Апавяшчэнне аб тым, што ў прадаўца з'явіўся новы тавар.

У выніку, кожная аб'ява «абрастае» метададзенымі, частка з якіх генеруецца пры стварэнні аб'явы (IP-адрас аўтара, user-agent, платформа, геолокация і г.д.), а астатняе - гэта score, выдадзеныя кожным фільтрам.

Чэргі аб'яваў

Калі аб'ява пападае ў платформу, сістэма кладзе яго ў адну з чэргаў. Кожная чарга фарміруецца з дапамогай матэматычнай формулы, якая камбінуе метададзеныя аб'явы такім чынам, каб выявіць які-небудзь дрэнны патэрн.

Напрыклад, можна стварыць чаргу аб'яў у катэгорыі "Сотавыя тэлефоны" ад карыстальнікаў Юлы нібыта з Санкт-Пецярбурга, але пры гэтым іх IP-адрасы з Масквы ці іншых гарадоў.

Як мы мадэруем аб'явы
Прыклад аб'яваў, размешчаных адным карыстальнікам у розных гарадах.

Ці можна фармаваць чэргі на аснове балаў, якія нейросетка прысвойвае аб'явам, расстаўляючы іх па змяншэнні.

Кожная чарга, паводле сваёй формулы, прысвойвае выніковы score аб'яве. Далей можна дзейнічаць па-рознаму:

  • паказаць парогавае значэнне, пры якім аб'ява будзе атрымліваць пэўны тып блакіроўкі;
  • усе аб'явы ў чарзе адправіць мадэратарам на ручную праверку;
  • ці скамбінаваць папярэднія варыянты: паказаць парог аўтаматычнага блакавання і адправіць мадэратарам тыя аб'явы, якія не дасягнулі гэтага парога.

Як мы мадэруем аб'явы

Навошта патрэбны гэтыя чэргі? Дапушчальны, карыстач загрузіў фатаграфію агнястрэльнай зброі. Нейрасец прысвойвае ёй score ад 95 да 100 і з 99-адсоткавай дакладнасцю вызначае, што на малюнку зброю. Але калі значэнне score ніжэй за 95%, дакладнасць мадэлі пачынае зніжацца (такая асаблівасць мадэляў нейрасетак).

У выніку фармуецца чарга на аснове score мадэлі, і тыя з аб'яваў, якія атрымалі ад 95 да 100, аўтаматычна блакуюцца як "Забаронены тавар". Аб'явы з колькасцю балаў ніжэй за 95 адпраўляюцца на ручную апрацоўку мадэратарам.

Як мы мадэруем аб'явы
Шакаладная Beretta з патронамі. Толькі для ручной мадэрацыі! 🙂

Ручная мадэрацыя

На пачатак 2019 года каля 94% усіх аб'яў у Юлі мадэруюцца аўтаматычна.

Як мы мадэруем аб'явы

Калі платформа не можа вызначыцца з нейкімі аб'явамі, тое адпраўляе іх на ручную мадэрацыю. Аднакласнікі распрацавалі ўласную прыладу: у заданнях для мадэратараў адразу адлюстроўваецца ўся неабходная інфармацыя для прыняцця хуткага рашэння - аб'ява прыдатнае ці варта яго заблакаваць з указаннем чынніку.

А каб пры ручной мадэрацыі не пакутавала якасць сэрвісу, праца людзей увесь час кантралюецца. Напрыклад, у струмені заданняў мадэратару паказваюцца "пасткі" - аб'явы, па якіх ужо ёсць гатовыя рашэнні. Калі рашэнне мадэратара не супадае з гатовым, мадэратару залічваюць памылку.

На праверку адной аб'явы мадэратар у сярэднім марнуе 10 секунд. Пры гэтым колькасць памылак складае не больш за 0,5% ад усіх правераных аб'яваў.

Народная мадэрацыя

Калегі з Аднакласнікаў пайшлі яшчэ далей, скарысталіся «дапамогай залы»: напісалі для сацсеткі дадатак-гульню, у якім можна хутка размячаць вялікую колькасць дадзеных, вылучаючы нейкую дрэнную прыкмету, - Мадэратар Аднакласнікаў (https://ok.ru/app/moderator). Добры спосаб скарыстацца дапамогай карыстальнікаў ОК, якія імкнуцца зрабіць кантэнт прыемней.

Як мы мадэруем аб'явы
Гульня, у якой карыстачы адзначаюць фатаграфіі, на якіх ёсць нумар тэлефона.

Любую чаргу аб'яў у платформе можна перанакіраваць у гульню Мадэратар Аднакласнікаў. Усё, што пазначаюць карыстачы гульні, затым паступае ўнутраным мадэратарам на праверку. Такая схема дазваляе блакаваць аб'явы, па якіх яшчэ не створаны фільтры, і адначасна ствараць навучальныя выбаркі.

Захоўванне вынікаў мадэрацыі

Мы захоўваем усе прынятыя пры мадэрацыі рашэнні, каб потым не апрацоўваць паўторна тыя аб'явы, па якіх ужо выносілі нейкае рашэнне.

Штодня па аб'явах ствараюцца мільёны кластараў. З часам кожны кластар атрымлівае адзнаку "добры" ці "дрэнны". Кожная новая аб'ява або яго рэдакцыя, трапляючы ў кластар з адзнакай, аўтаматычна атрымлівае рэзалюцыю самога кластара. Такіх аўтаматычных рэзалюцый за суткі набягае каля 20 тысяч.

Як мы мадэруем аб'явы

Калі ў кластар не паступаюць новыя аб'явы, ён выдаляецца з памяці, а яго хэш і рашэнне запісваюцца ў Apache Cassandra.

Калі платформа атрымлівае новую аб'яву, то спачатку спрабуе знайсці падобны кластар сярод ужо створаных і ўзяць рашэнне з яго. Калі такога кластара няма, платформа ідзе ў Cassandra і шукае тамака. Знайшла? Выдатна, прымяняе рашэнне да кластара і адпраўляе ў Юлу. Такіх «паўторных» рашэнняў штодня набіраецца ў сярэднім 70 тысяч - 8% ад агульнай колькасці.

Падводзячы вынік

Мы карыстаемся платформай мадэрацыі Аднакласнікаў два з паловай гады. Вынікі нам падабаюцца:

  • Аўтаматычна мадэруем 94% усіх аб'яваў за суткі.
  • Кошт мадэрацыі адной аб'явы знізілі з 2 рублёў да 7 капеек.
  • Дзякуючы гатовай прыладзе забыліся аб праблемах кіравання мадэратарамі.
  • У 2,5 разы павялічылі колькасць апрацаваных уручную аб'яваў пры той жа колькасці мадэратараў і бюджэце. Яшчэ і якасць ручной мадэрацыі ўзрасла за кошт аўтаматызаванага кантролю, і вагаецца ў раёне 0,5% памылак.
  • Аператыўна пакрываем фільтрамі новыя тыпы спаму.
  • Хутка падлучаем да мадэрацыі новыя падраздзяленні «Юла Вертыкалі». З 2017 года ў Юлі з'явіліся вертыкалі Нерухомасці, Вакансіі і Аўто.

Крыніца: habr.com

Дадаць каментар