一、說(shuō)明
本文介紹語(yǔ)言句法中,最可能的單詞填空在self-attention的表現(xiàn)形式,以及內(nèi)部原理的介紹。
二、關(guān)于本文概述
????????在我之前的博客中,我們研究了關(guān)于生成式預(yù)訓(xùn)練 Transformer?的完整概述,關(guān)于生成式預(yù)訓(xùn)練 Transformer (GPT) 的博客- 預(yù)訓(xùn)練、微調(diào)和不同用例應(yīng)用程序。以及有關(guān)所有僅解碼器模型的解碼策略的博客。
讓我們看看如何使用 Transformer 的編碼器(僅編碼器模型)來(lái)構(gòu)建語(yǔ)言模型
????????就 GPT 而言,我們使用因果語(yǔ)言模型,這意味著我們從左到右輸入輸入,當(dāng)我們預(yù)測(cè)當(dāng)前單詞時(shí),我們只查看歷史記錄,而不查看之后的任何其他內(nèi)容,但這里 BERT 是用稍微不同的意圖是我們想要捕捉文本的本質(zhì),在這種情況下,如果我們查看當(dāng)前單詞之后的單詞,這也可能有助于建立單詞之間的關(guān)系,即當(dāng)前單詞之前的單詞以及就像它之后一樣。
????????這就是 GPT 中發(fā)生的情況,例如,如果我們有一個(gè)句子
????????我們可以為下一個(gè)單詞提供不同的輸出,這非常適合文本生成等任務(wù),并且這在當(dāng)前一代的 LLM 中比這些僅編碼器模型(如 BERT)更流行 - 我們知道目前大多數(shù)大規(guī)模 LLM大約是僅解碼器模型或僅編碼器-解碼器模型。
????????諸如命名實(shí)體識(shí)別 (NER) 之類的任務(wù)怎么樣?在這種情況下,我們可能需要依賴當(dāng)前單詞之后可能出現(xiàn)的單詞來(lái)決定它是什么類型的 NER。在這里,我們需要進(jìn)行雙向表示或交互,例如“我從德里去了果阿”。在這種情況下,“前往果阿”也可能有助于確定德里的 NER 位置。因此,這就是我們可以查看當(dāng)前單詞兩側(cè)的單詞的動(dòng)機(jī),如果我們查看像“主語(yǔ)賓語(yǔ)動(dòng)詞”這樣的語(yǔ)言,其中賓語(yǔ)與兩側(cè)的主語(yǔ)和動(dòng)詞都有關(guān)系。或者“主語(yǔ)動(dòng)詞賓語(yǔ)”其中動(dòng)詞與主語(yǔ)和賓語(yǔ)有關(guān)系。
????????假設(shè)我們有填空的任務(wù) -
— — — — — 已將其新操作系統(tǒng)運(yùn)送到 — — — — 手機(jī)上。
????????在這種情況下,根據(jù)空白后面的所有內(nèi)容 - 我們可以預(yù)測(cè)它是一個(gè)已經(jīng)發(fā)貨的公司名稱,并且它必須是compnay。因此,此類任務(wù)需要雙方的上下文,因此研究允許我們使用雙方輸入的模型是有意義的,這也是 BERT 背后的基本思想。那么我們?nèi)绾螐妮斎霐?shù)據(jù)的兩側(cè)啟用上下文建模,為此他們提出了掩碼語(yǔ)言建模。在GPT 的情況下,我們從左到右獲取上下文,該建模稱為因果語(yǔ)言建模。
????????我們需要查看兩個(gè)方向(周?chē)膯卧~)來(lái)預(yù)測(cè)屏蔽單詞
i — — — — — 讀取 — — — — -[eos]
????????使用兩個(gè)方向的上下文單詞預(yù)測(cè)屏蔽單詞(如 CBOW)。這稱為掩碼語(yǔ)言建模 (MLM)?,F(xiàn)在我們不能使用變壓器的解碼器組件,因?yàn)樗举|(zhì)上是單向的。所以這里我們可以使用變壓器的編碼器部分。現(xiàn)在,問(wèn)題被轉(zhuǎn)換為
????????我們預(yù)測(cè)的掩碼是相互獨(dú)立的,即,如果我們屏蔽了第二個(gè)和第八個(gè)標(biāo)記,并且我們?cè)诘诙€(gè)標(biāo)記處預(yù)測(cè)了某些內(nèi)容,那么我們不會(huì)使用該信息來(lái)預(yù)測(cè)第八個(gè)標(biāo)記。對(duì)于第 8 個(gè)標(biāo)記,我們?nèi)匀徽J(rèn)為第二個(gè)標(biāo)記仍然是掩碼,對(duì)于第二個(gè)標(biāo)記,我們?nèi)匀徽J(rèn)為第 8 個(gè)標(biāo)記是掩碼。我們可以將一個(gè)句子視為 20 個(gè)標(biāo)記 - 一些 3 個(gè)標(biāo)記被屏蔽,我們需要通過(guò)僅查看剩余的 17 個(gè)標(biāo)記來(lái)預(yù)測(cè)這 3 個(gè)標(biāo)記,并且我們不會(huì)按順序執(zhí)行此操作,即,我們不會(huì)先預(yù)測(cè)第二個(gè)標(biāo)記,然后再預(yù)測(cè)被屏蔽的第 8 個(gè)令牌現(xiàn)在識(shí)別 18 個(gè)令牌,而不是最初可用的 17 個(gè)令牌。因此,僅使用 17 個(gè)令牌即可預(yù)測(cè)一切。
????????現(xiàn)在讓我們看看是否可以屏蔽一些輸入并為這些屏蔽的單詞生成輸出。在僅解碼器模型(因果語(yǔ)言建模)中,我們看到當(dāng)前單詞焦點(diǎn)之后的單詞看不到,并且它們被屏蔽以進(jìn)行預(yù)測(cè)(第 i 個(gè)單詞之后的單詞或標(biāo)記以順序方式屏蔽,其中具有無(wú)窮大值的超訓(xùn)練矩陣使用 - 請(qǐng)參閱之前的博客)。
????????這里我們也可以屏蔽掉一些單詞,看看屏蔽掉的單詞是什么?我們知道,在自注意力層中,每個(gè)單詞都會(huì)關(guān)注單詞序列中的每個(gè)其他單詞。我們的目標(biāo)是隨機(jī)屏蔽一些單詞并預(yù)測(cè)被屏蔽的單詞
????????掩碼不是連續(xù)的,但它們出現(xiàn)在隨機(jī)位置,我們將它們的位置放置為無(wú)窮大值,它們對(duì)注意力權(quán)重解決方案的貢獻(xiàn)為零。
????????我們可以像 CLM 中那樣屏蔽要屏蔽的單詞的注意力權(quán)重嗎?
????????假設(shè)我們要屏蔽第一個(gè)單詞和第四個(gè)單詞的單詞或標(biāo)記——我們可以有這樣的掩碼矩陣。我們可以像下面這樣引入Mask嗎?沒(méi)有為什么?
????????因?yàn)槲覀兿MP土私猓ㄗ⒁猓┛瞻资鞘裁矗@樣它們就不會(huì)從方程中刪除。我們可以將掩碼視為破壞原始輸入文本的噪聲。然后模型的任務(wù)是恢復(fù)原始令牌。這類似于自動(dòng)編碼器的去噪目標(biāo)。因此,掩碼語(yǔ)言建模(MLM)也被稱為預(yù)訓(xùn)練去噪目標(biāo)。因此,我們不能使用屏蔽自我注意力,但我們可以使用稱為屏蔽令牌的特殊令牌,即,這些成為詞匯表中的單詞之一,與我們所使用的單詞相同,例如,我、你、我等,所以這里是“屏蔽”也是詞匯表中的單詞之一。
????????變壓器的輸入是帶有隨機(jī)屏蔽數(shù)據(jù)的序列,這會(huì)將其傳遞給編碼器,編碼器將在每一層生成 T 個(gè)表示,直到最后一層。在最后一層的適當(dāng)點(diǎn),我們想要預(yù)測(cè)實(shí)際的單詞是什么。
????????假設(shè)我們只有 1 層——在這一層的末尾,我們可以通過(guò)這種方式看到分布。
????????請(qǐng)注意,僅預(yù)測(cè)一組 M 個(gè)屏蔽詞,因此計(jì)算這些預(yù)測(cè)的交叉熵?fù)p失。通常,輸入序列中 15% 的單詞被屏蔽。非常高的掩蔽會(huì)導(dǎo)致服務(wù)器丟失上下文信息,并且模型將無(wú)法學(xué)習(xí)良好的表示。另一方面,很少的掩蔽需要很長(zhǎng)時(shí)間才能收斂(因?yàn)樘荻戎迪鄬?duì)較?。┎⑶沂褂?xùn)練效率低下。但是,可以根據(jù)模型大小、掩蔽方案和優(yōu)化算法進(jìn)行權(quán)衡。
????????多層雙向變壓器編碼器架構(gòu)
????????BERT 基礎(chǔ)模型包含 12 層,每層 12 個(gè)注意力頭
????????輸入序列中的屏蔽詞(15%)被均勻采樣。其中,80% 被替換為 [mask] token,10% 被替換為隨機(jī)單詞,其余 10% 保留原樣。(為什么?)
????????假設(shè)我們有 200 個(gè)標(biāo)記的輸入序列,并且我們選擇其中 15% 被屏蔽,那么 200 個(gè)(30 個(gè)單詞)中的 15% 將被屏蔽。在這 30 個(gè)單詞中,其中 80%(24 個(gè)單詞)被替換為mask token ,這 3 個(gè)單詞(30 個(gè)單詞)中的 10% 被隨機(jī)單詞替換,另外 10%(30 個(gè)單詞)3 個(gè)單詞被保留為原樣 —我們?yōu)槭裁匆诒A舴矫孢@樣做?
????????在適應(yīng)下游任務(wù)時(shí),特殊掩碼標(biāo)記不會(huì)成為數(shù)據(jù)集的一部分。
????????我們還有一個(gè)目標(biāo)函數(shù),稱為
三、下一句話預(yù)測(cè)(NSP):
????????現(xiàn)在,讓我們用一對(duì)句子 (A,B) 和指示句子 B 是否自然地跟隨句子 A 的標(biāo)簽來(lái)擴(kuò)展輸入。
輸入:句子:A
輸入:設(shè)置:B
標(biāo)簽 : 下一個(gè)
????????我們這里有特殊的標(biāo)記,如“CLS”(句子開(kāi)頭)和“SEP”(分隔符)。原始序列將變?yōu)?T +2 個(gè)令牌,因此每一層的輸出也將具有 T+2 表示。我們的目標(biāo)是檢查第二個(gè)句子是否實(shí)際上是第一個(gè)句子的下一個(gè)句子。因此,首先我們將采用屬于“CLS”的第一個(gè)表示,從這里我們將嘗試解決簡(jiǎn)單的二元任務(wù),即第二個(gè)句子是否實(shí)際上是第一個(gè)句子的下一個(gè)句子。那么我們?nèi)绾蝿?chuàng)建用于創(chuàng)建此任務(wù)的訓(xùn)練數(shù)據(jù)呢?我們已經(jīng)有了帶有 a、b 的自然句子,它們是句子對(duì)和代表下一個(gè)句子標(biāo)志的標(biāo)簽 (1/0)。在訓(xùn)練過(guò)程中,我們傳遞兩個(gè)輸入(a,b)和一個(gè)標(biāo)簽,它的工作是最大化概率(1/0)??偟膩?lái)說(shuō),我們看到了兩個(gè)目標(biāo),第一個(gè)目標(biāo)是使用詞匯表上的交叉熵?fù)p失正確預(yù)測(cè)屏蔽標(biāo)記,第二個(gè)目標(biāo)是下一個(gè)句子預(yù)測(cè),這只是一個(gè)二元分類問(wèn)題。
????????在 50% 的情況下,句子 B 是句子 A 之后的自然句子。在 50% 的情況下,句子 B 是來(lái)自標(biāo)記為 NotNext 的語(yǔ)料庫(kù)的隨機(jī)句子。使用 NSP 目標(biāo)進(jìn)行預(yù)訓(xùn)練可顯著提高問(wèn)答 (QA) 和類似任務(wù)的性能。
????????這是早期的發(fā)現(xiàn),但一年后,這個(gè) NSP 目標(biāo)對(duì)下游任務(wù)并沒(méi)有多大幫助,之后通常會(huì)被刪除,?并且在 BERT 的衍生版本中只使用了屏蔽語(yǔ)言建模目標(biāo)。
????????我們將有令牌嵌入,其中我們得到 |v| 的所有單詞的嵌入矩陣?x dmodel(v — 是詞匯表,dmodel 是維度)。除此之外,我們還為每個(gè)分段提供了分段嵌入,其中它是 2 x dmodel。我們還有位置嵌入,將所有這些加起來(lái)為變壓器提供一個(gè)統(tǒng)一的嵌入。
????????因此,在上面我們可以看到很多編碼器層,其中最后一層將包含最終表示的詳細(xì)信息。我們將對(duì)下一句預(yù)測(cè)目標(biāo)進(jìn)行預(yù)測(cè),并且還將預(yù)測(cè)屏蔽語(yǔ)言模型。所以這里的總損失是語(yǔ)言建模的損失+下一個(gè)句子預(yù)測(cè)的損失。
四、預(yù)訓(xùn)練和參數(shù)
????????數(shù)據(jù)集:
????????模型架構(gòu):
????????參數(shù)計(jì)算
????????我們的詞匯量為 30000,每個(gè)單詞或標(biāo)記都以 768 個(gè)維度表示。
????????有 3 個(gè)矩陣 (Wk, Wq, Wv) ,每個(gè)矩陣都有 768 維的輸入,12 個(gè)注意力頭生成 - 12 … 64 維嵌入,當(dāng)我們連接它們時(shí),我們將得到 768 維。對(duì)于 Wo 矩陣,一旦連接我們就得到了 768 x 768 ~0.6M 的線性層。
????????在 FFN 中,768 向量將轉(zhuǎn)換為 3072,而這個(gè) 3072 將轉(zhuǎn)換回 768,然后我們就有偏差 (3072 + 768) 。
五、適應(yīng)下游任務(wù)
????????現(xiàn)在我們已經(jīng)完成了預(yù)訓(xùn)練,輸入來(lái)自維基百科語(yǔ)料庫(kù)(25 億個(gè)單詞)和書(shū)籍語(yǔ)料庫(kù)(8 億個(gè)單詞),其中我們有長(zhǎng)度為 512 的句子或段落,我們將整個(gè)內(nèi)容作為輸入,其中一些單詞被屏蔽,我們知道這些屏蔽單詞是什么,因?yàn)樗鼈兇嬖谟诰S基百科中,并且我們知道正確的輸出是什么樣的。此訓(xùn)練是通過(guò)大量訓(xùn)練示例完成的,并非針對(duì)任何特定任務(wù)(問(wèn)答、NER 等)進(jìn)行訓(xùn)練。這種預(yù)訓(xùn)練只是為了學(xué)習(xí)語(yǔ)言而進(jìn)行的?,F(xiàn)在我們想使用這個(gè)預(yù)訓(xùn)練模型,我們相信它現(xiàn)在對(duì)語(yǔ)言有了更好的理解。鑒于這已經(jīng)學(xué)到了很多關(guān)于我們的語(yǔ)言的知識(shí),我們只是希望通過(guò)合理數(shù)量的標(biāo)記數(shù)據(jù),我們將在所有下游任務(wù)上獲得良好的性能。當(dāng)時(shí)有兩種流行的方法。
六、分類:基于特征
????????現(xiàn)在假設(shè)我們已經(jīng)對(duì)模型進(jìn)行了預(yù)訓(xùn)練,我們有一個(gè)稱為“CLS”的特殊標(biāo)記,當(dāng)我們?cè)诿恳粚佑?jì)算 CLS 的后續(xù)表示時(shí),它當(dāng)然會(huì)看到輸入句子中的所有單詞,因?yàn)樗诓扇〖訖?quán)注意力。如果我們將其用于下游任務(wù),則句子中不會(huì)有任何掩碼。我們可以假設(shè)“CLS”充當(dāng)聚合器,因?yàn)樗旧頉](méi)有任何意義,因?yàn)樗且粋€(gè)特殊的代幣。
????????假設(shè)我們已經(jīng)通過(guò)情感分析對(duì)評(píng)論數(shù)據(jù)進(jìn)行了標(biāo)記,并且希望在情感分析這一下游任務(wù)中使用這些預(yù)先訓(xùn)練的知識(shí)。
????????獲取這個(gè)輸入序列并將其傳遞給 BERT(這句話的長(zhǎng)度小于 512,如果需要,可以進(jìn)行適當(dāng)?shù)奶畛洌?,?12 層 BERT 之后,它給出了所有標(biāo)記的最終結(jié)果表示 - 我們只采用 CLS 標(biāo)記的表示,我們認(rèn)為這是輸入序列的豐富表示,因?yàn)檫@種表示是基于經(jīng)過(guò)訓(xùn)練的 BERT 模型構(gòu)建的,該模型已經(jīng)看到了大量語(yǔ)言數(shù)據(jù),因此它知道語(yǔ)言交互是什么以及如何捕獲它們,然后給出一種表示。在傳統(tǒng)的機(jī)器學(xué)習(xí)中,我們有特征表示,然后在其之上我們使用機(jī)器學(xué)習(xí)模型——我們可以在這里使用相同的想法,只不過(guò)特征表示來(lái)自 BERT。我們從最后一層獲取 CLS 最終表示并將其用作輸入 - 這種表示優(yōu)于僅連接單個(gè)單詞的表示(例如 word2vec),或者例如邏輯回歸或任何其他分類模型。
BERT的所有參數(shù)都被凍結(jié),只有分類頭從頭開(kāi)始訓(xùn)練。
????????在上面的身體部分 - 我們沒(méi)有在這里訓(xùn)練任何東西,因?yàn)橛?xùn)練已經(jīng)完成了。整個(gè)過(guò)程是靜態(tài)的,因?yàn)槲覀冎贿M(jìn)行一次訓(xùn)練,然后將 X 與所有訓(xùn)練數(shù)據(jù)結(jié)合起來(lái),轉(zhuǎn)換為 X 個(gè)特征,然后忘記我們之前的 BERT。當(dāng)然,當(dāng)我們?cè)跍y(cè)試時(shí)有新的評(píng)論時(shí),我們將轉(zhuǎn)換為 X 特征并將該特征作為輸入傳遞給 ML 模型。
????????分類: 微調(diào):
????????取一個(gè)長(zhǎng)度小于 512 的句子并將其作為 BERT 的輸入(如果需要,可以使用適當(dāng)?shù)奶畛洌?/span>
????????添加分類頭(同樣可以是任何合適的 ML 模型)。隨機(jī)初始化分類頭的參數(shù)。
????????現(xiàn)在,訓(xùn)練整個(gè)模型,包括新數(shù)據(jù)集預(yù)訓(xùn)練 BERT 的參數(shù)。但請(qǐng)注意,我們不會(huì)屏蔽輸入序列中的單詞(這就是我們?cè)陬A(yù)訓(xùn)練期間用隨機(jī)單詞替換 10% 的屏蔽單詞的原因)。據(jù)觀察,分類頭中使用的模型比基于特征的方法使用更少數(shù)量的標(biāo)記訓(xùn)練樣本來(lái)快速收斂。
????????我們將從整個(gè)網(wǎng)絡(luò)反向傳播——我們可以訓(xùn)練這里引入的新參數(shù)(768 x 2),并且還學(xué)習(xí)整個(gè) Wq、Wk、Wv——實(shí)際上,這里發(fā)生的事情是網(wǎng)絡(luò)中的所有內(nèi)容開(kāi)始專門(mén)用于該任務(wù)情感分析意味著它將嘗試調(diào)整參數(shù)并在這項(xiàng)任務(wù)上做得很好。我們之前討論的另一種方法將凍結(jié)上面顯示的藍(lán)色塊,并且它不會(huì)通過(guò)該塊進(jìn)行反向傳播,并且該塊將保持靜態(tài)。
S和E都是可學(xué)習(xí)的參數(shù)。
如果覺(jué)得有幫助請(qǐng)點(diǎn)贊??或者評(píng)論????文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-777263.html
參考:
大型語(yǔ)言模型簡(jiǎn)介 —講師:Mitesh M. Khapra文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-777263.html
到了這里,關(guān)于Transformer 的雙向編碼器表示 (BERT)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!