(ML)BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

YEN HUNG CHENG
16 min readDec 24, 2023

--

Paper

Github

目錄:
Self-supervised Learning
Transformer
Masking Input
Next Sentence Prediction
The practical applications of BERT
GLUE
How to use BERT -Case 1
Pre-train v.s. Random Initialization
How to use BERT -Case 2
How to use BERT -Case 3
How to use BERT -Case 4
Training BERT is challenging!
Pre-training a seq2seq model
Why does BERT work?
Multi-lingual BERT
Cross-lingual Alignment?
Where is Language?

Self-supervised Learning

Supervised:我們必須給定輸入的每筆 x 的資料,都給一個標籤 y 。

Self-supervised:也就是在沒有標籤的情況下,自己想辦法做 Supervised。

在一開始時,將 x 分成 x’’ 跟 x’ ,我們只拿 x’ 的資料去做訓練,x’’ 作為模型的標籤,模型在訓練的過程會自己生成標籤。

source

Transformer

BERT 的架構就是採用 Transformer 的 Encoder,若是不熟悉 Transformer 的人可以看下面的文章

BERT 主要應用於自然語言處理(NLP)領域,專門處理文字資料。

在 BERT 中,我們將一系列的文字視為一個序列,並將序列中的每個文字轉換成向量形式作為輸入。

值得注意的是,不只是文字,其他形式如語音圖像等資料也可以被轉換成向量序列。而 BERT 的輸出是一個與輸入長度相同的向量序列

source

Masking Input

在 BERT 的訓練過程中,模型會隨機遮蔽輸入的文字。

這種遮蔽有兩種方式,一種是使用特殊的 [Mask] 符號來替代原來的文字,另一種則是隨機將被遮蔽的文字替換為任意詞彙。

在訓練過程中,模型會先決定遮擋的文字(15% 的輸入),再隨機選擇這兩種方法之一進行。

source

被遮擋的文字就會

source

在 BERT 中,被遮蔽的文字的輸出會經過一個線性轉換(Linear Transform),然後進行 softmax 處理以得到最終的輸出。這個輸出是一個分布(Distribution),表示為一個非常長的向量,這個向量代表了所有的文字。

source

這個過程可以被視為一個分類問題,我們的目標是讓被遮蔽的文字,經過 BERT 後的輸出與 『灣』 Ground Truth(真實值)越接近越好。

Linear 和 BERT 的參數是同時進行訓練的

Next Sentence Prediction

在 BERT 的 Next Sentence Prediction 訓練過程中,我們會使用兩個句子進行訓練。這兩個句子會被一個特殊的符號 [SEP] 分隔開來,而每個句子的開頭則會加上 [CLS] 符號。

source

在 BERT 的訓練中,儘管模型的輸出是一組與輸入相同長度的向量,但在進行這個任務時,我們只關注 [CLS] 符號對應的輸出。

這個 [CLS] 符號的輸出會經過一個線性轉換,而輸出就是一個二元分類的問題,也就是預測兩個句子是否連續。

source

這種方法對 BERT 可能沒有多大的幫助,因為 Next Sentence Prediction 的任務可能過於簡單,導致 BERT 無法從中學到有用的知識。

根據文獻,更有效的方法可能是 Sentence order prediction(SOP),也就是將原本的句子順序從 Sentence1 -> Sentence2 反轉,然後問 BERT 哪個順序是正確的。

The practical applications of BERT

雖然按照上述方法訓練的 BERT ,能解決填空題和預測下一句話的問題,但實際上,BERT 可以應用於許多其他任務。

這些任務並不一定與填空題相關,甚至可能與之無關,但 BERT 仍可以有效地應用於這些場景,實際應用的任務被稱為 Downstream Tasks (下游任務),是 BERT 的主要應用領域。

source

為了進行這些下游任務,我們只需要準備一些已標記的資料即可。

將 BERT 調整以適應各種不同的任務的過程被稱為 Fine-tune,在進行 Fine-tune 之前,我們需要先生成 BERT,而這個過程被稱為 Pre-Train。

source

GLUE

GLUE(General Language Understanding Evaluation)是一個用於評估和比較不同語言模型的標準化框架。

GLUE 包含了多種自然語言理解任務,可以明確地揭示語音自監督學習(Self-Supervised Learning)模型的語言能力。

如果你想評估語言模型是否強大,你就會需要在九種不同任務上進行微調。

source
GLUE scores

黑色的線是人類在這個任務上可以得到的正確率

How to use BERT -Case 1

