天天看點

BERT 了解

BERT的基礎架構是Transformer的encoder部分:

BERT 了解

為什麼說基礎架構是Transformer的encoder部分,原因:BERT是12個encoder的疊加:

BERT 了解

而Transformer的架構是這樣的:

BERT 了解

Transformer中的輸入是input embedding和positional encoding,而BERT的輸入是:input=token embedding + segment embedding + position embedding

BERT 了解

解釋一下上面的3個部分的輸入:

Token embedding:一行句子中的每個單詞(包括特殊符号CLS和SEP)作為一個token,對這些token做embedding。

Segment embedding:對于一些特殊的任務比如NSP(Next Sentence Prediction),這個任務是預測兩個句子之間的關系,是否屬于順序上下文關系(二分類),這個任務的輸入需要句子對,那麼就需要特殊符号來差別這兩個句子。一行句子中第一個SEP符号之前的單詞,屬于第一個句子,那麼它們的Segment embedding全為0,第一個SEP符号之後的單詞,屬于第二個句子,它們的Segment embedding全為1。而CLS呢,它是一個向量,當我們的BERT模型訓練完成之後,就将CLS輸入到最後一層prediction層,去完成NSP二分類任務。(需要注意的一點是,CLS不能代表整個句子的語義資訊,如果直接拿CLS向量去做文本相似度的任務效果非常不好,不過有些論文已經在這上面做出了改進,現在是有一些方法可以用BERT做文本相似度)。

Position embedding:對一行句子中每個單詞(包括特殊符号)的索引做一個embedding,BERT規定句子的Max_len=512。

接下來看BERT的兩個任務:MLM(Mask Language Model掩碼語言模型)和NSP(Next Sentence Prediction)

MLM

在介紹MLM之前,先來了解兩個概念,AR和AE:

BERT 了解

舉個例子:

BERT 了解

對于同樣的一句話:我愛吃飯,AR模型在預測這句話出現的機率時是單側的,先預測“我”出現的機率,再預測在“我”出現的條件下“愛”出現的機率,以此類推,可以看出這是依照句子順序來預測的。而AE模型會mask句子中的單字(是單字,不是單詞),比如mask吃之後,那麼公式左邊在“我愛mask飯”的條件下“我愛吃飯”出現的機率就變成了,在“我愛飯”條件下“吃”出現的機率。AE模型mask文本之後,能夠利用上下文資訊使得文本重建。BERT中就是用到了AE模型。

但AE模型有個問題,當mask的單詞存在依賴關系時,它不能夠利用這兩個單字之間的關系,隻能将它們認為是互相獨立的,如下圖所示。

BERT 了解

BERT中的做法是,對于所有的文本,隻mask 15%的文本,并且在mask的15%中,80%的是用[mask]符号代替,10%是保持原來的字,另10%是從詞清單中選擇任意一個詞替代。BERT中代碼是這樣寫的:

BERT 了解

NSP

BERT中訓練NSP任務時使用的樣本如下:

BERT 了解

這樣會混淆兩個概念(主題預測和連貫性預測),同一訓練語料庫中抽取到的兩個連續的段落大機率是屬于同一個主題的,而從不同文檔中随機建立的一對段落大機率是不同主題的,這樣做出來的效果是非常好,但是已經混淆了概念。(因為主題預測比連貫性預測要容易得多)。但目前已經有論文提出了新的樣本(同一文檔中的連續段落為正樣本,颠倒順序之後為負樣本做訓練)。

繼續閱讀