第二屆搜狐內容識別算法大賽第一名分享

第二屆搜狐內容識別大賽冠軍LuckyRabbit團隊的解決方案

本文主要是向大家介紹一下團隊的解決方案,具體代碼和答辯PPT可以上 github

任務說明

比賽的網站是這裏,比賽時長是兩個半月、也算是時間很長的一個比賽了

任務要求

比賽的目的是給我們一篇新聞,希望我們給出:

  • 新聞是屬於全營銷類別、部分營銷類別、還是無營銷類別。這裏相當於是一個分類問題
  • 對部分營銷類別的新聞,我們要給出屬於營銷類別的文本片段和圖片。這裏是信息抽取和圖像分類的問題

數據格式

數據給出來的是原生的HTML格式,如下:

<title>惠爾新品 | 冷色系實木多層地板系列</title> <p>  </p> <br/><p>  <span style="font-size: 16px;">冷色系實木多層系列全新上市</span></p> P0000001.JPEG;P0000002.JPEG; 

我們要先把HTML解析成可訓練的文本和圖片

評分標準

官方使用的是F1-measure來進行得分評判
F1-measure

代碼流程

模型融合是打比賽的大殺器,我們團隊也是採用了這種方案,下面就來介紹一下我們團隊的代碼流程。

流程框圖

流程圖

流程說明

模型融合部分採用的是stacking策略,並且在第二層接了兩個trick。模型最後輸出的是分類的結果,在後面會接上規則來提取文本片段,圖像部分我們採用的ResNet來進行分類。下面來詳細說明各個模塊

數據預處理

  • 文本翻譯數據增強:把中文翻譯成英文、再把英文翻譯回中文,代碼中沒有給出,可自行調API接口
  • 圖片數據增強:圖片旋轉、平移、加噪聲、過採樣
  • 使用jieba分詞爲基本分詞組件
  • 詞表的選擇:我們嘗試過30萬的中文詞表和10萬的中文詞表,發現10萬左右的詞表是比較適合這個任務的

我們還嘗試過文本的其他數據增強手段如Drop和random但是對於這個任務效果並不是很好

特徵提取

  • gensim訓練好的300維詞向量 百度雲盤
  • TFIDF 特徵 + SVD進行降維度
    • 先使用TFIDF來提取關鍵詞特徵
    • 由於詞表太大,TFIDF的維度會特別高,因此我們使用SVD來進行降維。其實這一整套就相當於是一個LSA變換
  • 字向量特徵
    • 字向量訓練出來的模型雖然說精度上比詞向量要差,但是字向量和詞向量的差異性很大,有利於模型融合
  • 基礎特徵:是否含有手機號、微信號等
  • OCR文字提取
    提取圖片上包含的文字來補充文本分類信息,如下圖
    OCR樣例

單模型

深度學習模型

我們聯合了新聞文本和圖片上的文本信息來構建模型,基本框架如下圖所示
模型
有幾點需要注意

  • Embedding層的共用:模型的參數主要是集中在embedding層,共用可以減小模型參數,防止過擬合
  • ocr和文本分別輸入:由於ocr文字提取會有一定誤差,我們這裏採用了分別輸入的方式來避免這種差異性

機器學習模型

  • 輸入特徵爲TFIDF+SVD、Basic Features等
  • 這裏OCR出來的結果和新聞文本是做簡單拼接的方式
  • 模型有:xgboost、catboost、lightGBM、DNN

訓練方式

  • 主辦方還提供了未標註的數據集,我們這裏是用未標註的數據集來做預訓練,相當於是一個良好的初始化,再用正常的訓練集來訓練我們的模型。
  • 凍結Embedding層和開放Embedding層:由於embedding層的參數過多,我們這裏使用的方式是先凍結Embedding層,等模型後面部分收斂了之後,再開放embediing層進行微調。

模型比較

各種模型的得分如下

模型或方法 得分F1-measure
catboost 0.611
xgboost 0.621
lightgbm 0.625
dnn 0.621
textCNN 0.617
capsule 0.625
covlstm 0.630
dpcnn 0.626
lstm+gru 0.635
lstm+gru+attention 0.640

(ps 由於大賽評分系統關閉了,個別模型得分可能不太準確)

模型融合

我們這裏採用的是stacking策略,關於模型融合有一篇很好的文章,在這裏分享給大家點擊鏈接

Stacking

我們這裏採用的stacking總共是兩層,如下圖
stacking

  • ModelX是第一層輸出的OOF文件和pred文件
  • 除了ModelX文件之外,我們還需要新聞的特徵來做補充,防止模型陷入到ModelX文件中過擬合
  • 第二層使用的是簡單DNN來做第一層模型的挑選

Pesudo labeling

下面來介紹一個實戰利器,看起來沒啥用但是跑出來的結果非常好,這裏是一篇教程
簡單來說,它就是把模型預測出來的測試集的結果,與訓練集聯合起來,再重新訓練模型然後再預測。這樣的好處是可以平滑訓練集和測試集數據分佈的差異。

Snapshot Ensemble

在stacking第二層模型中我們還加入了深度融合的方法,論文地址
它的好處是在一個訓練週期裏面可以得到多個具有局部最優解的模型、我們可以用這些模型來做融合。
方法效果如下

模型或方法 得分F1-measure
單一模型 0.642
stacking 0.647
stacking+trick 0.652

總結

感謝搜狐能爲我們提供這麼好的平臺和訓練數據、獎品真的超級豐富 ,確實是很用心的在辦這個比賽。組團打比賽的感覺真的是非常好,希望下次還能有參加的機會。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章