本文字?jǐn)?shù)::4024字
預(yù)計(jì)閱讀時(shí)間:12分鐘
BERT
是由Google提出的預(yù)訓(xùn)練語(yǔ)言模型,它基于transformer
架構(gòu),被廣泛應(yīng)用于自然語(yǔ)言處理領(lǐng)域,是當(dāng)前自然語(yǔ)言處理領(lǐng)域最流行的預(yù)訓(xùn)練模型之一。而了解BERT
需要先了解注意力機(jī)制與Transformers
。
注意力機(jī)制
注意力機(jī)制(Attention Mechanism)是一種在機(jī)器學(xué)習(xí)和自然語(yǔ)言處理中廣泛使用的技術(shù),它可以幫助模型在處理輸入數(shù)據(jù)時(shí)集中關(guān)注其中最重要的部分,從而提高模型的準(zhǔn)確性。
原理
注意力機(jī)制最初是從認(rèn)知神經(jīng)科學(xué)中引入到機(jī)器學(xué)習(xí)領(lǐng)域的,19世紀(jì)90年代的威廉·詹姆斯發(fā)現(xiàn)人類注意力焦點(diǎn)受到非自主性提示和自主性提示有選擇地引導(dǎo)[7]。簡(jiǎn)單來(lái)說(shuō),非自主性提示是一種無(wú)意注意,例如人會(huì)先看到最顯眼的物品,而自主性提示是一種有意注意,例如人會(huì)根據(jù)自己的需要先關(guān)注到自己需要到物品。非自主性提示與自主性提示會(huì)導(dǎo)致人類神經(jīng)網(wǎng)絡(luò)選擇性地加強(qiáng)或減弱一些特定的神經(jīng)元的活動(dòng)。
在機(jī)器學(xué)習(xí)中,注意力機(jī)制模擬了人類的這種認(rèn)知行為,采用的方式主要是通過(guò)查詢向量query
模擬自主提示,鍵值向量key
模擬非自主提示,二者交互形成注意力焦點(diǎn),從而有選擇的聚合了值向量value
(模擬感官輸入)最終形成輸出[8]。具體的計(jì)算過(guò)程可以用下圖表示:
圖1 注意力得分計(jì)算示意圖
假設(shè)有一個(gè)查詢向量q∈Rq和m個(gè)“鍵—值”對(duì)(k1,v1),...,(km,vm),其中ki∈Rk,vi∈Rv。在計(jì)算注意力得分時(shí),首先通過(guò)注意力評(píng)分函數(shù)a將查詢向量q和鍵向量ki映射成標(biāo)量,不同的注意力評(píng)分函數(shù)可以產(chǎn)生不同的注意力匯聚效果,常見(jiàn)的有縮放點(diǎn)積注意力評(píng)分函數(shù)(公式1)
公式1
再經(jīng)過(guò)softmax
運(yùn)算,得到注意力權(quán)重α(公式2),
公式2
而最終的輸出也就是注意力權(quán)重與值向量的加權(quán)和:
公式3
在實(shí)際應(yīng)用中,通常將同一組詞源輸入到注意力池化中,以便同一組詞元同時(shí)充當(dāng)query
、key
和value
。具體來(lái)說(shuō),每個(gè)query
都會(huì)關(guān)注所有的key-value
對(duì)并產(chǎn)生一個(gè)注意力輸出。由于query
、key
和value
來(lái)自同一組輸入,因此被稱為自注意力(self-attention)。
Transformer
transformers
是繼MLP
,RNN
,CNN
(第四大類模型架構(gòu)),最早被google research團(tuán)隊(duì) Ashish Vaswani 等人提出,是一種完全基于注意力機(jī)制的encoder-decoder
架構(gòu),最早應(yīng)用于機(jī)器翻譯這個(gè)任務(wù)。在transformer
之前,主要采用依賴神經(jīng)網(wǎng)絡(luò)的注意力模型,但是RNN、CNN
等傳統(tǒng)神經(jīng)網(wǎng)絡(luò)在處理長(zhǎng)序列數(shù)據(jù)時(shí)效率較低,而自注意力機(jī)制同時(shí)具有并行計(jì)算和最大路徑長(zhǎng)度兩個(gè)優(yōu)勢(shì),而完全基于注意力機(jī)制的transformer
模型解決了傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的問(wèn)題。
Transformer
的核心思想是使用注意力機(jī)制來(lái)實(shí)現(xiàn)序列中的信息交互,它將輸入序列和輸出序列中的每一個(gè)元素連接起來(lái),同時(shí)對(duì)它們進(jìn)行加權(quán)計(jì)算,以決定對(duì)于當(dāng)前元素的關(guān)注程度。這種機(jī)制將整個(gè)輸入序列通過(guò)Encoders
編碼成一個(gè)編碼向量,再通過(guò)Decoders
將之解碼為輸出序列,從而實(shí)現(xiàn)了序列到序列的轉(zhuǎn)換,可以用來(lái)完成機(jī)器翻譯、文本生成等任務(wù)。在實(shí)際應(yīng)用中,encoders
和decoders
可以單獨(dú)使用。簡(jiǎn)單的模型如下圖所示(圖2),Encoders
是由6個(gè)結(jié)構(gòu)相同encoder
組成,但是每個(gè)encoder
參數(shù)不相同;Decoders
是由6個(gè)結(jié)構(gòu)相同decoder
組成,但是每個(gè)decoder
參數(shù)不相同;
圖2 注意力模型結(jié)構(gòu)圖
Transformer
的整體網(wǎng)絡(luò)架構(gòu)中的encoder
和decoder
都采用多層堆疊的自注意力機(jī)制。encoder
將輸入序列轉(zhuǎn)換成隱藏表示,decoder
將隱藏表示轉(zhuǎn)換成輸出序列。其整體架構(gòu)圖如下圖3所示,其中左邊是encoder
,右邊是decoder
,下面我將結(jié)合下圖詳細(xì)介紹encoder
和decoder
的內(nèi)部實(shí)現(xiàn)。
encoder
對(duì)于encoder
,輸入數(shù)據(jù)首先通過(guò)一個(gè)嵌入層(embedding layer)將每個(gè)單詞轉(zhuǎn)化為一個(gè)向量表示,由于注意力機(jī)制不是順序讀取碼元的,所以在輸入中會(huì)加上位置編碼信息(positional encoding),位置編碼加上輸入向量就構(gòu)成了注意力機(jī)制的輸入。如上圖所示,輸入向量會(huì)分為查詢向量(query,下文簡(jiǎn)寫(xiě)為q)、鍵向量(key,下文簡(jiǎn)寫(xiě)為k)、值向量(value,下文簡(jiǎn)寫(xiě)為v)三個(gè)向量輸入到多頭注意力(Muiti-Head Attention)中,其中由輸入向量得到q、k、v
的過(guò)程如下圖所示。
q、k、v
是通過(guò)每一個(gè)輸入向量x分別投影到WQ
、 WK
、WV
矩陣得到的,而其中WQ
、 WK
、WV
最初是隨機(jī)初始化得到,然后不斷學(xué)習(xí)更新。在多頭注意力機(jī)制中,就是通過(guò)多套WQ
、?WK
、WV
不同的參數(shù)矩陣實(shí)現(xiàn)的,具體實(shí)現(xiàn)方式是將q、k、v投影到低維度矩陣,投影h次,也就是h頭注意力。使用多頭注意力的好處就是可以通過(guò)多角度學(xué)習(xí)輸入的信息,從而提升學(xué)習(xí)的效果。
得到q、k、v向量后,就可以根據(jù)上文介紹的注意力機(jī)制在Muiti-Head Attention中得到注意力的輸出。這里的注意力公式如下所示(公式5),該公式可由上文的2-1公式推演得出。
其中q、k、v這三個(gè)參數(shù)由上文介紹的過(guò)程投影得出的矩陣,dk表示向量長(zhǎng)度。這里是k和q做內(nèi)積,每個(gè)詞的q與所有的詞k(包括本身)做內(nèi)積,得到每個(gè)向量的相似度,可以理解為當(dāng)前詞與整句話里所有詞的相似度。每個(gè)詞都要做一遍上述計(jì)算,然后softmax之后輸出注意力權(quán)重,得到的一套注意力權(quán)重和所有的字v做加權(quán)和(相乘再相加) ,就是當(dāng)前詞最后的輸出。在多頭注意力中,就是經(jīng)過(guò)多次注意力函數(shù),然后將輸出拼接在一起,在經(jīng)過(guò)高維度矩陣投影回來(lái),得到多頭注意力的輸出。
在多頭注意力層外,每個(gè)子層都采用了殘差連接和層規(guī)范化機(jī)制,也就是上圖2-3中的Add&Norm,這兩者是構(gòu)成深度架構(gòu)的關(guān)鍵,可以有效地避免梯度消失或爆炸問(wèn)題,提升模型性能。殘差連接是指在每個(gè)子層之后都加入了一個(gè)直接連接,將輸出與未經(jīng)過(guò)注意力機(jī)制的輸入進(jìn)行相加,使得模型可以直接學(xué)習(xí)到殘差信息。層規(guī)范化則是對(duì)于每個(gè)子層的輸出進(jìn)行標(biāo)準(zhǔn)化處理,避免了輸入項(xiàng)的數(shù)值不同而導(dǎo)致的訓(xùn)練過(guò)程中的不穩(wěn)定性。
最后,每個(gè)子層后接一個(gè)前饋神經(jīng)網(wǎng)絡(luò)(feed-forward neural network),作為最后一步轉(zhuǎn)換。前饋神經(jīng)網(wǎng)絡(luò)采用門(mén)控線性單元(gated linear unit, GLU)的形式,這樣做的目的是為了實(shí)現(xiàn)語(yǔ)義空間的轉(zhuǎn)換,有效的使用序列信息,將已經(jīng)抓取出來(lái)的序列信息映射到更想要的那個(gè)語(yǔ)義空間,增加模型的擬合能力。經(jīng)過(guò)多層堆疊的encoder會(huì)生成一個(gè)編碼向量,作為decoder的輸入。
decoder
對(duì)于decoder,可以看作是encoder的逆過(guò)程。從上圖3中可以看出encoder和decoder的不同之處主要在于decoder有兩個(gè)注意力機(jī)制,第一個(gè)是mask-attention,第二個(gè)是與encoder部分相同的多頭注意力機(jī)制。decoder的第一個(gè)mask-attention是為了防止后面信息參與計(jì)算,將后面的詞mask掉,被mask掉的詞就不參與計(jì)算,從而保留自回歸屬性。decoder第二個(gè)多頭注意力,q、k、v維度是一樣的,其中k、q來(lái)自上一層encoder的輸出,然后作用于value上,這一層的作用可以理解為encoder的輸出匯聚出想要的信息。與encoder相同,在經(jīng)過(guò)注意力機(jī)制后輸出的作為前饋神經(jīng)網(wǎng)絡(luò)的輸入,實(shí)現(xiàn)語(yǔ)義空間的轉(zhuǎn)換,同樣decoder中的子層也被殘差連接和緊隨的層規(guī)范化圍繞。
BERT
BERT全稱Bidirectional Encoder Representations from Transformers,是Google于2018年提出的一種基于Transformer模型的預(yù)訓(xùn)練模型。BERT基于Transformer模型,通過(guò)多任務(wù)學(xué)習(xí)的方式,在大規(guī)模無(wú)標(biāo)注的語(yǔ)料庫(kù)上進(jìn)行預(yù)訓(xùn)練,并對(duì)各種下游自然語(yǔ)言處理任務(wù)進(jìn)行微調(diào),取得了極好的成績(jī)。
BERT的核心原理是通過(guò)多層雙向Transformer編碼器,將輸入文本表示成高維語(yǔ)義空間中的向量,使得語(yǔ)義相近的詞或句子在向量空間內(nèi)彼此接近。與傳統(tǒng)基于語(yǔ)言學(xué)規(guī)則或統(tǒng)計(jì)方法的自然語(yǔ)言處理技術(shù)相比,BERT可以從大規(guī)模的無(wú)標(biāo)注文本中學(xué)習(xí)到更全局、更復(fù)雜的語(yǔ)義信息,取得了更好的效果。
在BERT中,與原始Transformer模型不同的是,通過(guò)雙向Transformer編碼器,BERT能夠更好地捕捉上下文的相關(guān)性,在單詞或句子級(jí)別上對(duì)文本進(jìn)行建模。此外,BERT采用了掩碼語(yǔ)言建模和下一句預(yù)測(cè)等多種預(yù)訓(xùn)練任務(wù),進(jìn)一步提高了模型的泛化能力。
具體來(lái)說(shuō),BERT通過(guò)多層堆疊的Transformer 編碼器來(lái)對(duì)輸入文本進(jìn)行建模,并采用掩碼技術(shù),讓編碼器只能看見(jiàn)輸入序列中一部分的信息,從而使得編碼器具有非常強(qiáng)的泛化能力。此外,BERT還利用了兩個(gè)新的預(yù)訓(xùn)練任務(wù),即掩碼語(yǔ)言建模和下一句預(yù)測(cè),來(lái)增強(qiáng)模型對(duì)上下文的理解。
在掩碼語(yǔ)言建模任務(wù)中,采用了一種類似于“完形填空”的思路構(gòu)建掩碼模型。BERT隨機(jī)掩蓋句子中的一些單詞具體方式是隨機(jī)把一句話中15%的token(字)替換成以下內(nèi)容:
(1)這些token有80%的幾率被替換成[MASK]
(2)有10%的幾率被替換成任意一個(gè)其它的token
(3)有10%的幾率原封不動(dòng)。完成掩碼后,再用模型預(yù)測(cè)這些掩蓋掉的單詞。
在下一句預(yù)測(cè)任務(wù)中,BERT輸入一對(duì)句子,模型判斷這兩個(gè)句子對(duì)是連續(xù)的還是隨機(jī)采樣兩個(gè)句子放在一起的。這些任務(wù)都是基于無(wú)標(biāo)注文本的,通過(guò)預(yù)訓(xùn)練讓BERT學(xué)習(xí)理解語(yǔ)言的能力,從而可以在下游任務(wù)中取得更好的效果。
BERT模型的輸入主要包括三個(gè)部分:token embedding、segment embedding和position embedding。其中,token embedding表示為每個(gè)輸入詞匯對(duì)應(yīng)的向量表示;而segment embedding和position embedding則分別表示為每個(gè)句子對(duì)應(yīng)的標(biāo)識(shí)符和每個(gè)詞在序列中的位置信息。具體來(lái)說(shuō),對(duì)于輸入句子中的每個(gè)詞匯,BERT模型都會(huì)將其轉(zhuǎn)化為一個(gè)向量表示,這個(gè)向量表示是該詞匯在BERT模型的預(yù)訓(xùn)練過(guò)程中學(xué)習(xí)得到的。同時(shí),BERT模型還會(huì)在輸入的每個(gè)句子之前加上一個(gè)特殊的標(biāo)記[CLS],在每個(gè)句子之后加上另一個(gè)標(biāo)記[SEP],以便模型學(xué)習(xí)句子之間的關(guān)系。
在輸入數(shù)據(jù)的基礎(chǔ)上,BERT模型還需要進(jìn)行構(gòu)造數(shù)據(jù)的處理。具體來(lái)說(shuō),BERT模型會(huì)把輸入的文本序列按照一定的規(guī)則組合起來(lái),構(gòu)造成一段首尾各有一個(gè)特殊標(biāo)記的文本序列。在這個(gè)文本序列中,對(duì)于兩個(gè)句子之間的分界點(diǎn),BERT模型會(huì)用一個(gè)特殊的segment embedding進(jìn)行區(qū)分。同時(shí),對(duì)于每個(gè)詞在序列中的位置信息,BERT模型也會(huì)使用一個(gè)特殊的position embedding進(jìn)行標(biāo)記。
通過(guò)對(duì)輸入數(shù)據(jù)的處理,BERT模型可以將文本序列轉(zhuǎn)換成一個(gè)高維向量表示,這個(gè)高維向量通常被稱為上下文向量。BERT模型的輸出則主要包括上下文向量和[CLS]標(biāo)記對(duì)應(yīng)的向量。其中,上下文向量可以用來(lái)進(jìn)行各種下游任務(wù)的特征提取和計(jì)算,而[CLS]標(biāo)記對(duì)應(yīng)的向量則通常被用作整個(gè)文本序列的匯總表示,它可以用來(lái)進(jìn)行文本分類、語(yǔ)義相似度計(jì)算等任務(wù)。在語(yǔ)意相似度計(jì)算任務(wù)中,得到的語(yǔ)義向量會(huì)作為特征輸入給一個(gè)線性分類器,如邏輯回歸或支持向量機(jī)等,在此基礎(chǔ)上進(jìn)行二分類或多分類的任務(wù),從而實(shí)現(xiàn)語(yǔ)意相似度的計(jì)算。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-613985.html
在BERT模型中,由于使用了橫向和縱向的自注意力機(jī)制,可以充分地考慮和利用不同位置和不同上下文的信息,但也導(dǎo)致了模型對(duì)于不同維度和方向的信息處理能力不同,此外,自注意力機(jī)制無(wú)法處理一些長(zhǎng)序列的依賴關(guān)系問(wèn)題,因此在計(jì)算時(shí)會(huì)將過(guò)長(zhǎng)的文本或序列截?cái)?,這也會(huì)導(dǎo)致模型對(duì)于長(zhǎng)序列中不同方向和不同偏移量的編碼能力存在差異,這都會(huì)導(dǎo)致各項(xiàng)異性的問(wèn)題,從而進(jìn)一步影響結(jié)果的準(zhǔn)確性。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-613985.html
到了這里,關(guān)于初步了解預(yù)訓(xùn)練語(yǔ)言模型BERT的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!