本文的目的是向nlp愛好者們詳細解析乙個著名的語言模型-bert。 全文將分4個部分由淺入深的依次講解。
1.bert簡介
bert是2023年10月由google ai研究院提出的一種預訓練模型。
bert的全稱是bidirectional encoder representation from transformers。bert在機器閱讀理解頂級水平測試squad1.1中表現出驚人的成績: 全部兩個衡量指標上全面超越人類,並且在11種不同nlp測試中創出sota表現,包括將glue基準推高至80.4% (絕對改進7.6%),multinli準確度達到86.7% (絕對改進5.6%),成為nlp發展史上的里程碑式的模型成就。
2.關於bert的模型架構
總體架構:如下圖所示, 最左邊的就是bert的架構圖,可以很清楚的看到bert採用了transformer encoder block進行連線, 因為是乙個典型的雙向編碼模型。
3.1 關於bert訓練過程中的關鍵點
a. pre-trained: 首先明確這是個預訓練的語言模型,未來所有的開發者可以直接繼承!
整個bert模型最大的兩個亮點都集中在pre-trained的任務部分。
b. deep
bert_base:layer = 12, hidden = 768, head = 12, total parameters = 110m
bert_large:layer = 24, hidden = 1024, head = 16, total parameters = 340m
對比於transformer: layer = 6, hidden = 2048, head = 8,是個淺而寬,說明bert這樣深而窄的模型效果更好(和cv領域的總體結論基本一致)。
c. bidirectional transformer: bert的個創新點,它是個雙向的transformer網路。
bert直接引用了transformer架構中的encoder模組,並捨棄了decoder模組, 這樣便自動擁有了雙向編碼能力和強大的特徵提取能力。
d. language understanding: 更加側重語言的理解,而不僅僅是生成(language generation)
3.2 bert的語言輸入表示包含了3個組成部分: (見上面第二張圖)
詞嵌入張量: word embeddings
語句分塊張量: segmentation embeddings
位置編碼張量: position embeddings
最終的embedding向量是將上述的3個向量直接做加和的結果。
3.3: bert的預訓練中引入兩大核心任務 (這兩個任務也是bert原始**的兩個最大的創新點)
a 引入masked lm(帶mask的語言模型訓練)
a.1 在原始訓練文字中,隨機的抽取15%的token作為即將參與mask的物件。
a.2 在這些被選中的token中,資料⽣生成器器並不不是把他們全部變成[mask],⽽而是有下列列3個選擇:
a.2.1 在80%的概率下,用[mask]標記替換該token, 比如my dog is hairy -> my dog is [mask]
a.2.3 在10%的概率下, 保持該token不變, 比如my dog is hairy -> my dog is hairy
a.3 transformer encoder在訓練的過程中, 並不知道它將要**哪些單詞? 哪些單詞是原始的樣? 哪些單詞被遮掩成了[mask]? 哪些單詞被替換成了其他單詞? 正是在這樣一種高度不確定的情況下, 反倒逼著模型快速學習該token的分布式上下文的語義, 盡最大努力學習原始語言說話的樣子!!! 同時因為原始文字中只有15%的token參與了mask操作, 並不會破壞原語言的表達能力和語言規則!!!
b 引入next sentence prediction (下⼀句話的**任務)
b.1 目的是為了服務問答,推理,句⼦主題關係等nlp任務。
b.2 所有的參與任務訓練的語句都被選中參加。
·50%的b是原始⽂本中實際跟隨a的下⼀句話。(標記為isnext,代表正樣本)
·50%的b是原始⽂本中隨機抽取的⼀句話。(標記為notnext,代表負樣本)
b.3 在該任務中,bert模型可以在測試集上取得97-98%的準確率。
3.4 關於基於bert的模型微調(fine-tuning)
只需要將特定任務的輸入,輸出插入到bert中,利用transformer強大的注意力機制就可以模擬很多下游任務。(句子對關係判斷,單文字主題分類,問答任務(qa),單句貼標籤(命名實體識別))
微調的若干經驗:
batch size:16,32
epochs:3,4
learning rate:2e-5,5e-5
全連線層新增:layers:1-3,hidden_size:64,128
4、bert模型本身的優點和缺點。
優點: bert的基礎建立在transformer之上,擁有強大的語言表徵能力和特徵提取能力。在11項 nlp基準測試任務中達到了state of the art。同時再次證明了雙向語言模型的能力更加強大。
缺點:1)可復現性差,基本沒法做,只能拿來主義直接用!
2)訓練過程中因為每個batch_size中的資料只有15%參與**,模型收斂較慢,需要強大的算力支撐!
引申:
1)深度學習就是表徵學習 (deep learning is representation learning)
·整個bert在11項語言模型大賽中,基本思路就是雙向transformer負責提取特徵,然後整個網路加乙個全連線線性層作為fine-tuning微調。但即便如此傻瓜式的組裝,在nlp中著名的難任務-ner(命名實體識別)中,甚至直接去除掉了crf層,照樣大超越bilstm + crf的組合效果, 這去哪兒說理去???
2)規模的極端重要性 (scale matters)
不管是masked lm,還是下一句**next sentence prediction,都不是首創的概念,之前在其他的模型中也提出過,但是因為資料規模+算力侷限沒能讓世人看到這個模型的潛力,那些*****也就不值錢了。但是到了谷歌手裡, 不差錢的結果就是*****值錢了!!
3)關於進一步的研究展示了bert在不同的層學習到了什麼。
·低的網路層捕捉到了短語結構方面的資訊。
·單詞和字的特徵表現在3-4層,句法資訊的特徵表現在6-9層,句⼦語義資訊的特徵表現在10-12層。
·主謂一致的特徵表現在8-9層 (屬於句法資訊的一種)。
詞法 語法 語義
詞法分析階段是編譯過程的第乙個階段,這個階段的任務是對源程式從前到後 從左到右 住個字元的掃瞄,從中識別出乙個個 單詞 符號。單詞 符號是程式語言的基本語法單位,如關鍵字 保留字 識別符號 常數 運算子 分隔符等。詞法分析程式輸出的 單詞 常以二元組的方式輸出,即單詞種別和單詞自身的值。其任務是在詞...
bert簡介 bert中文微調
最近學習了一點兒關於bert中文微調的知識,並上手實踐了一下,再次進行記錄。game apex是個新出的吃雞遊戲。technology google將要推出tensorflow2.0。中文情感分類任務如何對bert語言模型微調 blog.csdn.net bert簡介及中文分類 blog.csdn....
bert簡介 Bert基礎介紹
bert理解 1 預訓練模型 bert是乙個預訓練的模型,那麼什麼是預訓練呢?假設已有a訓練集,先用a對網路進行預訓練,在a任務上學會網路引數,然後儲存以備後用。預訓練過程 當來乙個新的任務b,採取相同的網路結構,網路引數初始化的時候可以載入a訓練集學習好的引數,其他的高層引數隨機初始化,之後用b任...