如何用最強模型BERT做NLP遷移學習?
作者 | 臺灣大學網紅教授李宏毅的三名愛徒
來源 | 井森堡,不定期更新機器學習技術文並附上質量佳且可讀性高的程式碼。
編輯 | Jane
谷歌此前釋出的NLP模型BERT,在知乎、Reddit上都引起了轟動。其模型效果極好,BERT論文的作者在論文裡做的幾個實驗資料集都被轟平了。要做那幾個資料集的人可以洗洗睡啦,直接被明明白白地安排了一波。
坊間流傳 BERT 之於自然語言處理有如 ResNet 之於計算機視覺。谷歌還是谷歌呀,厲害!以後做 NLP 的實驗就簡單多了,可以先用 BERT 抽特徵,再接幾層客製化的神經網路後續實驗,可以把 BERT 看作是類似於 word to vector 那樣的工具。有人在知乎上整理了跑一次BERT的成本:
https://www.zhihu.com/question/298203515/answer/509470502
For TPU pods:
4 TPUs * ~$2/h (preemptible) * 24 h/day * 4 days = $768 (base model)
16 TPUs = ~$3k (large model)
For TPU:
16 tpus * $8/hr * 24 h/day * 4 days = 12k
64 tpus * $8/hr * 24 h/day * 4 days = 50k
For GPU:
"BERT-Large is 24-layer, 1024-hidden and was trained for 40 epochs over a 3.3 billion word corpus. So maybe 1 year to train on 8 P100s? "
這還只是跑一次的時間,試想一下谷歌在調參、試不同神經網路結構時該需要多少時間與運算資源,太可怕了。
不禁讓人感慨,深度學習已經變為大公司之間的軍備競賽,也只有谷歌這樣的大公司才能做出這麼偉大的模型,那是不是意味著我們普通人就沒機會了呢?喜大普奔的是谷歌已經把訓練好的模型公佈出來,和大家分享他們的成果。我們可以運用大公司提前訓練好的模型做遷移學習,用於客製化的應用。
本文想通過一個實際案例來檢驗一下提前訓練好的 BERT 模型的威力,在已經訓練好的 BERT 模型上再連幾層神經網路做遷移學習。我們用的資料來源是 Kaggle 上的一個豆瓣影評分析資料集,目標是訓練出一個模型,輸入給模型一條影評的文字,模型能正確輸出這條影評所對應的評分。
資料集
這個豆瓣電影短評資料集裡面一共有28部電影,總共200多萬筆影評,每筆影評有對應的文字以及使用者給電影的評分(最高5分,最低1分)。下面是一些簡單的範例:
https://www.kaggle.com/utmhikari/doubanmovieshortcomments/
前處理的時候,我們先把每條影評的標點符號去掉,然後用 Jieba 斷詞,Jieba 是一個很方便的中文斷詞函式庫,安裝也很方面直接用 PIP 安裝就好。
最後把資料切為 training,testing 和 validation set 三部分,下表是三個 set 的一些簡單統計量:
模型結構
第一步,我們先用“Jieba”將影評斷詞,再把每個詞用一個 one-hot vector 表示。
第二步,再把每條影評對應的 one-hot vector 丟到如下圖的 BERT 模型抽出特徵。
第三步,再把抽出的特徵丟進我們客製化設計的神經網路,最後輸出網路的預測。網路的預測是 1-5 分,我們分別做了迴歸和分類兩個實驗。分類的輸出結果是 1-5 分 5 類當中的某一類,迴歸輸出結果是介於 1-5 之間的一個數值。我們會用到如下圖所示的 Bengio 在 2017 年提出的自注意力模型做一些語義分析。
第四步,定義損失函式,固定 BERT 的引數不變,再用梯度下降法更新我們客製化設計的網路。
PS:由於 BERT 和 self-attention 模型結構較為複雜,而且本文的目的是探討如何用 BERT 做遷移學習,所以我們不會贅述模型結構,我們會在文末附上論文連結,感興趣的小夥伴可以去看看。
實驗結果
BERT 分類
分類準確率:61%
混淆矩陣:
以第 1 行第二列的 0.13 為例:意思是真實標籤是第一類,被分類為第二類的佔總的第一類的個數的比例是 0.13。可以看到 1 分,5 分的大部分例子都能分類正確。大部分分類不正確的情況是被分到相鄰的等級了,例如真實標籤是 2 分的被分類為 3 分或是真實標籤是 3 分的被分類為 2 分。這種情況是合理的,針對某一條特定的影評,就算是人去預測,也很難斬釘截鐵地判定為是 2 分還是 3 分,所以也難怪機器分不出來。
我們對評價標準做了一點修改,將誤判為相鄰評分的例子判別為正確,結果如下:
分類準確率:94.6%
混淆矩陣:
BERT 迴歸
同樣的架構,我們修改了一下最後一層的輸出,讓模型預測相應影評的評分,輸出一個實數值,重新訓練了模型。如果是分類的實驗,1 分與 5 分這兩個類別用數值表示的話都是一個 one-hot 的類別,體現在損失函式裡沒有差別,模型不會對二者區別對待。如果是迴歸的實驗,模型的輸出是一個實數值,實數值具有連續性,1 分和 5 分二者分數的高低能在實數上得到體現。
下面來看看實驗結果:
分類準確率:95.3%
混淆矩陣:
真實評分的分佈:
模型預測評分的分佈:
我們也對 BERT 出來的特徵向量做了 TSNE 降維,視覺化結果如下:
根據右上角的圖例,不同的顏色代表不同的評分,比如紫色代表五分。每一個點都是一筆影評的高維特徵降維後在二維平面上的體現。可以明顯看出,不同評分的影評被歸在了不同的群裡。相近的評分,比如 5 分和 4 分、4 分與 3 分會有一些重疊部分。
自注意力機制的一些視覺化結果:
引入自注意力機制的模型在預測一句影評對應的評分的時候,能夠先通過注意力機制抓取一句話中的重要部分,給重要部分很多的比重。上述幾個例子就能看出來,再模型給一條影評 5 分的時候,會給“爆”、“動人”這樣的字眼予以高亮。在給 2 分的時候,會給“一般”這樣的字眼予以高亮。
案例分析
接下來我們針對瘋狂動物城這部電影,做一些視覺化分析,來呈現訓練好之後的模型的效果。
分類準確率:72.63%
混淆矩陣:
將誤判為相鄰評分的例子判別為正確的結果如下:
分類準確率:98.56%
混淆矩陣:
真實評分的分佈:
模型預測評分的分佈:
TSNE 降維後視覺化結果:
自注意力機制視覺化結果:
針對瘋狂動物城這部電影,我們做了 TF-IDF 的詞頻分析。
詞頻前三十的詞:
不同評分的高頻詞:
第一行的 1-5 是評分,下面的詞後面的數字代表的是這個詞的出現個數。
最後,用一張詞雲歡快地結束案例分析:
結論
本文用了目前自然語言界最強的模型BERT做遷移學習,效果看起來還挺 okay 的。
BERT 模型可以很好地抽出文字的特徵,用於後續的實驗。如果小夥伴們有比較好的運算資源,可以把 BERT 當作是一個類似於 word to vector 的工具。
自注意力機制不光能提高模型的效能,同時引入此機制能大大加強模型的可解釋性。
參考內容:
https://www.zhihu.com/question/298203515/answer/509470502
https://arxiv.org/abs/1810.04805
https://arxiv.org/abs/1703.03130
Github:https://github.com/Chung-I/Douban-Sentiment-Analysis
(本文為AI科技大本營轉載文章,轉載請聯絡作者。)
推薦閱讀:
ProgPow:以太坊上浮世繪
名下企業比老闆劉強東還多,京東“最強女助理”張雱什麼來頭?
網際網路巨頭的春晚江湖
程式設計師給銀行植入病毒,分 1300 次盜取 718 萬,被判 10 年半!
點選“閱讀原文”,開啟CSDN APP 閱讀更貼心!
相關文章
- 圖解BERT(NLP中的遷移學習)圖解遷移學習
- NLP與深度學習(六)BERT模型的使用深度學習模型
- 最強NLP預訓練模型!谷歌BERT橫掃11項NLP任務記錄模型谷歌
- 如何用 Python 和深度遷移學習做文字分類?Python遷移學習文字分類
- NLP與深度學習(五)BERT預訓練模型深度學習模型
- 深度學習+深度強化學習+遷移學習【研修】深度學習強化學習遷移學習
- 遷移學習:該做的和不該做的事遷移學習
- 當前NLP遷移學習中的一些問題遷移學習
- 遷移學習在NLP中的演化:從基礎到前沿遷移學習
- 視覺語言模型的高效遷移學習視覺模型遷移學習
- 遷移學習系列---基於例項方法的遷移學習遷移學習
- 再無需從頭訓練遷移學習模型!亞馬遜開源遷移學習資料庫 Xfer遷移學習模型亞馬遜資料庫
- 最新最簡易的遷移學習方法,人員再識別新模型 | AI一週學術遷移學習模型AI
- 2018年最強自然語言模型 Google BERT 資源彙總模型Go
- 什麼是遷移學習?什麼時候使用遷移學習?遷移學習
- CCAI 2017 | 香港科技大學計算機系主任楊強:論深度學習的遷移模型AI計算機深度學習模型
- 遷移學習(Transfer Learning)遷移學習
- 「NLP-NER」如何使用BERT來做命名實體識別
- 遷移學習基本原理遷移學習
- 基於VGG的遷移學習遷移學習
- [譯] TensorFlow 教程 #08 – 遷移學習遷移學習
- 機器學習:詳解遷移學習(Transfer learning)機器學習遷移學習
- 深度學習之PyTorch實戰(4)——遷移學習深度學習PyTorch遷移學習
- Python遷移學習:機器學習演算法Python遷移學習機器學習演算法
- 深度學習之遷移學習介紹與使用深度學習遷移學習
- ACL 2019 | 基於知識增強的語言表示模型,多項NLP任務表現超越BERT模型
- 使用Transformer與無監督學習,OpenAI提出可遷移至多種NLP任務的通用模型ORMOpenAI模型
- 遷移學習(ADDA)《Adversarial Discriminative Domain Adaptation》遷移學習AIAPT
- 遷移學習中的BN問題遷移學習
- Laravel 學習之資料庫遷移Laravel資料庫
- 遷移學習時間序列分類遷移學習
- 站在巨人的肩膀上:遷移學習遷移學習
- 利用魯棒控制實現深度強化學習駕駛策略的遷移強化學習
- 效能媲美BERT,引數量僅為1/300,谷歌最新的NLP模型谷歌模型
- 【NLP】BERT中文實戰踩坑
- 遷移學習幫大忙!成都理工大學搭建 SCDUNet++ 模型進行滑坡測繪遷移學習模型
- 使用PyTorch進行主動遷移學習:讓模型預測自身的錯誤PyTorch遷移學習模型
- 深度學習不得不會的遷移學習Transfer Learning深度學習遷移學習