70 BERT微調(diào)【動手學(xué)深度學(xué)習(xí)v2】

BERT 微調(diào)
- 對于自然語言處理應(yīng)用可以設(shè)計不同的模型,比如基于循環(huán)神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò),注意力和多層感知機(jī),這些模型在有空間或者時間限制的情況下是有幫助的,但是為每個自然語言處理任務(wù)都設(shè)計一個特定的模型實(shí)際上是不可行的
- BERT 預(yù)訓(xùn)練模型可以對廣泛的自然語言處理任務(wù)進(jìn)行最少的架構(gòu)更改
- BERT 模型的提出改進(jìn)了各種語言處理任務(wù)的技術(shù)水平
- 原始 BERT 模型的兩個版本分別帶有 1.1 億和 3.4 億個參數(shù),因此,當(dāng)有足夠的計算資源時可以考慮為下游自然語言處理應(yīng)用微調(diào) BERT
- 和圖片分類的不同之處在于,圖片分類訓(xùn)練好了 ResNet 之后,可以用來做圖片分類,也是一個正常的任務(wù);但是 BERT 本身的兩個任務(wù)是沒有意義的,很少會有做完形填空和預(yù)測兩個句子是否相鄰的情況,因此 BERT 主要用于做微調(diào)
- 自然語言處理應(yīng)用可以分為序列級和詞元級:序列級包括單文本分類任務(wù)和文本對分類(或回歸)任務(wù);詞元級包括文本標(biāo)注和回答
- 在微調(diào)期間,不同應(yīng)用之間的 BERT 所需的“最小架構(gòu)更改”是額外的全連接層
- 在下游應(yīng)用的監(jiān)督學(xué)習(xí)期間,額外的參數(shù)是從零開始學(xué)習(xí)的,而預(yù)訓(xùn)練 BERT 模型中的所有參數(shù)都是微調(diào)的
微調(diào) BERT

1、在訓(xùn)練好 BERT 之后,句子(含分類標(biāo)識符、句子和分隔符)進(jìn)入 BERT ,BERT 會對每一個 token 返回一個長為 128 (BERT-Base:768;BERT-Large:1024)的特征向量(因?yàn)槭?transformer ,所以可以認(rèn)為這些特征已經(jīng)包含了整個句子的信息的特征表示)
- BERT 對每一個詞元返回抽取了上下文信息的特征向量
2、不同的任務(wù)使用不同的特征
例:句子分類
1、如何將文本輸入的 BERT 表示轉(zhuǎn)換為輸出標(biāo)簽?將 <cls> 對應(yīng)的向量輸入到全連接層分類
2、單句子分類:單文本分類將單個文本序列作為輸入,并輸出其分類結(jié)果
- 特殊分類標(biāo)記 <cls> 用于序列分類
- 特殊分類標(biāo)記 <sep> 用于標(biāo)記單個文本的結(jié)束或者分隔成對文本
- 將句子輸入到 BERT 模型中,然后只將句子開始的 <cls> 標(biāo)識符輸出對應(yīng)的特征向量,然后將這個特征向量輸入到一個二分類(或者是 n 分類)輸出層中做 softmax 進(jìn)行分類
- 單文本分類應(yīng)用中,特殊標(biāo)記 <cls> 的 BERT 表示對整個輸入文本序列的信息進(jìn)行編碼,作為單個文本的表示,它將被送入到由全連接(稠密)層組成的小多層感知機(jī)中,以輸出所有離散標(biāo)簽值的分布

3、句子對分類:以一對文本作為輸入但輸出連續(xù)值
- 對于句子對也是一樣的,將句子輸入到 BERT 模型中,也是只將句子開始的 <cls> 標(biāo)識符輸出對應(yīng)的特征向量,然后將這個特征向量輸入到一個二分類(或者是 n 分類)輸出層中做 softmax 進(jìn)行分類
- 與單文本分類相比,文本對分類的 BERT 微調(diào)在輸入表示上有所不同

2、為什么使用句子開始的標(biāo)識符 <cls> ,而不是用別的東西?
- 在做預(yù)訓(xùn)練的時候,判斷兩個句子是不是相鄰的時候使用的是 <cls> 這個標(biāo)識符,所以也是在告訴 BERT 這個標(biāo)識符是在做句子級別上分類所使用的向量,所以盡量將它對應(yīng)輸出的特征向量做得便于做分類
- 其實(shí)換成其他的也可以,反正最終需要進(jìn)行微調(diào),在訓(xùn)練的時候會更新 BERT 的權(quán)重,所以可以改變 BERT 的權(quán)重,使得最終輸出的特征向量包含自己所想要的特征
例:命名實(shí)體識別
1、識別一個詞元是不是命名實(shí)體,例如人名、機(jī)構(gòu)、位置
2、BERT 如何表示輸入并轉(zhuǎn)換為輸出標(biāo)簽?將非特殊詞元放進(jìn)全連接層分類
- 句子輸入到 BERT 模型之后,將非特殊詞元(丟棄掉 <cls> 、<sep> 等特殊詞元,只留下真正的 token)放進(jìn)全連接層進(jìn)行分類,對每一個詞進(jìn)行詞級別的分類判斷(二分類或者是多分類)
- 與單文本分類的相比,唯一的區(qū)別在于,在命名實(shí)體識別中,輸入文本的每個詞元的 BERT 表示被送到相同的額外全連接層中,以輸出詞元的標(biāo)簽

