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