每個使用者可以創建自己的內容(UGC - 用戶生成的內容)的服務不僅要解決業務問題,還要在 UGC 中整理事情。 不良或低品質的內容審核最終會降低服務對使用者的吸引力,甚至終止其營運。
今天,我們將向您介紹 Yula 和 Odnoklassniki 之間的協同作用,這有助於我們有效地管理 Yula 中的廣告。
一般來說,協同是一件非常有用的事情,在現代世界,當技術和趨勢變化非常快時,它可以變成救星。 為什麼要浪費稀缺的資源和時間來發明一些已經發明並在你腦海中浮現的東西?
當我們面臨審核用戶內容(圖片、文字和連結)的全部任務時,我們也有同樣的想法。 我們的用戶每天向 Yula 上傳數百萬條內容,如果沒有自動處理,則完全不可能手動審核所有這些資料。
因此,我們使用了一個現成的審核平台,當時我們 Odnoklassniki 的同事已經將這個平台完成到了「近乎完美」的狀態。
為什麼是奧德諾克拉斯尼基?
每天,數以千萬計的用戶來到社交網路並發布數十億條內容:從照片到影片和文字。 Odnoklassniki 審核平台有助於檢查大量資料並抵制垃圾郵件發送者和機器人。
OK 審核團隊已經累積了大量經驗,12 年來一直在改進其工具。 重要的是,他們不僅可以分享現成的解決方案,還可以客製化其平台架構以適應我們的特定任務。
從現在起,為了簡潔起見,我們將 OK 審核平台簡稱為「平台」。
一切如何運作
Yula 和 Odnoklassniki 之間的資料交換是透過以下方式建立的
我們為什麼選擇這個工具:
- 在尤拉,所有廣告均經過後期審核,因此最初不需要同步回應。
- 如果出現錯誤段落且 Yula 或 Odnoklassniki 不可用(包括由於某些峰值負載),那麼來自 Kafka 的資料不會在任何地方消失,並且可以稍後讀取。
- 該平台已經與 Kafka 集成,因此大多數安全問題都已解決了。
對於使用者在 Yula 中建立或修改的每個廣告,都會產生一個包含資料的 JSON,並將其放置在 Kafka 中以供後續審核。 公告從 Kafka 加載到平台中,並在平台上自動或手動進行裁決。 不良廣告會被有理由屏蔽,平台未發現違規的廣告將被標記為「良好」。 然後,所有決策都會傳回 Yula 並應用到服務中。
最後,對於 Yula 來說,這一切都歸結為簡單的操作:向 Odnoklassniki 平台發送廣告並返回「好的」解決方案,或者為什麼不「好的」。
自動加工
廣告到達平台後會發生什麼事? 每個廣告分為幾個實體:
- 姓名,
- 描述,
- 相片,
- 使用者選擇的廣告類別和子類別,
- 價格。
然後,平台對每個實體執行聚類以查找重複項。 此外,文字和照片根據不同的方案進行聚類。
在聚類之前,文字會被標準化以刪除特殊字元、更改的字母和其他垃圾。 接收到的資料被分成 N 元組,每個元組都經過雜湊處理。 結果是許多獨特的哈希值。 文本之間的相似度由下式決定
人們已經為照片發明了各種黏合圖像的選項,從比較 pHash 圖片到使用神經網路搜尋重複項。
最後一種方法是最「嚴厲」的。 為了訓練模型,我們選擇了影像三元組 (N, A, P),其中 N 與 A 不相似,P 與 A 相似(是半重複)。 然後神經網路學會讓A和P盡可能接近,讓A和N盡可能遠。 與簡單地從預先訓練的網路中獲取嵌入相比,這會導致誤報更少。
當神經網路接收影像作為輸入時,它會為每個影像產生 N(128) 維向量,並請求評估影像的鄰近度。 接下來,計算一個閾值,在該閾值下,接近的圖像被視為重複。
該模型能夠巧妙地找到專門從不同角度拍攝相同產品的垃圾郵件發送者,以繞過 pHash 比較。
神經網路將垃圾郵件照片黏合在一起作為重複項的範例。
在最後階段,透過文字和圖像同時搜尋重複廣告。
如果兩個或多個廣告在一個叢集中黏在一起,系統會啟動自動阻止,使用某些演算法選擇要刪除的重複項和要保留的重複項。 例如,如果兩個用戶在廣告中使用相同的照片,系統將封鎖較新的廣告。
建立後,所有叢集都會經過一系列自動過濾器。 每個過濾器都會為群集分配一個分數:它包含該過濾器識別的威脅的可能性有多大。
例如,系統分析廣告中的描述並為其選擇潛在的類別。 然後,它採用機率最大的類別,並將其與廣告作者指定的類別進行比較。 如果它們不匹配,則會因錯誤的類別而封鎖廣告。 由於我們是善良和誠實的,我們直接告訴使用者他需要選擇哪個類別才能讓廣告通過審核。
類別不正確的屏蔽通知。
機器學習在我們的平台上感覺就像在家一樣。 例如,在它的幫助下,我們可以搜尋俄羅斯聯邦禁止的商品的名稱和描述。 神經網路模型會仔細地「檢查」這些圖像,看看它們是否包含 URL、垃圾簡訊、電話號碼和相同的「禁止」資訊。
如果他們試圖銷售偽裝成合法產品的違禁產品,並且標題或描述中沒有文字,我們會使用圖像標籤。 對於每個圖像,最多可以添加 11 個不同的標籤來描述圖像中的內容。
他們試圖將水煙偽裝成茶炊來銷售。
與複雜的過濾器並行,簡單的過濾器也可以工作,解決與文字相關的明顯問題:
- 反物質;
- URL 和電話號碼偵測器;
- 提及即時通訊工具和其他聯絡人;
- 減價;
- 不賣任何東西的廣告等
如今,每個廣告都要經過 50 多個自動過濾器的細篩,試圖找出廣告中的不良內容。
如果所有偵測器都不起作用,則會向尤拉發送回應,表示廣告「很可能」處於完美狀態。 我們自己使用這個答案,訂閱賣家的用戶會收到有關新產品上市的通知。
通知賣家有新商品。
因此,每個廣告都充滿了元數據,其中一些是在創建廣告時產生的(作者的 IP 位址、用戶代理、平台、地理位置等),其餘的則是每個過濾器發出的分數。
公告隊列
當廣告到達平台時,系統會將其放入其中一個佇列中。 每個隊列都是使用數學公式創建的,該公式以檢測任何不良模式的方式組合廣告元數據。
例如,您可以在「手機」類別中建立一個由據稱來自聖彼得堡的 Yula 用戶建立的廣告佇列,但他們的 IP 位址來自莫斯科或其他城市。
一個用戶在不同城市發布的廣告範例。
或者,您可以根據神經網路分配給廣告的分數形成隊列,並按降序排列。
每個隊列根據自己的公式為廣告分配最終分數。 然後您可以透過不同的方式進行:
- 指定廣告將受到某種類型的屏蔽的閾值;
- 將佇列中的所有廣告傳送給版主進行人工審核;
- 或結合前面的選項:指定自動封鎖閾值並將未達到此閾值的廣告傳送給版主。
為什麼需要這些隊列? 假設用戶上傳了一張槍枝照片。 神經網路為其分配 95 到 100 之間的分數,並以 99% 的準確度確定圖片中存在武器。 但如果分數低於95%,模型的準確率開始下降(這是神經網路模型的特徵)。
結果,根據分數模型形成一個隊列,並且收到的在 95 到 100 之間的廣告將自動封鎖為「禁止產品」。 分數低於 95 分的廣告將發送給審核員進行手動處理。
帶墨盒的巧克力貝萊塔。 僅適用於手動審核! 🙂
手動審核
2019 年初,Yula 約 94% 的廣告都是自動審核的。
如果平台無法決定某些廣告,則會將其傳送給手動審核。 Odnoklassniki 開發了自己的工具:版主的任務立即顯示所有必要的資訊以做出快速決定 - 廣告是否合適或應該被阻止,並說明原因。
為了確保服務品質在手動審核期間不會受到影響,人們的工作會受到持續監控。 例如,在任務流程中,主持人會看到「陷阱」——已經有現成解決方案的廣告。 如果主持人的決定與最終的決定不一致,則主持人會被告知錯誤。
平均而言,審核者會花 10 秒時間檢查一則廣告。 此外,錯誤數量不超過所有已驗證廣告的0,5%。
人們的節制
Odnoklassniki 的同事更進一步,利用了“觀眾的幫助”:他們為社交網絡編寫了一個遊戲應用程序,您可以在其中快速標記大量數據,突出顯示一些不好的跡象 - Odnoklassniki 版主(
一種遊戲,用戶可以在其中標記帶有電話號碼的照片。
平台中的任何廣告佇列都可以重定向到 Odnoklassniki Moderator 遊戲。 遊戲使用者標記的所有內容都會發送給內部管理員進行驗證。 此方案可讓您封鎖尚未建立過濾器的廣告,並同時建立訓練樣本。
儲存審核結果
我們保存審核期間所做的所有決定,以便我們不會重新處理那些我們已經做出決定的廣告。
每天基於廣告創建數以百萬計的集群。 隨著時間的推移,每個簇都會被標記為“好”或“壞”。 每個新廣告或其修訂版進入有標記的群集後,都會自動從群集本身接收解決方案。 每天大約有 20 萬個這樣的自動解決方案。
如果沒有新的公告到達集群,則會將其從記憶體中刪除,並將其哈希值和解決方案寫入 Apache Cassandra。
當平台收到新的廣告時,它首先嘗試在已建立的廣告中找到相似的集群,並從中找到解決方案。 如果沒有這樣的集群,平台就會前往 Cassandra 並在那裡尋找。 你找到了嗎? 太棒了,將解決方案應用於叢集並將其發送給 Yula。 每天平均有 70 萬個這樣的「重複」決定——佔總數的 8%。
總結
我們使用 Odnoklassniki 審核平台已經兩年半了。 我們喜歡這樣的結果:
- 我們每天自動審核 94% 的廣告。
- 審核一則廣告的成本從 2 盧布降至 7 戈比。
- 感謝現成的工具,我們忘了管理版主的問題。
- 在管理員數量和預算相同的情況下,我們將手動處理的廣告數量增加了 2,5 倍。 由於自動化控制,手動審核的品質也有所提高,誤差在 0,5% 左右波動。
- 我們透過過濾器快速覆蓋新型垃圾郵件。
- 我們快速將新部門連結起來進行審核
《尤拉垂直》 。 自 2017 年以來,Yula 增加了房地產、職缺和汽車垂直領域。
來源: www.habr.com