洞涇做網(wǎng)站互聯(lián)網(wǎng)品牌的快速推廣
節(jié)前,我們星球組織了一場算法崗技術(shù)&面試討論會,邀請了一些互聯(lián)網(wǎng)大廠朋友、參加社招和校招面試的同學(xué).
針對算法崗技術(shù)趨勢、大模型落地項(xiàng)目經(jīng)驗(yàn)分享、新手如何入門算法崗、該如何準(zhǔn)備、面試常考點(diǎn)分享等熱門話題進(jìn)行了深入的討論。
匯總合集:《大模型面試寶典》(2024版) 發(fā)布!
《Attention is All You Need》發(fā)表于 2017 年,2018 年 Google AI Language 團(tuán)隊(duì)發(fā)表了論文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》,提出了 Bert(Bidirectional Encoder Representations from Transformers)架構(gòu)。
BERT 實(shí)際基于 Transformer 的編碼器部分,如若大家理解了前述 Transformer 系列文章,那么再學(xué)習(xí) BERT 會很容易理解。
這次依然嘗試使用圖解的方式介紹 BERT。文章一部分及配圖參考了 Rahul Agarwal 在 Medium 上的文章及原始論文,建議收藏、關(guān)注、點(diǎn)贊,無論實(shí)戰(zhàn)還是面試都是??紵狳c(diǎn)。
一、BERT 概覽
簡單來說,BERT 是一種可用于問題解答、分類、NER 等大量 NLP 下游任務(wù)的架構(gòu)??蓪㈩A(yù)訓(xùn)練后的 BERT 視為一個(gè)黑盒。
BERT 有兩個(gè)主要版本:
-
BERT Base:12層 Transformer 編碼器,隱藏層大小為768,12個(gè)自注意頭,總參數(shù)量約為1.1億。
-
BERT Large:24層 Transformer 編碼器,隱藏層大小為1024,16個(gè)自注意頭,總參數(shù)量約為3.4億。
以 BERT Base 版本的 BERT 為例,它能將輸入中的每個(gè) Token 轉(zhuǎn)化為一個(gè) H = 768 的向量。與 Transformer 相同,BERT 的輸入序列可以是一個(gè)單獨(dú)的句子,也可以是一對由分隔符 [SEP] 標(biāo)記分隔,以開始符 [CLS] 標(biāo)記開始的句子。
二、BERT 解決什么問題
如果各位小伙伴對 Imagenet 有所了解,那么也會很容易理解 BERT 的預(yù)訓(xùn)練過程。
ImageNet 是一個(gè)大型圖像數(shù)據(jù)庫,包含了數(shù)百萬個(gè)帶標(biāo)簽的圖像。CV 模型在這個(gè)數(shù)據(jù)集上進(jìn)行預(yù)訓(xùn)練,以學(xué)習(xí)圖像特征;預(yù)訓(xùn)練完成后,對于具體圖像任務(wù),可以通過在較小的數(shù)據(jù)集上,微調(diào)模型最后幾層來適應(yīng)特定任務(wù)。前幾年流行的 ResNet 和 VGG 等深度學(xué)習(xí)模型最初都是在 ImageNet 數(shù)據(jù)集上進(jìn)行預(yù)訓(xùn)練的。
BERT 模型工作原理與使用 Imagenet 進(jìn)行訓(xùn)練的大多數(shù) CV 模型類似。首先,在大型語料庫上訓(xùn)練 BERT 模型,然后通過在最后添加一些額外的層,針對具體的 NLP 任務(wù)(如分類、問題解答、NER 等)對模型進(jìn)行微調(diào)。
例如,先在維基百科這樣的語料庫上訓(xùn)練 BERT(屏蔽 LM 任務(wù)),然后再用特定的數(shù)據(jù)對模型進(jìn)行微調(diào),以完成分類任務(wù),諸如通過添加一些額外的層,將評論分為負(fù)面、正面或中性等方式。實(shí)際上,我們只是使用 [CLS] 標(biāo)記的輸出來完成分類任務(wù)。
如下圖所示的微調(diào)過程,通過添加線性層和 Softmax 層,對 [cls] Token 進(jìn)行分類輸出。
具體來說, 對 BERT 輸出的 [cls] Token 使用矩陣乘法作變換。假設(shè)我們的分類數(shù)是 3,那么 [cls] Token 向量的維度是(1×768),引入的 W 矩陣的形狀為( H × num_classes = 768 × 3), [cls] Token 代表的矩陣與 W 矩陣相乘,得到一個(gè)(1×3)的矩陣,這個(gè)矩陣再通過 Softmax 得到每個(gè)類別的概率,然后計(jì)算交叉熵?fù)p失。
當(dāng)然,也可以通過在最后一層獲取句子特征,然后再輸出到 Softmax;或者可以取所有輸出的平均值,然后再通過 Softmax。方式有多種,哪種最有效取決于任務(wù)的數(shù)據(jù)。
三、從嵌入的角度看 BERT
從嵌入的角度來看,BERT 的預(yù)訓(xùn)練為我們提供了上下文雙向嵌入。
1. 上下文 Contextual:
詞的嵌入不是固定的,它們依賴于周圍的詞語。在前序《圖解 Transformer》序列文章就詳細(xì)介紹過這個(gè)概念。比如,在“one bird was flying below another bird”這句話中,“bird”這個(gè)詞的兩個(gè)嵌入會有所不同。
2. 雙向 Bi-Directional:
LSTM 按順序讀取文本輸入(從左到右或從右到左),而 Transformer 的編碼器則是一次性讀取整個(gè)單詞序列,因此被認(rèn)為是雙向的(注意,Transformer 模型的解碼器部分通常是單向的)。因此,對于“BERT model is awesome.”這樣的句子,“model”這個(gè)詞的嵌入會包含“BERT”、“awesome”和“is”所有詞的上下文。
四、BERT 工作的具體流程
接下來從“架構(gòu)-Architecture 、輸入-Input、訓(xùn)練-Training”三個(gè)部分介紹 BERT 的具體工作流程。
1. Architecture
如果你對 Transformers 已經(jīng)有所了解,那么 BERT 的架構(gòu)非常容易理解。BERT 基本上是由我們非常熟悉的Transformers 中的編碼器堆棧(Encoder Stacks)組成的。
原始論文中,作者實(shí)驗(yàn)了兩種模型,即我們在開頭也提到過的 BERT Base 與 BERT Large 兩種架構(gòu)。
2. Training Input
我們使用下圖中的輸入結(jié)構(gòu)向 BERT 提供輸入。輸入由(兩個(gè)句子+兩個(gè)特殊的 Token)構(gòu)成。兩個(gè)特殊的 token是 [CLS]和[SEP] token。
例如,對于兩個(gè)句子“my dog is cute”和“he likes playing”,BERT 首先使用 WordPiece 分詞將序列轉(zhuǎn)換為Token,并在開頭添加[CLS] Token,在第二個(gè)句子的開頭和結(jié)尾添加[SEP] Token,因此輸入是:
在 BERT 中使用的 WordPiece 分詞方法會將單詞如 playing 分解成“play”和“##ing”。對于為什么使用 WordPiece 這種方式,我們后面再詳細(xì)介紹。
BERT 的每個(gè) token 的嵌入由 Token Embeddings、Position Embeddings、Segment Embeddings 三種嵌入向量進(jìn)行表示:
Token Embedding(詞嵌入): 通過在一個(gè)大小為 30000x768(H) 的詞表矩陣中查找,來獲取 Token 嵌入。這里,30000 是WordPiece 分詞后的詞匯表長度。這個(gè)矩陣所代表的權(quán)重將在訓(xùn)練過程中學(xué)習(xí)。
Segment Embedding(段落嵌入): 對于知識問答等任務(wù),我們需要指定這個(gè)句子是來自哪個(gè)段落。如果嵌入來自第一個(gè)句子,這些嵌入是長度為H的全0向量;如果嵌入來自第二個(gè)句子,則為全1向量。
位置嵌入(位置嵌入):這些嵌入用于指定單詞在序列中的位置,和 Transformer 中所做的一樣。位置矩陣的列數(shù)為768,矩陣的第一行是[CLS] Token的嵌入,第二行是單詞“my”的嵌入,第三行是單詞“dog”的嵌入,以此類推。
給BERT的最終輸入是 Token Embeddings、Segment Embeddings、Position Embeddings的疊加(Token Embeddings + Segment Embeddings + Position Embeddings)。
3. 訓(xùn)練遮蔽語言模型(Masked LM)
這部分是 BERT 最有趣的地方。我們將通過各種架構(gòu)嘗試并發(fā)現(xiàn)每種嘗試的缺陷,以此來解釋這些概念,并形成 BERT的最終架構(gòu)。
嘗試1:例如,如果我們按如下方法設(shè)置 BERT 訓(xùn)練,即預(yù)測輸入序列的每個(gè)單詞。
這種方法的問題在于學(xué)習(xí)任務(wù)過于簡單。網(wǎng)絡(luò)提前就知道它要預(yù)測什么,因此可以輕松地學(xué)習(xí)權(quán)重以達(dá)到100%的分類準(zhǔn)確率。
注意:這里的“預(yù)測-Predict”與 Transformer 解碼器中基于已經(jīng)生成的單詞,預(yù)測下一個(gè)單詞的“預(yù)測”的含義略微不同。這里的“預(yù)測-Predict”是“生成-Generation”的意思。這里使用“Predict”這個(gè)詞,是表達(dá)在 Masked LM 模型中,模型根據(jù)上下文信息推斷被掩蔽 token 的過程。雖然“生成”也可以理解為一種預(yù)測,但在NLP術(shù)語中,“生成”通常指的是更廣泛的內(nèi)容創(chuàng)建,而不是特定位置 token 的推斷。下面幾種方法中提到的“預(yù)測”一詞也是這樣的含義。
嘗試2:遮蔽語言模型(Masked LM)。原論文中嘗試使用此方法克服上述問題。在每個(gè)訓(xùn)練輸入序列中隨機(jī)遮蔽15%的單詞,并僅預(yù)測這些單詞的輸出。
此種方式計(jì)算損失時(shí)只針對屏蔽的單詞。模型學(xué)會了預(yù)測它未見過的單詞,同時(shí)還能看到這些單詞周圍的上下文。(注意,圖中屏蔽了 3 個(gè)單詞,實(shí)際上應(yīng)該只屏蔽 1 個(gè)單詞,因?yàn)檫@個(gè)示例中,8 個(gè)單詞的 15% 就是 1 個(gè)單詞。)
但這種方式的造成了模型在“預(yù)訓(xùn)練-微調(diào)”兩個(gè)過程的不匹配問題。
具體來說,在預(yù)訓(xùn)練階段,模型需要根據(jù)上下文預(yù)測被遮蔽的 token,因此模型會更多地依賴上下文信息來填補(bǔ)空白。但在微調(diào)階段,模型直接處理完整的句子,輸入方式不同可能會導(dǎo)致模型的預(yù)測行為與預(yù)訓(xùn)練階段存在偏差。另外,在預(yù)訓(xùn)練時(shí)模型通過預(yù)測被掩蔽的token來學(xué)習(xí)語言的結(jié)構(gòu)和語義,但在微調(diào)階段,模型的目標(biāo)通常是根據(jù)完整輸入直接進(jìn)行分類或預(yù)測,這種目標(biāo)上的差異可能導(dǎo)致模型在微調(diào)時(shí)需要重新調(diào)整。
嘗試3:使用隨機(jī)單詞的遮蔽語言模型:
在這個(gè)嘗試中,仍然會遮蔽15%的位置。但會用隨機(jī)單詞替換那些被遮蔽標(biāo)記中的20%。這樣做是為了讓模型知道,即使單詞不是[MASK]標(biāo)記,我們?nèi)匀恍枰敵鲆恍┙Y(jié)果。因此,如果我們有一個(gè)長度為500的序列,我們將遮蔽75個(gè)標(biāo)記(500的15%),在這75個(gè)標(biāo)記中,有15個(gè)標(biāo)記(75的20%)將被隨機(jī)單詞替換。示意圖如下:
這種方式的優(yōu)點(diǎn)在于,網(wǎng)絡(luò)仍然可以處理任何單詞。
但其問題在于,模型會學(xué)到一種錯(cuò)誤模式,即看到隨機(jī)替換的單詞時(shí),這些單詞永遠(yuǎn)不會是正確的輸出。比如對于我們的例子,將“l(fā)ikes”隨機(jī)替換為“eats”,而我們在這個(gè)位置需要的輸出為“l(fā)ikes”,模型會學(xué)習(xí)到“eats”的輸出永遠(yuǎn)不會是“eats”。而在不同的上下文中,比如輸入“he eats bread”,需要的輸出中包含“eats”。
嘗試4:使用隨機(jī)單詞和未遮蔽單詞的遮蔽語言模型
為了解決這個(gè)問題,作者提出了以下訓(xùn)練設(shè)置。
在訓(xùn)練數(shù)據(jù)中隨機(jī)選擇 15% 的 token 位置進(jìn)行預(yù)測。這些隨機(jī)選擇的 token 中,80%替換為[MASK]標(biāo)記,10%隨機(jī)替換為詞匯表中的其他 token,10% 保持不變。
如果我們有一個(gè)長度為 500 的序列,我們將遮蔽75個(gè) token(500的15%),在這75個(gè) token中,7個(gè) token(75的10%)將被隨機(jī) token 替換,7個(gè) token(75的10%)保持不變。示意如下:
這樣就有了最佳設(shè)置,模型不會學(xué)習(xí)到不良模式。
4. 訓(xùn)練附加的下一句預(yù)測任務(wù)(NSP)
BERT 模型在訓(xùn)練過程中還有另一個(gè)并行的于 Masked LM 的訓(xùn)練任務(wù),這個(gè)任務(wù)稱為下一句預(yù)測(Next Sentence Prediction, NSP)。在創(chuàng)建訓(xùn)練數(shù)據(jù)時(shí),我們?yōu)槊總€(gè)訓(xùn)練樣本選擇句子A和B,其中50%的情況下B是實(shí)際緊跟在A后的句子(標(biāo)記為IsNext),而另外50%的情況下B是語料庫中的一個(gè)隨機(jī)句子(標(biāo)記為NotNext)。然后我們使用[CLS]標(biāo)記的輸出來計(jì)算損失,這個(gè)損失也會通過網(wǎng)絡(luò)反向傳播來調(diào)整權(quán)重。
摘自 BERT 論文原文:許多重要的下游任務(wù),如問答(QA)和自然語言推理(NLI),都基于兩個(gè)句子之間的關(guān)系,而這種關(guān)系不是通過語言模型直接捕捉到的。為了訓(xùn)練一個(gè)能夠理解句子關(guān)系的模型,我們進(jìn)行了一種二元化的下一句預(yù)測任務(wù)(binarized next sentence prediction task)的預(yù)訓(xùn)練,這個(gè)任務(wù)可以從任何單語語料庫中輕松生成。
現(xiàn)在我們有了預(yù)訓(xùn)練的BERT模型,它可以為我們提供上下文嵌入。那么如何將它用于各種任務(wù)呢?
五、針對具體任務(wù)進(jìn)行微調(diào)
如前所述,我們可以在 [CLS] 輸出上添加幾層并微調(diào)權(quán)重,然后使用BERT進(jìn)行分類任務(wù)。
以下是論文中介紹的 BERT 用于其他任務(wù)的方法:
讓我們逐一瀏覽這些任務(wù):
1. 句子對分類任務(wù):這與分類任務(wù)非常相似。即在大小為768的[CLS]輸出上添加一個(gè)線性層和一個(gè)Softmax層(Linear + Softmax)。
2. 單句分類任務(wù):與句子對分類任務(wù)相同。
4. 單句標(biāo)注任務(wù):與訓(xùn)練 BERT 時(shí)的設(shè)置非常相似,只是我們需要為單句中的每個(gè) Token 進(jìn)行標(biāo)注。如對于詞性標(biāo)注任務(wù)(如預(yù)測名詞、動(dòng)詞或形容詞),我們只需添加一個(gè)大小為(768 x n_outputs)的線性層,并在上面添加一個(gè)Softmax層進(jìn)行預(yù)測。
3. 問答任務(wù)——這個(gè)任務(wù)中,我們給出一個(gè)問題和一個(gè)包含答案的段落:目標(biāo)是確定答案在段落中的起始和結(jié)束位置。
六、問答任務(wù)詳細(xì)工作流程
BERT 執(zhí)行問答任務(wù)的原理與 GPT 等以自回歸生成答案的模型不同。以下是關(guān)于 BERT 在執(zhí)行問答任務(wù)時(shí)的詳細(xì)流程:
1. 輸入序列
輸入序列由問題和段落拼接而成,并添加特殊標(biāo)記:
[CLS] 問題 [SEP] 段落 [SEP]
2. BERT模型輸出
輸入序列通過 BERT 模型處理,生成每個(gè) token 的上下文表示。假設(shè)輸入序列長度為 𝐿,隱藏層維度為 𝐷,則BERT 的輸出表示為一個(gè)矩陣 𝐻,其形狀為 𝐿×𝐷。
3. 定義向量 𝑆 和 𝐸
向量 𝑆 和 𝐸 是在微調(diào)過程中學(xué)習(xí)的參數(shù),用于分別預(yù)測起始位置和結(jié)束位置的分?jǐn)?shù)。若隱藏層維度 𝐷=768,則 𝑆 和 𝐸的形狀均為 1×768。
4. 計(jì)算分?jǐn)?shù)
對于每個(gè) token 的表示向量 ?𝑖(BERT的輸出),計(jì)算其作為答案起始位置和結(jié)束位置的分?jǐn)?shù)。具體計(jì)算方式向量每個(gè) ?𝑖 分別與 𝑆 和 𝐸 向量的裝置進(jìn)行點(diǎn)積(內(nèi)積),其結(jié)果為一個(gè)標(biāo)量:
5. 將分?jǐn)?shù)通過 Softmax 函數(shù)轉(zhuǎn)換為概率分布
6. 選擇最可能的起始和結(jié)束位置
- 確定起始和結(jié)束位置:根據(jù)計(jì)算出的起始位置概率分布 𝑃𝑠 和結(jié)束位置概率分布 𝑃𝑒,選擇概率最高的token 作為答案的起始和結(jié)束位置。具體做法是找到使 𝑃𝑠 和 𝑃𝑒 最大的索引位置:
- 確定答案范圍:確保起始位置 𝑦𝑠在結(jié)束位置 𝑦𝑒 之前,即 𝑦𝑠≤𝑦𝑒。如果需要,可以在推理過程中應(yīng)用額外的邏輯來處理不合邏輯的預(yù)測結(jié)果(例如,設(shè)置一個(gè)最大答案長度)。
7. 提取答案
根據(jù)確定的起始和結(jié)束位置,從輸入序列中的段落部分提取對應(yīng)的token序列,拼接成最終答案。
8. 訓(xùn)練時(shí)的損失計(jì)算
問答任務(wù)訓(xùn)練的目標(biāo)是最大化正確起始位置和結(jié)束位置的對數(shù)似然之和。假設(shè)真實(shí)的起始位置和結(jié)束位置分別為 𝑦𝑠 和 𝑦𝑒,則損失函數(shù)(負(fù)對數(shù)似然)為:
總損失函數(shù)為:
對比 BERT,GPT 在處理問答型任務(wù)時(shí),使用自回歸方式生成答案,即逐步預(yù)測每個(gè) token,基于前面的token生成下一個(gè)token,直到生成結(jié)束標(biāo)記或達(dá)到預(yù)設(shè)的最大長度。
七、WordPiece 技術(shù)與詞嵌入方法的差異
前邊我們遺留了一個(gè)問題,即 WordPiece 和詞嵌入技術(shù)方面的差異。以下是二者差異的詳細(xì)介紹:
1. 原始 Transformer 模型的詞嵌入
詞匯表:原始的 Transformer 模型通常使用一個(gè)固定的詞匯表,詞匯表中的每個(gè)單詞都被映射到一個(gè)固定長度的向量(詞嵌入)。
詞嵌入矩陣:在 Transformer 模型中,有一個(gè)詞嵌入矩陣,用于將輸入單詞轉(zhuǎn)換為對應(yīng)的向量表示。
完整單詞表示:原始 Transformer 模型中的詞嵌入通常是基于完整單詞的,也就是說,每個(gè)單詞在詞匯表中都有一個(gè)對應(yīng)的向量。
2. BERT 的 tokenization 技術(shù)
詞片(WordPiece)嵌入:BERT使用的是一種稱為 WordPiece 的子詞級別的 tokenization方法。這種方法將單詞拆分成更小的子詞單元(詞片),這些子詞單元構(gòu)成了模型的詞匯表。
更小的詞匯表:由于使用了子詞級別的 tokenization,BERT 的詞匯表比基于完整單詞的詞匯表要小得多。這種方法可以有效處理詞匯量大的問題,減少OOV(out-of-vocabulary,詞表外詞)的情況。
處理未知單詞:對于不在詞匯表中的單詞,BERT 可以通過拆分成已知的子詞單元來表示,從而更好地處理未知單詞和新詞。
詞嵌入矩陣:與原始 Transformer 類似,BERT 也有一個(gè)詞嵌入矩陣,但它是基于子詞單元的。每個(gè)子詞單元都有一個(gè)對應(yīng)的向量表示,這些向量組合在一起構(gòu)成單詞的表示。
3. 示例對比:
輸入句子:“Playing football is enjoyable.”
原始 Transformer 模型:
Tokenization結(jié)果:
[“Playing”, “football”, “is”, “enjoyable”]
詞嵌入向量:
embedding(“Playing”),embedding(“football”),embedding(“is”),embedding(“enjoyable”),每個(gè)單詞直接作為一個(gè)token處理,模型依賴于詞匯表中存在的完整單詞。
BERT 模型:
Tokenization結(jié)果:
[“Play”, “##ing”, “foot”, “##ball”, “is”, “enjoy”, “##able”]
詞嵌入向****量:
embedding(“Play”),embedding(“##ing”),embedding(“foot”),embedding(“##ball”),embedding(“is”),embedding(“enjoy”),embedding(“##able”)
八、總結(jié)
用最簡單的話語概括 BERT 的重要思想
自己總結(jié)的:
1.BERT 模型架構(gòu)利用 Transformer 編碼器堆棧結(jié)構(gòu),是一種能進(jìn)行文本雙向嵌入的語言模型。
2.BERT的 tokenization 采用的是 WordPiece 的方式,Embedding 是 Token Embeddings、Segment Embeddings、Position Embeddings 三者的疊加。
3.BERT 使用“預(yù)訓(xùn)練+微調(diào)”的方式用于分類、問答、NER 等 NLP 下游任務(wù);預(yù)訓(xùn)練采用的是 “MLM+NSP”雙任務(wù)并行的方式,使用 MLM、NSP 損失的加權(quán)和作為總損失進(jìn)行反向傳播;微調(diào)時(shí)僅需在預(yù)訓(xùn)練后的 BERT 模型上增加一個(gè)輸出層,對此輸出層進(jìn)行微調(diào)。
chatgpt-4o總結(jié)的:
1. 模型架構(gòu)
-
Transformer編碼器:BERT使用多層的 Transformer 編碼器堆棧,每層包含多頭自注意力機(jī)制和前饋神經(jīng)網(wǎng)絡(luò)。這個(gè)架構(gòu)使得 BERT 能夠有效地捕捉輸入序列中的復(fù)雜依賴關(guān)系。
-
雙向性:BERT是雙向的(Bidirectional),這意味著它在訓(xùn)練時(shí)能夠同時(shí)從左到右和從右到左看待上下文。與傳統(tǒng)的單向語言模型不同,這種雙向性使得BERT能夠更好地理解句子的上下文。
2. Tokenization 和 Embeddings
-
WordPiece Tokenization:BERT 使用 WordPiece 分詞方法,將單詞拆分為更小的子詞或字符片段,以處理未見過的詞和稀有詞。這樣可以更好地覆蓋語言中的各種詞匯。
-
三種嵌入:Token Embeddings,將每個(gè) token 映射到一個(gè)固定維度的向量;Position Embeddings,添加位置嵌入,以表示每個(gè)token在序列中的位置,從而保留順序信息;Segment Embeddings,用于區(qū)分不同的句子,特別是在句子對任務(wù)中,通過添加句子A和句子B的嵌入來區(qū)分它們。
3. 預(yù)訓(xùn)練任務(wù)
-
掩蔽語言模型(Masked Language Model, MLM):在輸入序列中隨機(jī)掩蔽15%的token,然后讓模型預(yù)測這些被掩蔽的token。這種方法使模型能夠在雙向上下文中學(xué)習(xí)每個(gè)token的表示。
-
下一句預(yù)測(Next Sentence Prediction, NSP):訓(xùn)練模型判斷兩個(gè)句子是否在原始文本中是連續(xù)的句子。輸入由兩個(gè)句子組成,50%的情況下它們是連續(xù)的,50%的情況下它們是隨機(jī)選擇的不連續(xù)句子。這有助于模型理解句子間的關(guān)系。
4. 預(yù)訓(xùn)練和微調(diào)策略
-
預(yù)訓(xùn)練:在大規(guī)模無標(biāo)簽文本數(shù)據(jù)上進(jìn)行預(yù)訓(xùn)練,使用 MLM 和 NSP 任務(wù)進(jìn)行訓(xùn)練。預(yù)訓(xùn)練使模型學(xué)習(xí)到通用的語言表示,包括詞匯、語法和句子間的關(guān)系。
-
微調(diào):在特定的下游任務(wù)數(shù)據(jù)集上進(jìn)行微調(diào)。通過在預(yù)訓(xùn)練的BERT模型頂部添加一個(gè)任務(wù)特定的輸出層(例如分類層或序列標(biāo)注層),對整個(gè)模型進(jìn)行微調(diào)。這使得 BERT 可以適應(yīng)各種特定任務(wù),如文本分類、問答、命名實(shí)體識別等。
5. 應(yīng)用場景
-
文本分類:使用[CLS] token的表示,通過一個(gè)線性分類層進(jìn)行分類任務(wù)。適用于情感分析、主題分類等任務(wù)。
-
問答系統(tǒng):輸入包括問題和段落,通過預(yù)測答案在段落中的起始和結(jié)束位置來回答問題。適用于SQuAD等問答數(shù)據(jù)集。
-
命名實(shí)體識別(NER):在每個(gè)token的表示上添加一個(gè)標(biāo)注層,預(yù)測每個(gè)token的實(shí)體類別。適用于識別文本中的人名、地名、組織名等。
-
句子對任務(wù):判斷兩個(gè)句子之間的關(guān)系,如自然語言推理(NLI)任務(wù),通過在[CLS] token的表示上添加分類層進(jìn)行預(yù)測。適用于MNLI、SNLI等數(shù)據(jù)集。
綜上, BERT(Bidirectional Encoder Representations from Transformers)是一種基于雙向Transformer編碼器的預(yù)訓(xùn)練語言模型,通過雙向的上下文嵌入和大規(guī)模預(yù)訓(xùn)練,提供了強(qiáng)大的語言表示能力。其核心包括WordPiece tokenization、Token/Position/Segment Embeddings、MLM和NSP預(yù)訓(xùn)練任務(wù),以及預(yù)訓(xùn)練+微調(diào)的應(yīng)用方式。BERT在文本分類、問答系統(tǒng)、命名實(shí)體識別等NLP任務(wù)中表現(xiàn)優(yōu)異,廣泛應(yīng)用于各種自然語言處理場景。
用通俗易懂方式講解系列
-
《大模型面試寶典》(2024版) 正式發(fā)布!
-
《大模型實(shí)戰(zhàn)寶典》(2024版)正式發(fā)布!
-
用通俗易懂的方式講解:自然語言處理初學(xué)者指南(附1000頁的PPT講解)
-
用通俗易懂的方式講解:1.6萬字全面掌握 BERT
-
用通俗易懂的方式講解:NLP 這樣學(xué)習(xí)才是正確路線
-
用通俗易懂的方式講解:28張圖全解深度學(xué)習(xí)知識!
-
用通俗易懂的方式講解:不用再找了,這就是 NLP 方向最全面試題庫
-
用通俗易懂的方式講解:實(shí)體關(guān)系抽取入門教程
-
用通俗易懂的方式講解:靈魂 20 問幫你徹底搞定Transformer
-
用通俗易懂的方式講解:圖解 Transformer 架構(gòu)
-
用通俗易懂的方式講解:大模型算法面經(jīng)指南(附答案)
-
用通俗易懂的方式講解:十分鐘部署清華 ChatGLM-6B,實(shí)測效果超預(yù)期
-
用通俗易懂的方式講解:內(nèi)容講解+代碼案例,輕松掌握大模型應(yīng)用框架 LangChain
-
用通俗易懂的方式講解:如何用大語言模型構(gòu)建一個(gè)知識問答系統(tǒng)
-
用通俗易懂的方式講解:最全的大模型 RAG 技術(shù)概覽
-
用通俗易懂的方式講解:利用 LangChain 和 Neo4j 向量索引,構(gòu)建一個(gè)RAG應(yīng)用程序
-
用通俗易懂的方式講解:使用 Neo4j 和 LangChain 集成非結(jié)構(gòu)化知識圖增強(qiáng) QA
-
用通俗易懂的方式講解:面了 5 家知名企業(yè)的NLP算法崗(大模型方向),被考倒了。。。。。
-
用通俗易懂的方式講解:NLP 算法實(shí)習(xí)崗,對我后續(xù)找工作太重要了!。
-
用通俗易懂的方式講解:理想汽車大模型算法工程師面試,被問的瑟瑟發(fā)抖。。。。
-
用通俗易懂的方式講解:基于 Langchain-Chatchat,我搭建了一個(gè)本地知識庫問答系統(tǒng)
-
用通俗易懂的方式講解:面試字節(jié)大模型算法崗(實(shí)習(xí))
-
用通俗易懂的方式講解:大模型算法崗(含實(shí)習(xí))最走心的總結(jié)
-
用通俗易懂的方式講解:大模型微調(diào)方法匯總
參考
1-Rahul Agarwa 博客鏈接:https://thealgorithmicminds.com/explaining-bert-simply-using-sketches-ba30f6f0c8cb
2-BERT 論文:https://arxiv.org/abs/1810.04805