當前位置:
首頁 > 知識 > Kaggle 惡意評論分類 top 1 %方案

Kaggle 惡意評論分類 top 1 %方案

文首發於知乎專欄「數據科學之旅」,AI 研習社獲其授權轉載。


賽題描述

給定來自維基百科的評論,完成6個類別的多標籤分類(每條樣本可能屬於多個類別),大概就是toxic(惡意),severetoxic(窮凶極惡),obscene(猥瑣),threat(恐嚇),insult(侮辱),identityhate(種族歧視)其中幾個,評論數據來自於維基百科以及部分的長尾干擾數據,數據比較臟,有近百種語言,一般的網站都會做一些敏感詞的過濾,所以很多樣本就是類似FFFFCCCCKKKK這樣的話,甚至還有豎中指的字元畫。所以這又不同於一般的情感分類,如何解決OOV(out of vocab)也是本題一個關鍵。這篇文章夾雜了比較多的私貨,歡迎大家拍磚。


方案

大概提交的分數的走勢如下。短期暴漲是階段性的融合測試。持續性的上分都是有些技巧,主要是在下面幾個位置達到了分數突破。

分數走勢

做這個題的時候我自始至終保持的思路是,模型不是重點。如何解決OOV,數據不同源,外文分布差異,不規範詞的歸一化或者詞義單元抽取才是關鍵。

所以重大突破點主要在以下幾點:

細緻的數據預處理,這部分比較煩雜而且針對數據非常嚴重。大概就是大量重複字母的剔除 fucccccck -> 去掉很多c。爬蟲帶來的html痕迹去除。使用詞典做詞的歸一化等等。

跨領域的增量式詞向量。這也是我的本科畢設,如何解決把細分領域的詞向量放入一個已經預訓練好的向量空間中,保持其聚類性質,線性性質。對於這部分感興趣的可以參考論文。擴展一下,如何再GloVe的840B pretrianed詞向量中嵌入一個醫學corpus得到的詞向量。

Incrementally Learning the Hierarchical Softmax Function for Neural Language Models(AAAI 2017)

pseudo-labelling

這是一種對於有分布差異的數據進行半監督學習增強的方法。具體的原理和操作方法這篇博客講的很熟悉。簡單一句話就是,當前模型的預測結果,反過來作為訓練集繼續訓練,直至網路收斂。

pseudo-labelling

偽標籤半監督學習

將正常的單詞拆分成BPE單位。很對類似於fucker這樣的單詞,是可以拆分成更細碎的詞義單元。使用 BPE(位元組對編碼)的方式分離單詞能到到削減參數,增加泛化能力。

BPE在翻譯中用的很多。大家可以看一下這篇論文。 Transfer Learning across Low-Resource, Related Languages for Neural Machine Translation

翻譯外文。把俄中日法蒙德等亂七八糟的語言都變成英語。

模型主要有以下幾個:

GRU based: 單層,雙層,average/max/k-max/attention pooling,RCNN

CNN based: TextCNN, 2DCNN, deliated CNN, VDCNN, DPCNN

capsule based: BiGRU + capsule net

tfidf/hash/count feature based: FM/LGB/LR

集成方法:一些比較弱的模型之間做了stacking,複雜模型之間做了blending

在模型上想說一下幾點:

沒有一種模型是萬能的,方法 = 模型 + 數據。 之前在我的公眾號的一篇文章里講過, 一般性的認為,數據量小的時候,簡單模型和LSTM更適合文本分類。 長文本(文檔級別)數據更適合層次結構的模型。

LSTM比CNN更適合情感分類。具體的原因是LSTM能capture一些順序性的信息,而CNN的卷積核+pooling的結構,對於語序的損失很大。很顯然,我今天出去玩很不開心和我今天不出玩很開心明顯有不同的感情色彩,這種句子是字典方法和CNN based model的殺手。

幾個比較有意思的地方

這次我們的模型中使用了最新的capsule net的結構,還有借鑒了圖像語義的分割模型中的空洞卷積,取得了不錯的效果。這也是從差異性的角度考量做的一些工作,其實我是最不喜歡干這樣的事情,個人喜歡追求單模型的極致,追求對數據的充分理解。喜歡簡單幹凈有效的東西,複雜的東西無異於把路做絕,在數據上充分擬合,不能說不好,只能說欣賞不來。

失敗的嘗試:

情感詞典的使用。一些文本層次的人工特徵等。後來發現這種人工特徵不夠強,簡單的對tfidf做一個類間信息修正就可以把LGB 拉到0.9810+。在這種情感分類問題中tfidf一個明顯的問題就是,fuck這種單詞出現實在是太多以及太頻繁了,很容易被idf削弱,成為stop words一樣的存在,這時候就需要加上類間信息修正(這種詞的卡方檢驗排腦袋一想就很高,但是stop words就不一樣了)。

數據量不足以支撐模型複雜度的時候,不要輕易增加模型的參數規模,包括Embedding層也最好不要trainable。

標籤信息的使用,這6個標籤是有隱含的關係的,比如server_toxic 的一定屬於toxic, 這部分做了lable chain最後也沒有啥效果。之前知乎文本分類的比賽上,也有層次的標籤約束信息,而恰好我們去年研究過如何使用層次的標籤的信息做文本分類,可參考論文。Large-Scale Hierarchical Text Classification with Recursively Regularized Deep Graph-CNN (WWW 2018)

一開始想著解決抽取詞義單元的時候,沒有想到BPE,於是就就把corpus拆成了n-grams訓練詞向量硬懟,這樣硬懟的單模型perfomance雖然比較低,但是作為模型的多輸入是可以提升模型的性能的,我估計在某些hard-sample上做了修正。後來在data-thread看到第一的人說他用了一個sentpiece的外部數據,我點開看了下,發現了新天地,和我的想法不謀而合,於是愉快的換成了BPE,並且BPE有預訓練的embedding,可謂是十分強大。

一點感受:

大家在比賽之中多嘗試思考存在於數據和模型上的一些本質的東西,瞎懟和調參是沒啥用的,浪費電。多看看論文,也不可全信論文。做比賽9個月來,最大的收穫就是習慣性用批判性的眼光看論文,很多論文都是在講故事,方法是數據上的過擬合。真正state-of-art的東西,是可以直接當特徵提取器的,比如resnet, 一篇論文養活了多少家創業公司。

比賽到最後,還是拼融合,也是最無聊和實際中最沒有價值的一部分,我們單模型挺高的,不過N人行必有TOP K,基本的融合方法也要諳熟於心。

附上我隊友砍手豪大佬對本次比賽所有解答方案的一些總結:

https://zhuanlan.zhihu.com/p/34899693?group_id=961190993937268736

計算機視覺基礎(從演算法到實戰應用)班

限時拼團,最後一周

已有100+人參加了此拼團

最高每人優惠200元!

新人福利

關注 AI 研習社(okweiwu),回復1領取

【超過 1000G 神經網路 / AI / 大數據資料】

Kaggle 大神 Eureka 的高手進階之路


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

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


請您繼續閱讀更多來自 AI研習社 的精彩文章:

谷歌開啟 Naturalist 2018 挑戰賽,大型物種分類技術有望突破
Roofline Model 與深度學習模型的性能分析

TAG:AI研習社 |