之前的文章從attention講解到了transformer,本文將會針對目前大熱的bert進行講解,bert的內部結構其實就是多個transformer 的encoder,如果您對transformer並不了解,請參閱我之前的博文。
從創新的角度來看,bert其實並沒有過多的結構方面的創新點,其和gpt一樣均是採用的transformer的結構,相對於gpt來說,其是雙向結構的,而gpt是單向的,如下圖所示
其次bert在多方面的nlp任務變現來看效果都較好,具備較強的泛化能力,對於特定的任務只需要新增乙個輸出層來進行fine-tuning即可。
先看下bert的內部結構,官網提供了兩個版本,l表示的是transformer的層數,h表示輸出的維度,a表示mutil-head attention的個數
b er
tbas
e:l=
12,h=
768,a=
12,to
talp
aram
eter
s=110m
bert_:l=12,h=768,a=12,total parameters=110m
bertba
se:
l=12
,h=7
68,a
=12,
tota
lpar
amet
ers=
110m
b er
tlar
ge:l
=24,h
=1024,a
=16,t
otal
para
mete
rs=340
mbert_:l=24, h=1024, a=16, total parameters=340m
bertla
rge
:l=2
4,h=
1024
,a=1
6,to
talp
aram
eter
s=34
0m從模型的層數來說其實已經很大了,但是由於transformer的residual模組,層數並不會引起梯度消失等問題,但是並不代表層數越多效果越好,有論點認為低層偏向於語法特徵學習,高層偏向於語義特徵學習。
首先我們要了解一下什麼是預訓練模型,舉個例子,假設我們有大量的維基百科資料,那麼我們可以用這部分巨大的資料來訓練乙個泛化能力很強的模型,當我們需要在特定場景使用時,例如做文字相似度計算,那麼,只需要簡單的修改一些輸出層,再用我們自己的資料進行乙個增量訓練,對權重進行乙個輕微的調整。
預訓練的好處在於在特定場景使用時不需要用大量的語料來進行訓練,節約時間效率高效,bert就是這樣的乙個泛化能力較強的預訓練模型。
接下來我們看看bert的預訓練過程,bert的預訓練階段採用了兩個獨有的非監督任務,乙個是masked language model,還有乙個是next sentence prediction。
mlm可以理解為完形填空,作者會隨機mask每乙個句子中15%的詞,用其上下文來做**,例如:my dog is hairy → my dog is [mask]
此處將hairy進行了mask處理,然後採用非監督學習的方法**mask位置的詞是什麼,但是該方法有乙個問題,因為是mask15%的詞,其數量已經很高了,這樣就會導致某些詞在fine-tuning階段從未見過,為了解決這個問題,作者做了如下的處理:
那麼為啥要以一定的概率使用隨機詞呢?這是因為transformer要保持對每個輸入token分布式的表徵,否則transformer很可能會記住這個[mask]就是"hairy"。至於使用隨機詞帶來的負面影響,文章中說了,所有其他的token(即非"hairy"的token)共享15%*10% = 1.5%的概率,其影響是可以忽略不計的。
選擇一些句子對a與b,其中50%的資料b是a的下一條句子,剩餘50%的資料b是語料庫中隨機選擇的,學習其中的相關性,新增這樣的預訓練的目的是目前很多nlp的任務比如qa和nli都需要理解兩個句子之間的關係,從而能讓預訓練的模型更好的適應這樣的任務。
bert的輸入可以是單一的乙個句子或者是句子對,實際的輸入值包括了三個部分,分別是token embedding詞向量,segment embedding句向量,每個句子有個句子整體的embedding項對應給每個單詞,還有position embedding位置向量,這三個部分相加形成了最終的bert輸入向量。
bert開啟了nlp領域的預訓練學習,大大提公升了模型的訓練效率,相信在未來也會有更多優秀的預訓練模型踴躍而出。
如果您對bert的實戰感興趣,請參閱我的其他部落格。
BERT原理詳解
網上關於bert的模型講的好的很多 參考bert模型學習與分析 谷歌bert模型深度解析 徹底搞懂bert 這裡簡單描述一下bert和openai gpt模型區別與聯絡 bert和gpt 都是使用了transformer結構,transform的encoder和decoder是有區別的,這也是ber...
Bert原理與使用
一.簡介 1.bert模型的核心思想有兩點,對推動nlp的發展有著重要的作用 1 transformer結構 2 無監督的預訓練。transformer是乙個只基於注意力 attention 機制的序列模型。bert模型同時需要預訓練,從兩個無監督任務中獲取權重 語言建模 給定左右上下文,丟失的單詞...
bert原始碼詳解
1 bert結構 2 句子token 原始輸入my dog is cute bert的token方式有3種,basictoken,peicetoken,fulltoken 在這篇部落格中,作者進行了論述 4 output 5 任務 mlm nsp mlm任務中被選15 的 for index in ...