Input: sequence
Output: class

當我們需要判斷一個句子是正面還是負面的情緒,我們的訓練方式是在每個句子前面加上 [CLS] 符號,接下來經過 BERT 後輸出的 [CLS] 會經過一個線性轉換(圖中省略了 softmax ),最終可以得到一個類別的輸出

source

這裡有一個重要的觀念,BERT 不能自行完成這項任務,您必須提供一些已經標記為正面或負面的句子,然後將這些資料輸入到 BERT 進行訓練。

在進行上述的訓練時,BERT 的參數並非隨機初始化,而是使用完成填空題後得到的參數。然而,這裡的線性轉換(Linear)參數則是隨機初始化的。

source

Pre-train v.s. Random Initialization

為何在訓練其他任務的時候要使用 Pre-train?可以簡單從下方的圖片得到答案,下圖有許多的任務,可以從圖中發現,使用 pre-train 的模型,loss 下降的較快,且最後的 loss 也會相對較低。

source

整個 BERT 結合 Fine-tune 的過程可以被稱為 semi supervised learning (半監督學習)

在進行 Self-supervised (自監督學習)時,我們使用了大量的未標記資料。然後,在下游任務中,我們使用了少量的已標記資料。

這兩者結合起來就形成了 semi supervised learning(半監督學習),也就是說,我們有大量的未標記資料,但也有少量的已標記資料。

semi supervised learning:你有大量沒有標記的資料,但有少量有標註的資料。

How to use BERT -Case 2

Input: sequence
Output: sequence

在進行詞性標註(POS tagging)時,輸入與輸出的長度會相同。

每一個輸入的詞經過 BERT 處理後,都會進行一個線性轉換,最後得到一個類別的輸出。這個過程與 Case 1 的操作基本上沒有太大的差異。

source

How to use BERT -Case 3

Input: two sequences
Output: a class

自然語言推理 NLI (Natural Language Inference) 判斷兩個句子的關係

source

使用兩個句子進行訓練,這兩個句子會被一個特殊的符號 [SEP] 分隔開來,而每個句子的開頭則會加上 [CLS] 符號,BERT 會吐出一排的向量,但是在這我們只取 [CLS] 的輸出的部分,再來進行一個線性轉換,就可以得到一個類別的輸出。

source

How to use BERT -Case 4

Extraction-based Question Answering (QA),這是一個問題的任務,但是答題的答案一定會出現在文章中。

source

在這個任務中,有文章(Document)與問題(Query),而輸入的文章與問題都是 Sequence,將 D(Document) 與 Q(Query) 都丟入 QA Model,QA Model 會輸出兩個正整數 s 與 e ,根據 s 與 e 直接從文章中取出一個段落出來就是答案 A(Answer)。

source

像是圖中的第一個問題 What causes precipitation to fall ? 這題的答案是 gravity,gravity 也就是在文章中的第 17 個詞彙,模型的輸出就是 s = 17, e = 17,第三題的答案是 within a cloud,模型的輸出就會是 s = 77, e = 79。

source

BERT 要做到這 QA 任務時,你要準備 question 與 document,question 與 document 會被一個特殊的符號 [SEP] 分隔開來,question 前方會加上 [CLS] 符號。

在這邊會有兩個 vector 需要重頭開始訓練,這兩個 vector 的長度與 BERT 的輸出長度相同。

source

接下來將橙色的 vector 與文章的每個輸出進行 inner product,然後再通過 softmax 函數,這個過程與注意力機制相似。

在這個過程中,我們可以發現在 d2 的輸出位置的數值最大,因此 s 會是 2。

source

最後,我們要取得 e 的數值。這個過程與取得 s 的方法相同,我們將藍色的 vector 與文章的每個輸出進行 inner product,然後再通過 softmax 函數,找出最大的數值,我們就可以知道 e 的值是 3。

因此,答案的位置就在文章中的第 2 到第 3 的位置。

source

Training BERT is challenging!

從頭開始訓練 BERT 是有點困難的,雖然取得訓練資料不是問題,但是要讓 BERT 進行填空題的訓練,這需要消耗大量的運算資源。

source

Pre-training a seq2seq model

在 seq2seq 任務比較特別一點,在 BERT 只有 pre-train 在 Encoder,如何 pre-train seq2seq 的 Decoder,將 Encoder 與 Decoder 使用 Cross Attention 連接,接下來就是故意在 Encoder 的輸入做干擾,Decoder 的任務就是輸出 Encoder 干擾前的結果。

