當前位置:
首頁 > 最新 > Kaggle挑戰賽冠軍:如何發現網路惡意評論並分類

Kaggle挑戰賽冠軍:如何發現網路惡意評論並分類

作者:Chun Ming Lee

編譯:Bing

在網路上討論你關心的事情可能很困難,我們經常會遇到充滿攻擊性的評論甚至騷擾,許多人因此不再表達自己,也聽不到更多不同的意見。各大平台努力地促進交流對話,導致很多社區對評論進行了限制,甚至關閉了評論。

AI對話團隊(Conversation AI)是谷歌和Jigsaw的合作項目,他們致力於開發一些工具來改善在線交流。其中一個研究方向是網路上的消極行為,例如惡意的有毒評論(即粗魯、不尊重人或可能讓人不爽的言論)。目前為止,他們已經通過Perspective API構建了一系列公開可用的模型,例如toxicity。但是目前的模型仍存在錯誤,而且他們不支持用戶選擇他們想要查找的「有毒」評論的類型(例如某些平台可能允許褻瀆言論的存在,但不能容忍其他類型的消極評論)。

GIF

於是,Jigsaw和谷歌在Kaggle上舉辦了一場挑戰賽,要求選手建立一個多頭(multi-headed)模型,能夠檢測出多種惡意評論,例如威脅、猥褻、攻擊性話語以及實名人身攻擊等話語,且性能要優於目前的模型,數據來源於維基百科討論區。

比賽公布後,共有4551個團隊參加了此次挑戰賽,最終獲勝者是來自卡內基梅隆大學的Chun Ming Lee團隊,他們將解決方案在Kaggle上公布了出來,以下是論智對其進行的大致編譯。

首先要感謝Jigsaw和Kaggle提供這次數據科學挑戰賽,並且恭喜每位完成的參與者們,這是一場馬拉松,絕不是短跑比賽!

我們提出的方案總結起來共有四個要點:

多樣的預訓練嵌入(基礎public LB為0.9877)

將翻譯當做訓練/測試時間增強(train/test-time augmentation,TTA)(將LB從0.9877提升至0.9880)

Rough-bore偽標籤(pseudo-labelling,PL)(將LB從0.9880提升至0.9885)

強大的CV和stacking框架(將LB從0.9885提升至0.9890)

由於我們並沒有NLP相關的知識背景,所以我們的總體策略是以系統的方式測試針對該問題的標準機器學習和深度學習技術。我們很高興看到TTA和偽標籤等技術在這裡有效地發揮作用。

關於硬體,我們有6個GPU,經過優化的代碼能讓我們在一百多萬個樣本中(TTA+PL)訓練處理約80%的OOF數據,每個模型用2小時。

具體方法

多樣的預訓練嵌入

由於模型90%的複雜性都在於嵌入層,我們決定把注意力放在嵌入層上,而非後嵌入層。對於後者,我們將兩個BiGru層輸入兩個最終密集層(Dense layer)。對於前者,我們在網路中搜索可預先訓練的詞嵌入,並將其設置在FastText和Glove的高維嵌入上,它們經過了Common Crawl、維基百科和Twitter的預訓練。

將翻譯當做訓練/測試時間增強(TTA)

我們借鑒了Pavel Ostyakov的機器翻譯理念,利用翻譯成英語的法語、德語和西班牙語訓練和測試數據集以進行增強。考慮到有可能造成信息泄露,我們確保將翻譯保留在train-val split的同一邊作為原始評論。對於預測,我們簡單的對四種評論做了平均預測概率(英語,德語,法語,西班牙語)。

這對我們模型的性能產生了巨大的影響。例如,

Vanilla Bi-GRU模型:0.9862 LB

「 (w/ train-time augments): 0.9867 LB

「 (w/ test-time augments): 0.9865 LB

「 (w/ both train/test-time augments): 0.9874 LB

換句話說,只需要一個TTA模型就能打敗大多數團隊。

然而我們在想這一技術是否只對於「修正」非英文評論有效——我們測試了直接將原始評論翻譯成英語(非英文評論會有一些干擾),導致模型的性能不如完全的增強形式。

Rough-bore偽標籤(PL)

我們嘗試了好幾種偽標籤變體:規範化每批更新、改變損失函數等。表現最好的變體是利用表現最好的整體對測試樣本進行簡單標記,將它們添加到訓練集中,並進行收斂訓練。

穩定的CV和stacking框架

對於堆疊,我們使用了算術平均和堆疊的加權平均,這比任何一種方法的效果都好(?.0001)。們主要使用LightGBM,比XGBoost更快,並能通過貝葉斯優化達到更好地CV分數。

我們在貝葉斯優化運行的250次實驗中選擇了最佳參數;參數中的關鍵點是深度較小且強L1正則化的小型樹。我們用不同的seed對6次運行DART和GBDT的過程進行打包(bagged),已解決堆疊過程中的潛在差異。

對於CV,我們記錄了準確性、log loss和AUC。如果將模型添加到我們的棧中,除了能提高public board的分數,還可以改善CV-log loss和CV-AUC。我們丟棄了堆棧+混合中的很多模型,因為擔心過度擬合而無法達到上述三個標準的任何一個。

其他收穫

在思考解決方案的過程中,我們嘗試了不同的方法,也都成功了。我們認為有幫助的地方有以下幾點:

由於模型大多是因為預訓練嵌入而變得複雜,所以架構帶來微小的變化對分數的影響很小。更多的密集層、高斯與空間dropout、密集層次上多餘的dropout層、注意力、時間分布的密集層以及其他因素也不會對模型的整體分數產生較大影響。

預處理也不是特別有效,雖然會在某些模型的嵌入中留下標點符號,這有助於堆疊。

許多評論只在最後一句話有攻擊性,所以除了起始的200—300個字元模型之外,還要增加訓練最後徐25—50個字元的模型。

一些方法在處理單詞「排序」的問題上有困難。由兩個單片語成的短語交換位置後意思可能完全不一樣,這意味著CNN方法很難使用,因為它們將最大池化作為支持。我們最好的CNN比最好的RNN得分低了0.0015。

總的來說,其他結構很難達到與RNN相同水平的表現力。唯一達到RNN標準的架構是Attention Is All You Need,然而它的訓練時間更長。

另外,TensorFlow在很多方面都優於Keras——可以試著在Keras中安裝Attention Is All You Need或者可擴展的模型以進行實際演示。也就是說,Keras也很棒,尤其是對快速迭代。

原文地址:www.kaggle.com/c/jigsaw-toxic-comment-classification-challenge/discussion/52557

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 論智 的精彩文章:

MIT提出TbD網路,讓視覺問答模型更易於解釋同時保持高性能
簡單隨機搜索:強化學習的高效途徑

TAG:論智 |