一、BERT 的本質(zhì)
BERT架構(gòu):一種基于多層Transformer 編碼器的預(yù)訓練語言模型,通過結(jié)合Tokenization、多種Embeddings和特定任務(wù)的輸出層,能夠捕捉文本的雙向上下文信息,并在各種自然語言處理任務(wù)中表現(xiàn)出色。
輸入層 (Input) BERT的輸入是一個原始的文本序列,它可以是單個句子,也可以是兩個句子(例如,問答任務(wù)中的問題和答案)。在輸入到模型之前,這些文本需要經(jīng)過特定的預(yù)處理步驟。
Tokenization 和 EmbeddingsTokenization : 輸入文本首先通過分詞器(Tokenizer)被分割成Token。這一步通常包括將文本轉(zhuǎn)換為小寫、去除標點符號、分詞等。BERT使用WordPiece分詞方法,將單詞進一步拆分成子詞(subwords),以優(yōu)化詞匯表的大小和模型的泛化能力。Token Embeddings : 分詞后的Token被映射到一個高維空間,形成Token Embeddings。這是通過查找一個預(yù)訓練的嵌入矩陣來實現(xiàn)的,該矩陣為每個Token提供一個固定大小的向量表示。Segment Embeddings : 由于BERT 能夠處理兩個句子作為輸入(例如,在句子對分類任務(wù)中),因此需要一種方法來區(qū)分兩個句子。Segment Embeddings用于此目的,為每個Token添加一個額外的嵌入,以指示它屬于哪個句子(通常是“A”或“B”)。Position Embeddings : 由于Transformer 模型本身不具有處理序列中Token位置信息的能力,因此需要位置嵌入來提供這一信息。每個位置都有一個獨特的嵌入向量,這些向量在訓練過程中學習得到。Token Embeddings、Segment Embeddings和Position Embeddings三者相加,得到每個Token的最終輸入嵌入。
BERT的網(wǎng)絡(luò)結(jié)構(gòu) (Network Structure of BERT) BERT的核心是由多個Transformer 編碼器層堆疊而成的。每個編碼器層都包含自注意力機制和前饋神經(jīng)網(wǎng)絡(luò) ,允許模型捕捉輸入序列中的復(fù)雜依賴關(guān)系。
自注意力機制 : 允許模型在處理序列時關(guān)注不同位置的Token,并計算Token之間的注意力權(quán)重,從而捕捉輸入序列中的依賴關(guān)系。
前饋神經(jīng)網(wǎng)絡(luò) : 對自注意力機制的輸出進行進一步轉(zhuǎn)換,以提取更高級別的特征。
殘差連接和層歸一化 : 用于提高模型的訓練穩(wěn)定性和效果,有助于緩解梯度消失和梯度爆炸問題。
輸出層 (Output) BERT的輸出取決于特定的任務(wù)。在預(yù)訓練階段,BERT采用了兩種任務(wù):Masked Language Model(MLM)和Next Sentence Prediction(NSP) 。
MLM : 在這種任務(wù)中,BERT預(yù)測輸入序列中被隨機遮蓋的Token。模型的輸出是每個被遮蓋Token的概率分布,通過Softmax層得到。
NSP : 這種任務(wù)要求BERT預(yù)測兩個句子是否是連續(xù)的。模型的輸出是一個二分類問題的概率分布。
BERT模型的輸入 : 通過結(jié)合Token Embeddings、Segment Embeddings和Position Embeddings三種嵌入方式,BERT等模型能夠全面捕獲文本的語義和上下文信息,為各類自然語言處理任務(wù)提供強大的基礎(chǔ)表示能力。
Token Embeddings:
在BERT中,輸入文本首先被分割成Token序列(單詞、子詞等),每個Token都會被映射到一個高維向量空間,形成Token Embeddings。這些嵌入捕獲了Token的語義信息,是模型理解文本的基礎(chǔ)。
Token Embeddings是通過在大規(guī)模語料庫上進行無監(jiān)督預(yù)訓練得到的,這使得BERT能夠理解和處理各種復(fù)雜的語言現(xiàn)象和語義關(guān)系。
Segment Embeddings:
為了處理像問答這樣的任務(wù),BERT引入了Segment Embeddings來區(qū)分兩個不同但相關(guān)的句子(例如問題和答案)。這些嵌入幫助模型理解句子間的關(guān)系和邊界。
在文本分類任務(wù)中,Segment Embeddings的作用可能不那么明顯,因為輸入通常是一個連續(xù)的文本段落。然而,它們?nèi)匀豢梢杂糜趨^(qū)分不同部分的文本,特別是在處理長文檔或多個句子時。
Position Embeddings:
由于Transformer 結(jié)構(gòu)本身不具備處理序列順序的能力,BERT引入了Position Embeddings來捕獲文本中Token的位置信息。
這些嵌入確保模型能夠區(qū)分不同位置的相同Token,例如區(qū)分“hello,world”和“world,hello”中的“hello”和“world”。
Position Embeddings與Token Embeddings和Segment Embeddings相加,形成最終的輸入嵌入,這些嵌入隨后被送入Transformer 編碼器進行處理。
二、BERT的原理
BERT 的工作原理是通過在大規(guī)模未標注數(shù)據(jù)上執(zhí)行預(yù)訓練任務(wù)(如Masked Language Model來捕獲文本中詞匯的雙向上下文關(guān)系,以及Next Sentence Prediction來理解句子間的邏輯關(guān)系),再將預(yù)訓練的模型針對特定任務(wù)進行Fine tuning,從而在各種自然語言處理任務(wù)中實現(xiàn)高性能。
模型的預(yù)訓練任務(wù):在大量未標注數(shù)據(jù)上進行自我學習的過程,通過這些任務(wù),模型能夠?qū)W習到語言的內(nèi)在規(guī)律和模式,從而為其在后續(xù)的具體任務(wù)(如文本分類、問答等)中提供有力的支持。以下是兩個核心的預(yù)訓練任務(wù):
Masked Language Model (MLM)
任務(wù)描述 :在輸入的文本中,隨機地遮蓋或替換一部分詞匯,并要求模型預(yù)測這些被遮蓋或替換的詞匯的原始內(nèi)容。
目的 :使模型能夠利用雙向的上下文信息來預(yù)測被遮蓋的詞匯,從而學習到更深層次的語義表示。
實現(xiàn)方式 :在預(yù)訓練階段,BERT隨機選擇文本中15%的Token進行遮蓋,其中80%的時間用[MASK]標記替換,10%的時間用隨機詞匯替換,剩下的10%保持不變。這種遮蓋策略被稱為動態(tài)遮蓋,因為它在每次輸入時都會隨機改變遮蓋的位置和詞匯。
Next Sentence Prediction (NSP)
任務(wù)描述 :給定一對句子,判斷第二個句子是否是第一個句子的后續(xù)句子。
目的 :使模型能夠理解句子間的邏輯關(guān)系,如連貫性、因果關(guān)系等,從而提高其在處理長文檔或復(fù)雜文本時的能力。
實現(xiàn)方式 :在預(yù)訓練階段,BERT 構(gòu)造了一個二分類任務(wù),其中50%的時間B是A的真正后續(xù)句子(標簽為“IsNext”),另外50%的時間B是從語料庫中隨機選擇的句子(標簽為“NotNext”)。模型通過最后一層Transformer 輸出的[CLS]標記的嵌入來進行預(yù)測。
模型Fine tuning:BERT的fine-tuning過程是針對特定任務(wù)對預(yù)訓練模型進行調(diào)整的過程,使其能夠更好地適應(yīng)和解決具體任務(wù)。根據(jù)任務(wù)類型的不同,對BERT模型的修改也會有所不同,但通常這些修改都相對簡單,往往只需要在模型的輸出部分加上一層或多層神經(jīng)網(wǎng)絡(luò) 。
任務(wù)類型 :根據(jù)具體任務(wù)的不同,BERT 的fine-tuning可以分為以下幾種類型:
句子對分類任務(wù)(Sentence Pair Classification) :這種任務(wù)需要判斷兩個句子之間的關(guān)系,如文本蘊含、問答匹配等。在fine-tuning時,將兩個句子一起輸入模型,并取第一個token([CLS])的輸出表示作為整個句子對的表示,然后將其輸入到一個額外的softmax層進行分類。
單句分類任務(wù)(Single Sentence Classification) :這種任務(wù)需要對單個句子進行分類,如情感分析、文本分類等。在fine-tuning時,將單個句子輸入模型,并同樣取第一個token([CLS])的輸出表示進行分類。
問答任務(wù)(Question Answering) :這種任務(wù)需要模型從給定的文本中找出問題的答案。在fine-tuning時,將問題和答案一起輸入模型,并取答案部分在模型輸出中的起始和結(jié)束位置作為答案的預(yù)測。
序列標注任務(wù)(Sequence Tagging,如命名實體識別NER) :這種任務(wù)需要對輸入序列中的每個token進行分類,如識別文本中的實體、詞性標注等。在fine-tuning時,取所有token在最后一層Transformer 的輸出,然后將其輸入到一個額外的softmax層進行逐token的分類。
模型修改 :在進行fine-tuning時,對BERT模型的修改通常包括以下幾個方面:
輸入處理 :根據(jù)任務(wù)類型的不同,對輸入數(shù)據(jù)進行相應(yīng)的處理,如將句子對拼接在一起、添加特殊標記等。
輸出層 :在BERT模型的輸出部分添加一層或多層神經(jīng)網(wǎng)絡(luò) ,用于將模型的輸出轉(zhuǎn)換為任務(wù)所需的格式。對于分類任務(wù),通常添加一個softmax層進行概率分布的計算;對于序列標注任務(wù),則逐token進行分類。
損失函數(shù) :根據(jù)任務(wù)類型選擇合適的損失函數(shù),如交叉熵損失函數(shù)用于分類任務(wù)、平方差損失函數(shù)用于回歸任務(wù)等。
三、BERT的應(yīng)用
Question Answer(QA,問答系統(tǒng)):BERT在問答系統(tǒng)(QA)中的應(yīng)用通常涉及兩個階段:檢索階段和問答判斷階段。
一、檢索階段
文檔處理 :
切割 :將長文檔切割成較短的段落或句子(Passage),這些片段更容易處理和索引。
建立索引 :利用倒排索引技術(shù),為每個切割后的片段(Passage)建立索引,以便快速查詢。
檢索模型 :
BM25模型 :使用BM25或類似的檢索函數(shù)(如BM25+RM3)計算問句與每個候選段落或句子的相關(guān)性得分。
候選選擇 :根據(jù)得分選擇Top K個最相關(guān)的候選段落或句子。
二、問答判斷階段
模型準備 :
Fine-tuning數(shù)據(jù) :選擇適當?shù)膯柎饠?shù)據(jù)集(如SQuAD)或任務(wù)數(shù)據(jù)進行BERT模型的fine-tuning。
模型結(jié)構(gòu) :在BERT 模型的基礎(chǔ)上,添加必要的輸出層以適應(yīng)問答任務(wù),如分類層或起始/終止位置預(yù)測層。
問答處理 :
輸入構(gòu)建 :將用戶問句和每個候選段落或句子組合成BERT模型的輸入格式。
模型預(yù)測 :使用fine-tuned BERT模型對每個輸入進行預(yù)測,判斷候選段落或句子是否包含正確答案,或者預(yù)測答案的精確位置。
答案選擇 :
評分機制 :根據(jù)BERT模型的預(yù)測結(jié)果,為每個候選段落或句子分配得分。
最終答案 :選擇得分最高的候選段落或句子作為最終答案。
聊天機器人:BERT在聊天機器人中的應(yīng)用主要涉及兩個方面:用戶意圖分類和槽位填充(對于單輪對話),以及多輪對話中的上下文信息利用。
一、BERT在單輪對話中的應(yīng)用
用戶意圖分類 :
輸入 :將用戶的話語作為BERT模型的輸入。
模型結(jié)構(gòu) :在BERT模型的基礎(chǔ)上添加分類層,用于將用戶意圖分類到不同的服務(wù)類型中。
訓練 :使用帶有意圖標簽的用戶話語數(shù)據(jù)集進行fine-tuning,使模型能夠準確識別用戶意圖。
任務(wù)描述 :從用戶的話語中解析出用戶的意圖,如訂餐、點歌等。
BERT應(yīng)用 :
槽位填充 :
輸入 :將用戶的話語以及預(yù)定義的槽位作為BERT模型的輸入。
模型結(jié)構(gòu) :采用序列標注的方式,對每個輸入token進行槽位標簽的預(yù)測。
訓練 :使用帶有槽位標簽的用戶話語數(shù)據(jù)集進行fine-tuning,使模型能夠準確填充槽位信息。
任務(wù)描述 :根據(jù)用戶意圖抽取關(guān)鍵元素,如訂機票時的出發(fā)地、目的地等。
BERT應(yīng)用 :
二、BERT在多輪對話中的應(yīng)用
上下文信息利用 :
輸入 :將當前用戶話語以及歷史對話內(nèi)容作為BERT模型的輸入。
模型結(jié)構(gòu) :可以采用多種策略來融入歷史信息,如將歷史對話與當前用戶話語拼接、使用歷史對話的嵌入表示等。
訓練 :使用多輪對話數(shù)據(jù)集進行fine-tuning,使模型能夠正確理解和利用上下文信息來生成應(yīng)答。
任務(wù)描述 :在多輪對話中,利用歷史交互信息來改進模型的應(yīng)答。
BERT應(yīng)用 :
模型改進 :
增加模型容量 :通過增加BERT 模型的層數(shù)或隱藏單元數(shù)來捕捉更多的上下文信息。
引入注意力機制 :使用注意力機制來加權(quán)歷史信息的重要性,使模型能夠關(guān)注與當前應(yīng)答最相關(guān)的部分。
記憶網(wǎng)絡(luò) :結(jié)合記憶網(wǎng)絡(luò)來存儲和檢索歷史信息,以便在需要時提供給模型進行應(yīng)答生成。
關(guān)鍵問題 :如何有效融入更多的歷史信息,并在上下文中正確地使用這些信息。
改進策略 :
文章轉(zhuǎn)自微信公眾號@架構(gòu)師帶你玩轉(zhuǎn)AI
我們有何不同?
API服務(wù)商零注冊
多API并行試用
數(shù)據(jù)驅(qū)動選型,提升決策效率
查看全部API→
??
熱門場景實測,選對API
#AI文本生成大模型API
對比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力
一鍵對比試用API
限時免費