這是閱讀《自然語(yǔ)言處理-基于預(yù)訓(xùn)練模型的方法》的學(xué)習(xí)筆記,記錄學(xué)習(xí)過(guò)程,詳細(xì)的內(nèi)容請(qǐng)大家購(gòu)買(mǎi)書(shū)籍查閱。
同時(shí)參考沐神的兩個(gè)視頻:
GPT,GPT-2,GPT-3 論文精讀【論文精讀】
BERT 論文逐段精讀【論文精讀】
概述
自然語(yǔ)言處理的核心在于如何更好地建模語(yǔ)言。廣義上的預(yù)訓(xùn)練語(yǔ)言模型可以泛指提前經(jīng)過(guò)大規(guī)模數(shù)據(jù)訓(xùn)練的語(yǔ)言模型,包括早期的Word2vec、GloVe為代表的靜態(tài)詞向量模型,以及基于上下文建模的CoVe、ELMo等動(dòng)態(tài)詞向量模型。在2018年,以GPT和BERT為代表的基于深層Transformer的表示模型出現(xiàn)后,預(yù)訓(xùn)練語(yǔ)言模型這個(gè)詞才真正被大家廣泛熟知。
大數(shù)據(jù)
獲取足夠多的大規(guī)模文本是數(shù)據(jù)是訓(xùn)練一個(gè)好的預(yù)訓(xùn)練語(yǔ)言模型的開(kāi)始。因此,預(yù)訓(xùn)練數(shù)據(jù)需要講究“保質(zhì)”和“保量”。
- “保質(zhì)”是希望預(yù)訓(xùn)練語(yǔ)料的質(zhì)量要盡可能高,避免混入過(guò)多的低質(zhì)量語(yǔ)料。
- “保量”是希望預(yù)訓(xùn)練語(yǔ)料的規(guī)模要盡可能大,從而獲取更豐富的上下文信息。
在實(shí)際情況中,訓(xùn)練數(shù)據(jù)往往來(lái)源不同。精細(xì)化地預(yù)處理所有不同來(lái)源地?cái)?shù)據(jù)是非常困難的。因此,在預(yù)訓(xùn)練數(shù)據(jù)地準(zhǔn)備過(guò)程中,通常不會(huì)進(jìn)行非常精細(xì)化地處理,僅會(huì)處理預(yù)訓(xùn)練語(yǔ)料的共性問(wèn)題。同時(shí),通過(guò)增大語(yǔ)料規(guī)模進(jìn)一步稀釋低質(zhì)量語(yǔ)料的比重,從而降低質(zhì)量較差的語(yǔ)料對(duì)預(yù)訓(xùn)練過(guò)程帶來(lái)的負(fù)面影響。這需要在數(shù)據(jù)處理投入和數(shù)據(jù)質(zhì)量之間做出權(quán)衡。
大模型
在有了大數(shù)據(jù)之后,就需要有一個(gè)足以容納這些數(shù)據(jù)的模型。數(shù)據(jù)規(guī)模和模型規(guī)模在一定程度上是正相關(guān)的。需要一個(gè)容量足夠大的模型來(lái)學(xué)習(xí)和存放大數(shù)據(jù)中的各種特征。在機(jī)器學(xué)習(xí)中,“容量大”通常指的是模型的“參數(shù)量大”。如何設(shè)計(jì)一個(gè)參數(shù)量較大的模型主要考慮兩個(gè)方面:
- 模型需要具有較高的并行程度,以彌補(bǔ)大模型帶來(lái)的訓(xùn)練速度下降的問(wèn)題;
- 模型能夠捕獲上下文信息,以充分挖掘大數(shù)據(jù)文本中豐富的語(yǔ)義信息。
綜合以上兩點(diǎn)。基于Transformer的神經(jīng)網(wǎng)絡(luò)模型成為目前構(gòu)建預(yù)訓(xùn)練語(yǔ)言模型的最佳選擇。首先Transformer模型具有較高的并行度。Transformer核心部分的多頭自注意力機(jī)制(Multi-head Self-attention
)不依賴(lài)于順序建模,因此可以快速地并行處理。與此相反,傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)語(yǔ)言模型通常基于循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN
),而RNN需要按照序列順序處理,并行化程度較低。其次,Transformer中的多頭自注意力機(jī)制能夠有效地捕獲不同詞之間的關(guān)聯(lián)程度,并且能夠通過(guò)多頭機(jī)制從不同維度刻畫(huà)這種關(guān)聯(lián)程度,使得模型能夠得到更加精準(zhǔn)的計(jì)算結(jié)果。因此主流的預(yù)訓(xùn)練語(yǔ)言模型無(wú)一例外都使用了Transformer作為模型的主體結(jié)構(gòu)。
大算力
訓(xùn)練預(yù)訓(xùn)練語(yǔ)言模型,主要使用圖形處理單元(Graphics Processing Unit, GPU
),還有張量處理單元(Tensor Processing Unit, TPU
)。
GPT
#GPT是transformer的解碼器#
#四個(gè)月之后bert出現(xiàn),bert-base的模型與gpt模型大小差不多#
#GPT3“暴力出奇跡”#
OpenAI公司在2018年提出了一種生成式預(yù)訓(xùn)練(Generative Pre-Training, GPT
)模型用來(lái)提升自然語(yǔ)言理解任務(wù)的效果,正式將自然語(yǔ)言處理帶入“預(yù)訓(xùn)練”時(shí)代?!邦A(yù)訓(xùn)練”時(shí)代意味著利用更大規(guī)模的文本數(shù)據(jù)以及更深層的神經(jīng)網(wǎng)絡(luò)模型來(lái)學(xué)習(xí)更豐富的文本語(yǔ)義表示。同時(shí),GPT的出現(xiàn)打破了自然語(yǔ)言處理中各個(gè)任務(wù)之間的壁壘,使得搭建一個(gè)面向特定任務(wù)的自然語(yǔ)言處理模型不再需要了解非常多的任務(wù)背景,只需要根據(jù)任務(wù)的輸入輸出形式應(yīng)用這些預(yù)訓(xùn)練語(yǔ)言模型,就能達(dá)到一個(gè)不錯(cuò)的效果。因此,GPT提出了“生成式預(yù)訓(xùn)練 + 判別式任務(wù)精調(diào)”的自然語(yǔ)言處理新范式,使得自然語(yǔ)言處理模型的搭建變得不再?gòu)?fù)雜。
#GPT:使用通用的預(yù)訓(xùn)練來(lái)提升語(yǔ)言的理解能力#
#GPT選了個(gè)更難優(yōu)化的問(wèn)題,同時(shí)天花板更高#
無(wú)監(jiān)督預(yù)訓(xùn)練
GPT的整體結(jié)構(gòu)是一個(gè)基于Transformer的單向語(yǔ)言模型(Transformer解碼器),即從左到右對(duì)輸入文本建模。
GPT利用常規(guī)語(yǔ)言建模的方法優(yōu)化給定文本序列
x
=
x
1
.
.
.
x
n
x=x_1...x_n
x=x1?...xn?的最大似然估計(jì)
L
P
T
L^{PT}
LPT。
L
P
T
=
∑
i
l
o
g
P
(
x
i
∣
x
i
?
k
.
.
.
x
i
?
1
;
θ
)
L^{PT}=\sum_{i}^{} logP(x_i|x_{i-k}...x_{i-1};\theta )
LPT=i∑?logP(xi?∣xi?k?...xi?1?;θ)
k
k
k表示語(yǔ)言模型的窗口大小,即基于k個(gè)歷史詞預(yù)測(cè)當(dāng)前時(shí)刻的詞
x
i
x_i
xi?;
θ
\theta
θ表示神經(jīng)網(wǎng)絡(luò)的參數(shù),可使用隨機(jī)梯度下降優(yōu)化該似然函數(shù)。
具體的,GPT使用了多層transformer作為模型的基本結(jié)構(gòu),對(duì)于長(zhǎng)度為k的窗口詞序列 x ′ = x ? k . . . x ? 1 x'=x_{-k}...x_{-1} x′=x?k?...x?1?,通過(guò)以下方式計(jì)算建模概率P。 h [ 0 ] = e x ′ W e + W p h^{[0]} = e_{x'}W^e+W^p h[0]=ex′?We+Wp h [ l ] = T r a n s f o r m e r ? B l o c k ( h l ? 1 ) ? l ∈ 1 , 2... , L h^{[l]}=Transformer-Block(h^{l-1})\forall l \in {1,2...,L} h[l]=Transformer?Block(hl?1)?l∈1,2...,L P ( x ) = S o f t m a x ( h L W e ? ) P(x)=Softmax(h^{L}{W^{e}}^\top ) P(x)=Softmax(hLWe?) e x ′ e_{x'} ex′?是 x ′ x' x′的獨(dú)熱向量表示; W e {W^e} We表示詞向量矩陣; W p W^p Wp表示位置向量矩陣(此處只截取窗口 x ′ x' x′對(duì)應(yīng)的位置向量); L L L是 T r a n s f o m e r Transfomer Transfomer的總層數(shù)。
有監(jiān)督下游任務(wù)精調(diào)
在預(yù)訓(xùn)練階段,
G
P
T
GPT
GPT利用大規(guī)模數(shù)據(jù)訓(xùn)練出基于深層
T
r
a
n
s
f
o
r
m
e
r
Transformer
Transformer的語(yǔ)言模型,已經(jīng)掌握了文本的通用語(yǔ)義表示。精調(diào)(Fine-tuning
)的目的是在通用語(yǔ)義表示的基礎(chǔ)上,根據(jù)下游任務(wù)(Downstream task
)的特性進(jìn)行領(lǐng)域匹配,使之與下游任務(wù)的形式更加契合,以獲得更好的下游任務(wù)應(yīng)用效果。
下游任務(wù)精調(diào)通常是由有標(biāo)注數(shù)據(jù)進(jìn)行訓(xùn)練和優(yōu)化的。假設(shè)下游任務(wù)的標(biāo)注數(shù)據(jù)是 C C C,其中每個(gè)樣例的輸入是 x = x 1 . . . x n x=x_1...x_n x=x1?...xn?構(gòu)成的長(zhǎng)度為 n n n的文本序列,與之對(duì)應(yīng)的標(biāo)簽是 y y y。首先將文本序列輸出預(yù)訓(xùn)練的GPT中,獲取最后一層的最后一個(gè)詞對(duì)應(yīng)的隱含層輸出 h n [ L ] h_n^{[L]} hn[L]?,緊接著,將該隱藏層輸出通過(guò)一層全連接層變換,預(yù)測(cè)最終的標(biāo)簽。
另外,為了進(jìn)一步提升精調(diào)后模型的通用性以及收斂速度,可以在下游任務(wù)精調(diào)時(shí)加入一定權(quán)重的預(yù)訓(xùn)練損失。這樣做是為了緩解在下游任務(wù)精調(diào)過(guò)程中出現(xiàn)災(zāi)難性遺忘(Catastrophic Forgetting
)問(wèn)題。在下游任務(wù)精調(diào)的過(guò)程中,GPT的訓(xùn)練目標(biāo)是優(yōu)化下游任務(wù)數(shù)據(jù)集上的效果,更強(qiáng)調(diào)特殊性。因此,勢(shì)必會(huì)對(duì)預(yù)訓(xùn)練階段學(xué)習(xí)的通用知識(shí)產(chǎn)生部分的覆蓋或擦除,丟失一定的通用性。通過(guò)結(jié)合下游任務(wù)精調(diào)損失和預(yù)訓(xùn)練任務(wù)損失,可以有效地緩解災(zāi)難性遺忘問(wèn)題。
適配不同的下游任務(wù)
不同任務(wù)之間的輸入形式各不相同,應(yīng)當(dāng)根據(jù)不同任務(wù)適配GPT的輸入形式。
下面是4中典型任務(wù)在GPT中的輸入輸出形式,其中包括:單句文本分類(lèi)、文本蘊(yùn)含、相似度計(jì)算和選擇型閱讀理解。
(1)單句文本分類(lèi)
假設(shè)輸入為
x
=
x
1
.
.
.
x
n
x=x_1...x_n
x=x1?...xn?,單句文本分類(lèi)的樣例將通過(guò)如下形式輸入到GPT中:
<
s
>
x
1
x
2
.
.
.
x
n
<
e
>
<s> x_1 x_2 ... x_n <e>
<s>x1?x2?...xn?<e>(2)文本蘊(yùn)含
文本蘊(yùn)含的輸入由兩段文本構(gòu)成,輸出由分類(lèi)標(biāo)簽構(gòu)成,用于判斷兩段文本之間的蘊(yùn)含關(guān)系。需要注意的是,文本蘊(yùn)含中的前提(Premise
)和假設(shè)(Hypothesis
)是有序的,兩者的順序必須固定。
<
s
>
x
1
(
1
)
,
x
2
(
1
)
.
.
.
x
n
(
1
)
$
x
1
(
2
)
,
x
2
(
2
)
.
.
.
x
m
(
2
)
<
e
>
<s> x_1^{(1)},x_2^{(1)}... x_n^{(1)}\$x_1^{(2)},x_2^{(2)}... x_m^{(2)}<e>
<s>x1(1)?,x2(1)?...xn(1)?$x1(2)?,x2(2)?...xm(2)?<e>(3)相似度計(jì)算
相似度計(jì)算也是由兩段文本構(gòu)成,但與文本蘊(yùn)含任務(wù)不同的是,參與相似度計(jì)算的兩段文本之間不存在順序關(guān)系。經(jīng)兩段序列輸入GPT中,得到兩個(gè)相應(yīng)的隱含層表示,最終將兩個(gè)隱含層相加,并通過(guò)一個(gè)全連接層預(yù)測(cè)相似度。
<
s
>
x
1
(
1
)
,
x
2
(
1
)
.
.
.
x
n
(
1
)
$
x
1
(
2
)
,
x
2
(
2
)
.
.
.
x
m
(
2
)
<
e
>
<s> x_1^{(1)},x_2^{(1)}... x_n^{(1)}\$x_1^{(2)},x_2^{(2)}... x_m^{(2)}<e>
<s>x1(1)?,x2(1)?...xn(1)?$x1(2)?,x2(2)?...xm(2)?<e>
<
s
>
x
1
(
2
)
,
x
2
(
2
)
.
.
.
x
m
(
2
)
$
x
1
(
1
)
,
x
2
(
1
)
.
.
.
x
n
(
1
)
<
e
>
<s> x_1^{(2)},x_2^{(2)}... x_m^{(2)}\$x_1^{(1)},x_2^{(1)}... x_n^{(1)}<e>
<s>x1(2)?,x2(2)?...xm(2)?$x1(1)?,x2(1)?...xn(1)?<e>(4)選擇型閱讀理解
選擇型閱讀理解是讓機(jī)器閱讀一篇文章,并且需要從多個(gè)選項(xiàng)中選擇出問(wèn)題對(duì)應(yīng)的正確選項(xiàng),即需要將(篇章、問(wèn)題、選項(xiàng))作為輸入,以正確選項(xiàng)編號(hào)作為標(biāo)簽。假設(shè)篇章為
p
=
p
1
p
2
.
.
.
p
n
p=p_1 p_2...p_n
p=p1?p2?...pn?,問(wèn)題為
q
1
q
2
.
.
.
q
m
q_1q_2...q_m
q1?q2?...qm?,第i個(gè)選項(xiàng)為
c
i
=
c
1
i
c
2
i
.
.
.
c
k
i
c^{i}=c_1^{i} c_2^{i}...c_k^{i}
ci=c1i?c2i?...cki?,并假設(shè)選項(xiàng)個(gè)數(shù)為N:
<
s
>
p
1
p
2
.
.
.
p
n
$
q
1
q
2
.
.
.
q
m
$
c
1
1
c
2
1
.
.
.
c
k
1
<
e
>
<s>p_1p_2...p_n\$q_1q_2...q_m\$c_1^{1} c_2^{1}...c_k^{1}<e>
<s>p1?p2?...pn?$q1?q2?...qm?$c11?c21?...ck1?<e>
<
s
>
p
1
p
2
.
.
.
p
n
$
q
1
q
2
.
.
.
q
m
$
c
1
2
c
2
2
.
.
.
c
k
2
<
e
>
<s>p_1p_2...p_n\$q_1q_2...q_m\$c_1^{2} c_2^{2}...c_k^{2}<e>
<s>p1?p2?...pn?$q1?q2?...qm?$c12?c22?...ck2?<e>
.
.
.
...
...
<
s
>
p
1
p
2
.
.
.
p
n
$
q
1
q
2
.
.
.
q
m
$
c
1
3
c
2
3
.
.
.
c
k
3
<
e
<s>p_1p_2...p_n\$q_1q_2...q_m\$c_1^{3} c_2^{3}...c_k^{3}<e
<s>p1?p2?...pn?$q1?q2?...qm?$c13?c23?...ck3?<e將(篇章,問(wèn)題,選項(xiàng))作為輸入,通過(guò)
G
P
T
GPT
GPT建模得到對(duì)應(yīng)的隱含層表示,并通過(guò)全連接層得到每個(gè)選項(xiàng)的得分。最終,將
N
N
N個(gè)選項(xiàng)的得分拼接,通過(guò)
S
o
f
t
m
a
x
Softmax
Softmax函數(shù)得到歸一化的概率(單選題),并通過(guò)交叉熵?fù)p失函數(shù)學(xué)習(xí)。
GPT2:語(yǔ)言模型是無(wú)監(jiān)督的多任務(wù)學(xué)習(xí)器。
將不同形式的自然語(yǔ)言處理任務(wù)重定義為文本生成實(shí)現(xiàn)模型的通用化。
亮點(diǎn):zero-shot,在下游任務(wù)中不做訓(xùn)練。
Prompt提示做什么任務(wù),以自然語(yǔ)言描述或者指令作為前綴表征目標(biāo)任務(wù)。
GPT3:語(yǔ)言模型是少樣本學(xué)習(xí)者
GPT3是一篇技術(shù)報(bào)告。
GPT3不做任何梯度更新和微調(diào),就能夠在只有少量目標(biāo)任務(wù)標(biāo)注樣本的情況下進(jìn)行很好的泛化。
GPT3主要展示的是超大規(guī)模語(yǔ)言模型的小樣本學(xué)習(xí)(Few-shot learning
)能力。
自回歸模型為什么會(huì)有小樣本學(xué)習(xí)的能力呢?其關(guān)鍵在于數(shù)據(jù)本身的有序性,使得連續(xù)出現(xiàn)的序列數(shù)據(jù)往往會(huì)蘊(yùn)含著同一任務(wù)的輸入輸出模式。
“上下文學(xué)習(xí)”:
語(yǔ)言模型的學(xué)習(xí)過(guò)程實(shí)際上可以看做從很多不同的任務(wù)中進(jìn)行元學(xué)習(xí)的過(guò)程。
語(yǔ)言模型在一個(gè)序列上的訓(xùn)練為一次內(nèi)循環(huán)(Inner loop
),也稱(chēng)為In-Context Learning
。模型在不同的序列上的訓(xùn)練則對(duì)應(yīng)元學(xué)習(xí)的外循環(huán)(Outer loop
),起到了在不同任務(wù)之間泛化的作用,以避免模型過(guò)擬合至某一個(gè)特定任務(wù)。數(shù)據(jù)的規(guī)模和質(zhì)量對(duì)于GPT-3的小樣本學(xué)習(xí)能力起到了關(guān)鍵的作用。
由于需要以少量標(biāo)注樣本作為條件,因此,GPT-3模型的輸入序列可能較長(zhǎng)。GPT-3使用了大小為2048的輸入,相較于其他模型,其對(duì)于內(nèi)存、計(jì)算量的要求都要更高。
損失隨著計(jì)算量的指數(shù)增加而線(xiàn)性下降。
總結(jié),語(yǔ)言模型可以暴力出奇跡。
BERT
BERT(Bidirectional Encoder Representation from Transformers
)是由Google在2018年提出的基于深層Transformer的預(yù)訓(xùn)練語(yǔ)言模型。BERT不僅充分利用了大規(guī)模無(wú)標(biāo)注文本來(lái)挖掘其中豐富的語(yǔ)義信息,同時(shí)還進(jìn)一步加深了自然語(yǔ)言處理模型的深度。
BERT的基本模型結(jié)構(gòu)由多層Transformer構(gòu)成,包含兩個(gè)預(yù)訓(xùn)練任務(wù):掩碼語(yǔ)言模型(Masked Language Model, MLM
)和下一個(gè)句子預(yù)測(cè)(Next Sentencce Prediction, NSP
)。
模型的輸入由兩段文本 x 1 x^{1} x1和 x 2 x^{2} x2拼接組成,然后通過(guò)BERT建模上下文的語(yǔ)義表示,最終學(xué)習(xí)掩碼語(yǔ)言模型和下一個(gè)句子預(yù)測(cè)。需要注意的是,掩碼語(yǔ)言模型對(duì)輸入形式并沒(méi)有特別要求,可以是一段文本也可以是兩段文本。而下一個(gè)句子預(yù)測(cè)要求模型的輸入是兩段文本。因此,BERT在預(yù)訓(xùn)練階段的輸入形式統(tǒng)一為兩段文本拼接的形式。
在BERT訓(xùn)練中主要改變了transformer層數(shù)、隱藏層維度和多頭個(gè)數(shù),模型主要分為BERT-large和BERT-base。
BERT模型可學(xué)習(xí)參數(shù)的計(jì)算,字典大小30k,q、k、v的投影矩陣在每個(gè)頭之間合并之后是一個(gè)HH的參數(shù),拿到輸出之后會(huì)再投影到HH,得到 4 ? H 2 4*H^2 4?H2,緊接著兩個(gè)MLP的大小是 H 2 H^2 H2*8,緊接著乘以層數(shù) L L L,可以大概算出BERT-base和BERT-large的參數(shù)量。
使用 W o r d P i e c e WordPiece WordPiece的原因是可以使用一個(gè)相對(duì)小的詞典,因?yàn)樵~典過(guò)大會(huì)讓大部分學(xué)習(xí)的參數(shù)都集中在詞嵌入層。
BERT的輸入表示(Input Representation
)由詞向量(Token Embeddings
)、塊向量(Segment Embeddings
)和位置向量(Position Embeddings
)之和組成:
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-683154.html
為了計(jì)算方便,這三種向量的維度相同均為
e
e
e,輸入序列對(duì)應(yīng)的輸入表示
v
v
v為:
v
=
v
t
+
v
s
+
v
p
v = v^{t} + v^{s} + v^{p}
v=vt+vs+vp(1)詞向量
與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)模型類(lèi)似,BERT中的詞向量同樣通過(guò)詞向量矩陣將輸入文本轉(zhuǎn)換為實(shí)值向量表示,假設(shè)輸入序列
x
x
x對(duì)應(yīng)的獨(dú)熱向量表示為
e
t
e^t
et,其對(duì)應(yīng)的詞向量表示
v
t
v^{t}
vt為:
v
t
=
e
t
W
t
v^{t}=e^tW^t
vt=etWt(2)塊向量
塊向量用來(lái)編碼當(dāng)前詞屬于哪一個(gè)塊(Segment
)。輸入序列中每個(gè)詞對(duì)應(yīng)的塊編碼(Segment Encoding
)為當(dāng)前詞所在的塊的序號(hào)(從0開(kāi)始計(jì)數(shù))。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-683154.html
- 當(dāng)輸入序列是單個(gè)塊的時(shí)候(如單句文本分類(lèi)),所有詞的塊編號(hào)均為0;
- 當(dāng)輸入序列是兩個(gè)塊時(shí)(如句對(duì)文本分類(lèi)),第一個(gè)句子中每個(gè)詞對(duì)應(yīng)的塊編碼為0,另一個(gè)為1。
到了這里,關(guān)于《自然語(yǔ)言處理》chapter7-預(yù)訓(xùn)練語(yǔ)言模型的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!