你的 CRF 层的学习率可能不够大
?PaperWeekly 原創 ·?作者|蘇劍林
單位|追一科技
研究方向|NLP、神經網絡
CRF 是做序列標準的經典方法,它理論優雅,實際也很有效,如果還不了解 CRF 的讀者歡迎閱讀舊作簡明條件隨機場 CRF 介紹 | 附帶純 Keras 實現。
在 BERT 模型出來之后,也有不少工作探索了 BERT+CRF 用于序列標注任務的做法。然而,很多實驗結果顯示(比如論文 BERT Meets Chinese Word Segmentation?[1])不管是中文分詞還是實體識別任務,相比于簡單的 BERT+Softmax,BERT+CRF 似乎并沒有帶來什么提升,這跟傳統的 BiLSTM+CRF 或 CNN+CRF 的模型表現并不一樣。
▲ 基于CRF的4標簽分詞模型示意圖
這兩天給 bert4keras 增加了用 CRF 做中文分詞的例子(task_sequence_labeling_cws_crf.py [2]),在調試過程中發現了 CRF 層可能存在學習不充分的問題,進一步做了幾個對比實驗,結果顯示這可能是 CRF 在 BERT 中沒什么提升的主要原因,遂在此記錄一下分析過程,與大家分享。
糟糕的轉移矩陣
由于筆者用的是自己實現的 CRF 層,所以為了證明自己的實現沒有錯誤,筆者跑完 BERT+CRF 的實驗(BERT 用的是 base 版本)后,首先觀察了轉移矩陣,大體數值如下:
其中第 i 行 j 列的數值表示從 i 轉移到 j 的得分(記為?),其中分值的絕對值并沒有意義,只有相對比較的意義。順便說明下,本文的中文分詞用的是 (s,b,m,e) 的字標注法,如果不了解可以參考《【中文分詞系列】 3. 字標注法與HMM模型》[3]。?
然而,直觀來看,這并沒有學到一個好的轉移矩陣,甚至可能會帶來負面影響。比如我們看第一行,,,即??明顯小于?。但是,根據 (s,b,m,e) 的標注設計, s 后面是有可能接 b 的,但不可能接 e,所以??是明顯不合理的,它可能引導出不合理的標注序列,理想情況下 應該為 ?∞ 才對。?
這樣不合理的轉移矩陣一度讓筆者覺得是自己的 CRF 實現得有問題,但經過反復排查以及對比 Keras 官方的實現,最終還是確認自己的實現并沒有錯誤。那么問題出現在哪呢?
學習率的不對等
如果我們先不管這個轉移矩陣的合理性,直接按照模型的訓練結果套上 Viterbi 算法去解碼預測,然后用官方的腳本去評測,發現 F1 有 96.1% 左右(PKU 任務上),已經是當前最優水平了。
轉移矩陣很糟糕,最終的結果卻依然很好,這只能說明轉移矩陣對最終的結果幾乎沒有影響。什么情況下轉移矩陣幾乎沒影響呢?可能的原因是模型輸出的每個字的標簽分數遠遠大于轉移矩陣的數值,并且區分度已經很明顯了,所以轉移矩陣就影響不到整體的結果了,換言之這時候直接 Softmax 然后取 argmax 就很好了。
為了確認,我隨機挑了一些句子,觀察模型輸出的每個字的標簽分布,確實發現每個字的分數最高的標簽分數基本都在 6~8 之間,而其余的標簽分數基本比最高的要低上 3 分以上,這相比轉移矩陣中的數值大了一個數量級以上,顯然就很難被轉移矩陣影響到了。這就肯定了這個猜測。
一個好的轉移矩陣顯然會對預測是有幫助的,至少能幫助我們排除不合理的標簽轉移,或者說至少能保證不會帶來負面影響。所以值得思考的是:究竟是什么阻止了模型去學一個好的轉移矩陣呢?筆者猜測答案可能是學習率。
BERT 經過預訓練后,針對下游任務進行 finetune 時,只需要非常小的學習率(通常是??量級),太大反而可能不收斂。盡管學習率很小,但對于多數下游任務來說收斂是很快的,很多任務都只需要 2~3 個 epoch 就能收斂到最優。另一方面,BERT 的擬合能力是很強的,所以它能比較充分地擬合訓練數據。
這說明什么呢?首先,我們知道,每個字的標簽分布是直接由 BERT 模型算出來的,而轉移矩陣是附加的,與 BERT 沒直接關系。當我們以 ?量級的學習率進行 finetune 時,BERT 部分迅速收斂,也就是每個字的標簽分布會迅速被擬合,同時因為 BERT 的擬合能力比較強,所以迅速擬合到一個比較優的狀態(即目標標簽打分很高,并且拉開了與非目標標簽的差距)。
而由于轉移矩陣跟 BERT 沒什么聯系,當逐字標簽分布迅速地收斂到較優值時,它還是以 ?的速度“悠哉悠哉”地前進著,最終要比逐字標簽的分數低一個數量級。而且,當逐字標簽分布都已經能很好擬合目標序列了,也就不再需要轉移矩陣了(轉移矩陣的梯度會非常小,從而幾乎不更新)。
思考到這里,一個很自然的想法是:能不能增加CRF層的學習率?筆者嘗試增大 CRF 層的學習率,經過多次實驗,發現 CRF 層的學習率為主體學習率的 100 倍以上時,轉移矩陣開始變得合理起來了,下面是 BERT 主體學習率為 、CRF 層的學習率為?(即 1000 倍)時,訓練出的一個轉移矩陣。
這樣的轉移矩陣是合理的,量級也是對的,它學習到了正確的標簽轉移,比如 s→s,b 比 s→m,e 分數大、b→m,e 比 b→s,b 分數大,等等。不過,就算調大了 CRF 層的學習率,結果相比不調整時沒有明顯優勢,歸根結底,BERT 的擬合能力太強了,就連 Softmax 效果都能達到最優了,轉移矩陣自然也不能帶來太大的提升。
更多的實驗分析
CRF 沒給 BERT 帶來什么效果變化,原因是 BERT 的擬合能力太強了,導致不需要轉移矩陣效果都很好。那如果降低 BERT 的擬合能力,會不會帶來顯著差異呢??
前面的實驗中是使用 BERT base 的第 12 層的輸出來 finetune 的,現在我們只用第 1 層的輸出來進行 finetune,來測試上述調整是否會帶來顯著性差異。結果如下表:
由于只用了 1 層 BERT,所以主體學習率設置為?(模型越淺,學習率可以適當地越大),主要對比的是調整 CRF 層學習率所帶來的提升。從表格可以看到:
1. 適當的學習率下,CRF 比 Softmax 有提升;
2. 適當增加 CRF 層的學習率也會比原來的 CRF 有一定提升。
這說明,對于擬合能力不是特別強大的模型(比如只用 BERT 的前幾層,或者對于某些特別難的任務來說,完整的 BERT 擬合能力也不算充分),CRF 及其轉移矩陣還是有一定幫助的,而精調 CRF 層的學習率能帶來更大的提升。
此外,上述所有的實驗都是基于 BERT 進行的,對于傳統的 BiLSTM+CRF 或 CNN+CRF 來說同樣的做法有沒有效果呢?筆者也簡單實驗了一下,發現有些情況下也是有幫助的,所以估計這是 CRF 層的一個通用技巧。
本文從給 bert4keras 添加的 CRF 例子出發,發現 BERT 與 CRF 結合的時候,CRF 層可能存在訓練不充分的問題,進而猜測了可能的原因,并通過實驗進一步肯定了猜測,最后提出通過增大 CRF 層學習率的方式來提升 CRF 的效果,初步驗證了(在某些任務下)其有效性。
相關鏈接
[1] https://arxiv.org/abs/1909.09292?
[2]?https://github.com/bojone/bert4keras/blob/master/examples/task_sequence_labeling_cws_crf.py
[3] https://kexue.fm/archives/3922?
點擊以下標題查看更多往期內容:?
AAAI 2020?| 語義感知BERT(SemBERT)
淺談 Knowledge-Injected BERTs
從 Word2Vec 到 BERT
后 BERT 時代的那些 NLP 預訓練模型
BERT+知識圖譜:知識賦能的K-BERT模型
從三大頂會論文看百變Self-Attention
#投 稿 通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。?
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學習心得或技術干貨。我們的目的只有一個,讓知識真正流動起來。
?????來稿標準:
? 稿件確系個人原創作品,來稿需注明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向)?
? 如果文章并非首發,請在投稿時提醒并附上所有已發布鏈接?
? PaperWeekly 默認每篇文章都是首發,均會添加“原創”標志
???? 投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請單獨在附件中發送?
? 請留下即時聯系方式(微信或手機),以便我們在編輯發布時和作者溝通
????
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
▽ 點擊 |?閱讀原文?| 查看作者博客
總結
以上是生活随笔為你收集整理的你的 CRF 层的学习率可能不够大的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑怎么设置分区格式化吗 电脑分区设置及
- 下一篇: 汽车读不出u盘怎么回事啊 汽车无法识别U