問題回答
1、給定一個問題和它的描述文字,找出一個片段作為回答
- 給定一段話,然后提出一個問題,將描述中對應(yīng)的詞或者是句子截取出來作為回答
- 問答反映閱讀理解能力
2、如何實(shí)現(xiàn)?BERT 如何表示輸入并轉(zhuǎn)換為輸出標(biāo)簽?

- 首先將問題和描述性文字做成兩句話(如果描述性文字是一段的話也不要緊,可以做成一個很長的序列,這也是為什么 BERT 長度通??梢宰龅?1024 ,因?yàn)樗斎氲臄?shù)據(jù)可能確實(shí)比較長):第一句話是問題,問題不需要進(jìn)行輸出;第二句話是問題的描述文字,可能會比較長
- 分類器的作用:對于問題的描述性文字的每一個詞,預(yù)測它是答案開始的那個詞、結(jié)束的那個詞還是什么都不是(這是一個三分類的問題),即對片段中的每個詞元預(yù)測它是不是回答的開頭或者結(jié)束(開始、結(jié)束或者其他)
總結(jié)
1、對于問題回答、句子分類或者詞分類,雖然想要的東西不太一樣,但是對于 BERT 來講都是做成一個句子對輸入到模型中,最后連接一個全連接層進(jìn)行分類
- 全連接層所要看的 token 對應(yīng)的特征向量可能不太一樣,但是整體來講,最后 BERT 模型所有的權(quán)重都是可以直接使用預(yù)訓(xùn)練好的模型
- 只有最后的輸出層是真的需要從零開始訓(xùn)練的
2、即使 NLP 的任務(wù)各有不同,在使用 BERT 微調(diào)的時候都只需要增加輸出層就可以了,而不需要在意怎樣表示句子信息、段落信息、詞信息,這些已經(jīng)假設(shè) BERT 已經(jīng)提前做好了,只需要加一個簡單的輸出層就可以了
3、根據(jù)任務(wù)的不同,輸入的表示和使用的 BERT 特征也會不一樣,但是整體來講,使用了 BERT 之后,使得整個微調(diào)相比于之前簡單很多,而且 BERT 對于整個任務(wù)的提升也是非常顯著的(比從零開始訓(xùn)練可能效果會好很多)
4、現(xiàn)在在 NLP 領(lǐng)域基本上也是轉(zhuǎn)向微調(diào)的路線
5、對于序列級和詞元級自然語言處理應(yīng)用,BERT 只需要最小的架構(gòu)改變(額外的全連接層)
6、在下游應(yīng)用的監(jiān)督學(xué)習(xí)期間,額外層的參數(shù)是從零開始學(xué)習(xí)的,而預(yù)訓(xùn)練 BERT 模型中的所有參數(shù)都是微調(diào)的
7、可以針對下游應(yīng)用對預(yù)訓(xùn)練的 BERT 模型進(jìn)行微調(diào),在微調(diào)過程中,BERT 模型成為下游應(yīng)用模型的一部分,僅與訓(xùn)練前損失相關(guān)的參數(shù)在微調(diào)期間不會更新
Q&A
- 1、請問 bert 微調(diào)的時候,是固定預(yù)訓(xùn)練模型的參數(shù)嗎?fine tuning 的時候,預(yù)訓(xùn)練的 model 的參數(shù)也會調(diào)整嗎?
- ?QA P4 - 00:00?
- 2、老師,請問為什么我嘗試把之前訓(xùn)練的 d2l.train_char6 中的圖形化的東西刪掉后反而訓(xùn)練不了?
- ?QA P4 - 00:31?
- 3、老師,請問 YOLO 的代碼可以也分享到課程當(dāng)中嗎?
- ?QA P4 - 00:49?
- 4、請問老師,bert 在實(shí)際應(yīng)用的時候,一般如何部署呢?用 C++ 寫預(yù)測代碼嗎?
- ?QA P4 - 01:49?
- 5、如果設(shè)備性能不是很高,是不是不建議使用 bert ?
- ?QA P4 - 03:26?
----end----
其他參考
1、《動手學(xué)深度學(xué)習(xí)》,課程 PPT ,https://courses.d2l.ai/zh-v2/assets/pdfs/part-4_7.pdf
2、《動手學(xué)深度學(xué)習(xí)》,教程,https://zh-v2.d2l.ai/chapter_natural-language-processing-applications/finetuning-bert.html
3、《動手學(xué)深度學(xué)習(xí)》,教程,https://zh-v2.d2l.ai/chapter_natural-language-processing-applications/natural-language-inference-and-dataset.html
4、《動手學(xué)深度學(xué)習(xí)》,教程,https://zh-v2.d2l.ai/chapter_natural-language-processing-applications/natural-language-inference-bert.html