成人av在线资源一区,亚洲av日韩av一区,欧美丰满熟妇乱XXXXX图片,狠狠做五月深爱婷婷伊人,桔子av一区二区三区,四虎国产精品永久在线网址,国产尤物精品人妻在线,中文字幕av一区二区三区欲色
    您正在使用IE低版瀏覽器,為了您的雷峰網賬號安全和更好的產品體驗,強烈建議使用更快更安全的瀏覽器
    此為臨時鏈接,僅用于文章預覽,將在時失效
    人工智能開發者 正文
    發私信給AI研習社
    發送

    0

    知乎 “看山杯” 奪冠記

    本文作者: AI研習社 編輯:賈智龍 2017-09-01 16:42
    導語:本文是一篇來自知乎2017看山杯冠軍的分享。

    雷鋒網按:本文原作者陳云,原載于知乎專欄。雷鋒網已獲得作者授權。

    知乎看山杯奪冠記

    比賽源碼(PyTorch 實現)github 地址 https://github.com/chenyuntc/PyTorchText
    比賽官網: https://biendata.com/competition/zhihu/
    比賽結果官方通告: https://zhuanlan.zhihu.com/p/28912353

    七月,酷暑難耐,認識的幾位同學參加知乎看山杯,均取得不錯的排名。當時天池 AI 醫療大賽初賽結束,官方正在為復賽進行平臺調試,復賽時間一拖再拖。看著幾位同學在比賽中排名都還很不錯,于是決定抽空試一試。結果一發不可收拾,又找了兩個同學一起組隊(隊伍 init)以至于整個暑假都投入到這個比賽之中,并最終以一定的優勢奪得第一名(參見最終排名 )。

    1. 比賽介紹

    這是一個文本多分類的問題:目標是 “參賽者根據知乎給出的問題及話題標簽的綁定關系的訓練數據,訓練出對未標注數據自動標注的模型”。通俗點講就是:當用戶在知乎上提問題時,程序要能夠根據問題的內容自動為其添加話題標簽。一個問題可能對應著多個話題標簽,如下圖所示。


    知乎 “看山杯” 奪冠記

    這是一個文本多分類,多 label 的分類問題(一個樣本可能屬于多個類別)。總共有 300 萬條問題 - 話題對,超過 2 億詞,4 億字,共 1999 個類別。

    1.1 數據介紹

    參考 https://biendata.com/competition/zhihu/data/

    總的來說就是:

    • 數據經過脫敏處理,看到的不是 “如何評價 2017 知乎看山杯機器學習比賽”,而是 “w2w34w234w54w909w2343w1"這種經過映射的詞的形式,或者是”c13c44c4c5642c782c934c02c2309c42c13c234c97c8425c98c4c340" 這種經過映射的字的形式。

    • 因為詞和字經過脫敏處理,所以無法使用第三方的詞向量,官方特地提供了預訓練好的詞向量,即 char_embedding.txt 和 word_embedding.txt ,都是 256 維。

    • 主辦方提供了 1999 個類別的描述和類別之間的父子關系(比如機器學習的父話題是人工智能,統計學和計算機科學),但這個知識沒有用上。

    • 訓練集包含 300 萬條問題的標題(title),問題的描述(description)和問題的話題(topic)

    • 測試集包含 21 萬條問題的標題(title), 問題的描述 (description),需要給出最有可能的 5 個話題(topic)

    1.2 數據處理

    數據處理主要包括兩部分:

    • char_embedding.txt 和 word_embedding.txt 轉為 numpy 格式,這個很簡單,直接使用 word2vec 的 python 工具即可

    • 對于不同長度的問題文本,pad 和截斷成一樣長度的(利用 pad_sequence 函數,也可以自己寫代碼 pad)。太短的就補空格,太長的就截斷。操作圖示如下:

    知乎 “看山杯” 奪冠記

    1.3 數據增強

    文本中數據增強不太常見,這里我們使用了 shuffle 和 drop 兩種數據增強,前者打亂詞順序,后者隨機的刪除掉某些詞。效果舉例如圖:

    知乎 “看山杯” 奪冠記

    1.4 評價指標

    每個預測樣本,提供最有可能的五個話題標簽,計算加權后的準確率和召回率,再計算 F1 值。注意準確率是加權累加的,意味著越靠前的正確預測對分數貢獻越大,同時也意味著準確率可能高于 1,但是 F1 值計算的時候分子沒有乘以 2,所以 0.5 是很難達到的。

    知乎 “看山杯” 奪冠記

    具體評價指標說明請參照

    https://biendata.com/competition/zhihu/evaluation/

    2 模型介紹

    建議大家先閱讀這篇文章,了解文本多分類問題幾個常用模型:用深度學習(CNN RNN Attention)解決大規模文本分類問題

    2.1 通用模型結構

    文本分類的模型很多,這次比賽中用到的模型基本上都遵循以下的架構:

    知乎 “看山杯” 奪冠記

    基本思路就是,詞(或者字)經過 embedding 層之后,利用 CNN/RNN 等結構,提取局部信息、全局信息或上下文信息,利用分類器進行分類,分類器的是由兩層全連接層組成的。

    在開始介紹每個模型之前,這里先下個結論:

    當模型復雜到一定程度的時候,不同模型的分數差距很小!

    2.2 TextCNN

    這是最經典的文本分類模型,這里就不細說了,模型架構如下圖:

    知乎 “看山杯” 奪冠記

    和原始的論文的區別就在于:

    • 使用兩層卷積

    • 使用更多的卷積核,更多尺度的卷積核

    • 使用了 BatchNorm

    • 分類的時候使用了兩層的全連接

    總之就是更深,更復雜。不過卷積核的尺寸設計的不夠合理,導致感受野差距過大。

    2.3 TextRNN

    沒找到論文,我就憑感覺實現了一下:

    知乎 “看山杯” 奪冠記

    相比于其他人的做法,這里的不同點在于:

    • 使用了兩層的雙向 LSTM。

    • 分類的時候不是只使用最后一個隱藏元的輸出,而是把所有隱藏元的輸出做 K-MaxPooling 再分類。

    2.4 TextRCNN

    參考原論文的實現,和 RNN 類似,也是兩層雙向 LSTM,但是需要和 Embedding 層的輸出 Concat(類似于 resnet 的 shortcut 直連)。

    知乎 “看山杯” 奪冠記

    2.5 TextInception

    這個是我自己提出來的,參照 TextCNN 的思想(多尺度卷積核),模仿 Inception 的結構設計出來的,一層的 Inception 結構如下圖所示,比賽中用了兩層的 Inception 結構,最深有 4 層卷積,比 TextCNN 更深。

    知乎 “看山杯” 奪冠記

    2.6 各個模型分數計算

    訓練的時候,每個模型要么只訓練基于詞(word)的模型,要么只訓練基于字(char)的模型。各個模型的分數都差不多,這里不再單獨列出來了,只區分訓練的模型的類型和數據增強與否。

    知乎 “看山杯” 奪冠記

    可以看出來

    • 基于詞的模型效果遠遠好于基于字的(說明中文分詞很有必要)。

    • 數據增強對基于詞(word)的模型有一定的提升,但是對于基于字(char)的模型主要是起到副作用。

    • 各個模型之間的分數差距不大。

    2.7 模型融合

    像這種模型比較簡單,數據量相對比較小的比賽,模型融合是比賽獲勝的關鍵。

    在這里,我只使用到了最簡單的模型融合方法 ----- 概率等權重融合。對于每個樣本,單模型會給出一個 1999 維的向量,代表著這個模型屬于 1999 個話題的概率。融合的方式就是把每一個模型輸出的向量直接相加,然后選擇概率最大的 5 個話題提交。結構如圖所示:

    知乎 “看山杯” 奪冠記

    下面我們再來看看兩個模型融合的分數:

    知乎 “看山杯” 奪冠記

    第一列的對比模型采用的是 RNN(不采用數據增強,使用 word 作為訓練數據),第二列是四個不同的模型(不同的結構,或者是不同的數據)。

    我們可以得出以下幾個結論:

    • 從第一行和第二行的對比之中我們可以看出,模型差異越大提升越多(RNN 和 RCNN 比較相似,因為他們底層都采用了雙向 LSTM 提取特征),雖然 RCNN 的分數比 Inception 要高,Inception 對模型融合的提升更大。

    • 從第一行和第四行的對比之中我們可以看出,數據的差異越大,融合的提升越多,雖然基于字(char)訓練的模型分數比較低,但是和基于詞訓練的模型進行融合,還是能有極大的提升。

    • 采用數據增強,有助于提升數據的差異性,對模型融合的提升幫助也很大。

    總結: 差異性越大,模型融合效果越好。沒有差異性,創造條件也要制造差異性。

    2.8 MultiModel

    其實模型融合的方式,我們換一種角度考慮,其實就是一個很大的模型,每一個分支就像多通道的 TextCNN 一樣。那么我們能不能訓練一個超級大的模型?答案是可以的,但是效果往往很差。因為模型過于復雜,太難以訓練。這里我嘗試了兩種改進的方法。

    第一種方法,利用預訓練好的單模型初始化復雜模型的某一部分參數,模型架構如圖所示:

    知乎 “看山杯” 奪冠記

    但是這種做法會帶來一個問題: 模型過擬合很嚴重,難以學習到新的東西。因為單模型在訓練集上的分數都接近 0.5,已經逼近理論上的極限分數,這時候很難接著學習到新的內容。這里采取的應對策略是采用較高的初始學習率,強行把模型從過擬合點拉出來,使得模型在訓練集上的分數迅速降低到 0.4 左右,然后再降低學習率,緩慢學習,提升模型的分數。

    第二種做法是修改預訓練模型的 embedding 矩陣為官方給的 embedding 權重。這樣共享 embedding 的做法,能夠一定程度上抑制模型過擬合,減少參數量。雖然 CNN/RNN 等模型的參數過擬合,但是由于相對應的 embedding 沒有過擬合,所以模型一開始分數就會下降許多,然后再緩慢提升。這種做法更優。在最后提交模型復現成績的時候,我只提交了七個這種模型,里面包含著不同子模型的組合,一般包含 3-4 個子模型。這種方式生成的權重文件也比較小(600M-700M 左右),上傳到網盤相對來說更方便。

    知乎 “看山杯” 奪冠記

    2.9 失敗的模型和方法

    MultiMode 只是我諸多嘗試的方法中比較成功的一個,其它方法大多以失敗告終(或者效果不明顯)

    • 數據多折訓練:因為過擬合嚴重,想著先拿一半數據訓,允許它充分過擬合,然后再拿另外一半數據訓。效果不如之前的模型。

    • Attention Stack,參考了這篇文章,其實本質上相當于調權重,但是效果有限,還麻煩,所以最后直接用等權重融合(權重全設為 1)。

    • Stack,太費時費力,浪費了不少時間,也有可能是實現有誤,提升有限,沒有繼續研究下去。

    • Boost,和第二名 Koala 的方法很像,先訓一個模型,然后再訓第二個模型和第一個模型的輸出相加,但是固定第一個模型的參數。相當于不停的修正上一個模型誤判的 (可以嘗試計算一下梯度,你會發現第一個模型已經判對的樣本,即使第二個模型判別錯了,第二個模型的梯度也不會很大,即第二個模型不會花費太多時間學習這個樣本)。但是效果不好,原因:過擬合很嚴重,第一個模型在訓練集上的分數直接就逼近 0.5,導致第二個模型什么都沒學到。Koala 隊伍最終就是憑借著這個 Boost 模型拿到了第二名,我過早放棄,沒能在這個方法上有所突破十分遺憾。

    • TTA(測試時數據增強),相當于在測試的時候人為的制造差異性,對單模型的效果一般,對融合幾乎沒有幫助。

    • Hyperopt 進行超參數查詢,主要用來查詢模型融合的權重,效果一般,最后就也沒有使用了,就手動稍微調了一下。

    • label 設權重,對于正樣本給予更高的權重,訓練模型,然后和正常權重的模型進行融合,在單模型上能夠提升 2-3 個千分點(十分巨大),但是在最后的模型融合是效果很有限(0.0002),而且需要調整權重比較麻煩,遂舍棄。

    3 結束語

    我之前雖然學過 CS224D 的課程,也做了前兩次的作業,但是除此之外幾乎從來沒寫過自然語言處理相關的代碼,能拿第一離不開隊友的支持,和同學們不斷的激勵。

    這次比賽入門對我幫助最大的兩篇文章是用深度學習(CNN RNN Attention)解決大規模文本分類問題deep-learning-nlp-best-practices

    第一篇是北郵某學長(但我并不認識~)寫的,介紹了許多文本分類的模型(CNN/RNN/RCNN),對我入門幫助很大。

    第二篇是國外某博士寫的,當時我已經把分數刷到前三,在家看到了這篇文章,嘆為觀止,解釋了我很多的疑惑,提到的很多經驗總結和我的情況也確實相符。

    P.S. 為什么隊伍名叫 init? 因為git init,linux init,python __init__  。我最喜歡的三個工具。而且pidof init is 1.

    P.S. 歡迎報考北郵模式識別實驗室

    最后的最后:人生苦短,快用 PyTorch!

    知乎 “看山杯” 奪冠記

    雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知

    知乎 “看山杯” 奪冠記

    分享:
    相關文章

    編輯

    聚焦數據科學,連接 AI 開發者。更多精彩內容,請訪問:yanxishe.com
    當月熱門文章
    最新文章
    請填寫申請人資料
    姓名
    電話
    郵箱
    微信號
    作品鏈接
    個人簡介
    為了您的賬戶安全,請驗證郵箱
    您的郵箱還未驗證,完成可獲20積分喲!
    請驗證您的郵箱
    立即驗證
    完善賬號信息
    您的賬號已經綁定,現在您可以設置密碼以方便用郵箱登錄
    立即設置 以后再說