搜尋意圖: 如果你在找「下句預測 是什麼」或「下句預測 和相近概念差在哪」,先看這頁的短定義、完整說明與延伸比較。
TL;DR: BERT 預訓練的輔助任務,給定兩個句子,判斷第二個句子是否在原文本中直接跟隨第一個句子,用於訓練模型理解句子間的邏輯關係。
實用情境: 適合用在閱讀 AI 文章、產品文件或和同事討論時,先用一頁快速對齊概念。
下一步: 先讀完定義,再往下看延伸比較與對應工具,把概念轉成實際應用。
BERT 預訓練的輔助任務,給定兩個句子,判斷第二個句子是否在原文本中直接跟隨第一個句子,用於訓練模型理解句子間的邏輯關係。
核心概念
下句預測(NSP)是 BERT 預訓練架構中的第二個主要自監督學習任務(第一個是遮蔽語言模型)。NSP 的設計基於一個假設:模型如果能理解句子間的邏輯關係,將能在需要推理的任務上表現更好。在 BERT 的輸入處理中,兩個句子通常被拼接在一起,中間由特殊 token [SEP] 分隔,開頭則有 [CLS] token。模型的任務是根據 [CLS] token 對應的輸出向量進行二元分類,判斷兩個句子是否連貫。
NSP 任務的構造方法如下:對於語料庫中的每個句子 A,有 50% 的概率選擇它的真實後續句子 B(正例),50% 的概率從語料庫中隨機選擇一個不相關的句子 B(負例)。通過訓練模型區分這兩類情況,模型學習到了對句子間語義和邏輯關係的理解。
運作原理
NSP 的實現細節相對直接。在預訓練過程中,輸入被格式化為 [CLS] + 句子 A + [SEP] + 句子 B + [SEP]。經過 Transformer 編碼器處理後,[CLS] token 位置的輸出被傳入一個簡單的分類層(通常是一個線性層加 softmax 激活函式)。分類層輸出兩個概率值,分別對應「句子 B 是 A 的下句」和「句子 B 不是 A 的下句」。
NSP 的損失函式為標準的二元交叉熵損失: L_NSP = -[y log(p) + (1-y) log(1-p)] 其中 y 是標籤(1 表示正例,0 表示負例),p 是模型預測「正例」的概率。
NSP 與 MLM 在預訓練時同時進行。總的預訓練損失是兩個任務損失的線性組合,通常設置為等權重。這種多任務學習的方式使得模型在訓練過程中同時優化兩個目標,從而獲得更全面的文本理解能力。
Transformer 的自注意力機制使得模型能在編碼時充分利用句子 A 和句子 B 中的所有信息。通過跨越 [SEP] token 的注意力權重,模型能學習到句子間的相互關係。
實際應用
NSP 任務對於需要理解句子間關係的下游任務特別有幫助。例如,在自然語言推理任務中,模型需要判斷前提句和假設句之間的邏輯關係(蘊含、矛盾或中性)。NSP 預訓練使得 BERT 在這類任務上的表現優於只使用 MLM 的模型。同樣,在問答任務中,模型需要理解問題句和候選答案句之間的相關性,NSP 預訓練提供的句子關係理解能力對此十分重要。
在實踐中,BERT 的微調過程中,NSP 任務被移除。只有預訓練階段使用 NSP,微調階段根據具體的下游任務設計新的目標函式。這種設計使得預訓練和微調能針對不同的目標進行優化。
後來的模型如 RoBERTa 在評估 NSP 的必要性時發現,NSP 對某些任務的貢獻有限,並將其從預訓練流程中移除。這引發了關於輔助預訓練任務的必要性的討論,但許多後續模型仍保留了 NSP 或類似的任務。
常見誤區
誤區一:認為 NSP 對所有下游任務都有幫助。實際上,NSP 的幫助主要體現在需要理解句子間關係的任務上,對於單句分類等任務的幫助相對較小。RoBERTa 的研究表明,移除 NSP 並不會顯著降低某些任務的效能。
誤區二:認為負例必須是完全不相關的句子。實際上,難度更高的負例(如來自同一文檔但不相鄰的句子)可能對模型學習更有幫助。某些後續研究探索了使用不同難度負例的效果。
誤區三:認為 NSP 是文本段分類的通用預訓練方法。實際上,NSP 是特定於順序句對的任務。對於其他類型的句對關係(如複述、釋義等),可能需要設計專門的預訓練任務。
誤區四:忽視 NSP 的句子邊界定義。在不同的語言或領域中,「句子」的定義可能不同,這會影響 NSP 任務的有效性。
與相關技術的比較
NSP 與句子順序預測(Sentence Order Prediction, SOP)的區別在於難度設置。在 ALBERT 中,為了增加任務難度,採用 SOP 替代 NSP:正例仍然是真實的連續句子對,但負例被改為真實的句子對但順序被反轉。這使得模型不僅要學習句子間是否相關,還要學習它們的正確順序。
NSP 與對比學習方法的區別在於學習信號的來源。NSP 使用的是句子原始標籤(是否連續),而對比學習方法使用的是句子對之間的相似性分布。
NSP 還與其他預訓練多任務學習方法相關,如 ELECTRA 的判別任務。這些方法都試圖通過設計多個預訓練目標,讓模型在無標籤文本上學習更全面的語言理解能力。
常見問題
為什麼 NSP 中正例和負例的比例是 50:50 而不是其他比例?
50:50 的比例設計使得任務具有適中的難度和平衡的學習信號。若正例過多(例如 80:20),模型容易學到偏向預測「正例」的捷徑;若負例過多,模型可能無法充分學習正例的特徵。此外,50:50 的比例意味著隨機猜測的基準準確率為 50%,使得模型的改進相對容易衡量和評估。
RoBERTa 為什麼移除了 NSP 任務,這對模型效能有什麼影響?
RoBERTa 的研究發現,移除 NSP 並不會顯著降低下游任務的效能,而且通過移除 NSP 並增加 MLM 訓練的資料量和時間,反而能提升某些任務的表現。這表明相比 NSP,MLM 可能是更重要的預訓練信號。不過,NSP 對自然語言推理等特定任務仍然有幫助,後續許多模型仍保留了類似的任務。
在微調階段為什麼要移除 NSP 任務而不繼續使用?
移除 NSP 的原因有二:首先,下游任務通常不需要進行句子連續性判斷,保留 NSP 可能會引入無關的學習信號而分散注意力;其次,微調階段的目標是優化下游任務特定的損失函式,此時使用 NSP 這樣的通用預訓練任務會增加優化的複雜性。只在預訓練階段使用 NSP,能使模型在無標籤資料上更好地學習通用的文本理解能力。