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