source

對 Encoder 進行干擾的方法包括 MASS,它會隨機遮蔽一些詞彙,或者使用各種手段,如修改字詞、改變順序、顛倒等。BART 採用了所有這些方法。根據文獻,使用所有這些方法的 BART 會得到更好的結果。

source

Why does BERT work?

將輸入的每個文字都會被轉換成相對應的 vector,這樣的向量表示通常被稱為「Embedding」,這些經過 BERT 的 vector 都代表了輸入詞彙的意思

如果將這些 vector 都畫出來,你可以發現意思越接近的字,他們之間的 vector 就會越靠近。

source

但是每個詞彙都有一字多義的意思,所以根據上下文的不同,不同的『果』字的 vector 不會是一樣的。例如:蘋果手機 — 吃蘋果

source

簡單來說就是收集很多提到『蘋果』的句子,將這些句子都丟到 BERT 內,接下來再計算他們的 Embedding。

source

最後就可以計算不同句子中的『蘋果』之間的 Cosine similarity,計算他們之間的相似性。

顏色越黃表越有關係,前五個關於吃的『蘋果』的顏色就偏黃,後五個關於產品的『蘋果』顏色就越深。

source

我們可以從上下文中最常出現的字來理解一個詞彙的意思。例如,如果上下文中經常出現「吃」或「樹」,那麼「蘋果」可能指的是可以吃的水果。反之,如果出現「電」或「股價」,那麼「蘋果」可能指的是蘋果電腦公司。

BERT 在學習填空任務時,其實就是在學習如何從上下文中抽取資訊。

這與早期的 CBOW 方法相似,CBOW 也是將中間的詞彙挖空,然後預測這個空白處應該是什麼詞彙。

source

因為 BERT 有能力理解上下文的意義,所以它的詞嵌入(Embedding)被視為更高階的版本,稱之為「contextualized word embedding」。

Applying BERT to protein, DNA, music classification

source

DNA sequence -> AGAC ,接下來就是將 AGAC 都換成一個任意對應的詞彙,A -> we, T -> you, C -> he, G -> she,上面對應的文字隨意都可以,並不影響訓練的結果。

接下來訓練的過程跟上面所提過的都一樣,目標就是做 DNA 的分類。

source

最終的結論是,使用 BERT 的效果明顯優於不使用 BERT。實驗顯示,即使我們給 BERT 一些混亂的句子,它仍然能夠進行良好的分類。BERT 的能力並非完全來自於它能理解文章的內容,可能還有其他因素,例如它可能具有較好的初始化參數。這部分仍需要進一步的研究。

source

Multi-lingual BERT

在訓練填空的時候,你會拿各種的語言去訓練

source

Google 訓練了一種能夠做 104 種語言填空的 Multi-BERT,最神奇的是你只需要將用於英文 QA 的資料做訓練,它自動就會做中文 QA 的問題。

source

英文的QA 使用的是 SQuAD 資料集,中文的 QA 使用的是 DRCD,在QANet 上面可以看到 F1 為 78.1,最後可以發現 BERT Fine-tune 在 English 上的Multi-BERT 的 F1 竟然超越了 QANet 為 78.7。

source

Cross-lingual Alignment?

簡單來說,不論是哪種語言,只要詞彙的意思相同,例如中文的『跳』和英文的『jump』,在 Embedding 中的距離也許就會很近。

這可能是因為 Multi-BERT 在看過大量的語言資料後,自動學會了這件事。

source

Mean Reciprocal Rank (MRR) 的數值越高,就代表不同語言的 Vector 越接近。

一開始我們使用了 200k 的句子進行訓練,但訓練效果並不理想。然而,當資料量增加到 1000k 時,我們發現訓練成功了。實驗結果顯示,資料量是決定不同語言是否能成功 alignment (對齊)的關鍵因素。

source

對 Multi-BERT 我們做中文的填空,它並不會去填入英文的答案,代表它知道語言的資訊,對於來自不同語言的符號,終究還是不同。

source

Where is Language?

將所有英文的 Embedding 平均,然後再將所有中文的 Embedding 平均,兩者相減,就得到了中文與英文之間的差距。

有趣的是,如果我們給 Multi-BERT 一句英文(例如:“there is a cat”),然後在後面的 vector 加上這個藍色的 vector(也就是中英文之間的差距),對 Multi-BERT 來說,這就變成了一句中文的句子。然後,如果我們讓 Multi-BERT 去做中文的填空題,它就能給出中文的答案了。

source

--

--