Embedding model (BERT)

Embedding Model 訓練與微調

基本介紹

  • 模型本質: Embedding Model(如 sentence-transformers)是基於 Transformer 架構的深度神經網路。

  • 機制:Self-Attention (自我注意力)

    透過 Query (Q), Key (K), Value (V) 的矩陣運算,讓模型在處理某個字時,會自動「注意」句子中其他相關的字。

    效果: 捕捉上下文語意。例如能區分「蘋果」在「蘋果好甜」與「蘋果股價」中完全不同的語意特徵。

    輸出: 將非結構化的文字,投射成高維空間中的一個座標(向量)。

    利用此種具有 Transformer 架構的模型進行為微調的原因在於,相較於傳統模型(如 Word2Vec, GloVe)每個詞的向量是固定的。不管「蘋果」是在講水果還是手機,它的向量都一模一樣。這就像是一本死板的字典。

    補充:

    1. 輸入轉化: Input Text → Tokens → Initial Vectors (Embedding 層)。
    2. 三權分立 (Q, K, V):每個向量透過學到的權重矩陣 $W^Q, W^K, W^V$ 映射出三個身份:Query ($q$): 「我」在找什麼資訊?Key ($k$): 「我」能提供什麼資訊?Value ($v$): 「我」實際代表的資訊內容。
    3. 計算關聯 (Attention Score):拿當前詞的 $q$,去跟全句所有詞的 $k$ 做點積 ($q \cdot k$),得到原始分數 $a$。Scale & Softmax: 將 $a$ 除以 $\sqrt{d_k}$(縮放防止數值過大)並過 Softmax,得到標準化權重 $a’$(加總為 1)。
    4. 語意融合 (Output):將所有詞的 $v$ 乘以對應的 $a’$ 後全部加總,得到包含上下文資訊的新向量 $b$。結果: $b$ 不再是孤立的單字,而是吸收了全句精華的「動態語意特徵」。

    「Embedding 模型通常包含多層 Transformer 堆疊。每經過一次 Self-attention 運算,模型都能更深層地萃取輸入語句中各詞彙間的關聯。隨層數增加,模型從理解基礎語法進化到掌握抽象語意,最終產出具備高度上下文感知(Context-aware)的細膩向量,大幅提升了搜尋與匹配的精準度。」

BERT 模型

BERT

BERT (Bidirectional Encoder Representations from Transformers) 模型,Bidirectional Encoder,表示雙向編碼,和大語言模型的 transformer 架構的差異在此,這種模型並不需要產出文字或其他內容,單純只是把輸入向量化,所以模型的 self-attention 機制是會把輸入的所有內容都看過的,不像大語言模型會有 masking 的機制(限制模型只能看到輸入中左邊的內容)

單層 Transformer 處理流程:

  1. Multi-Head Attention: 將 $X_n$ 透過 $W^Q, W^K, W^V$ 矩陣轉化為大量 $q, k, v$。

    • 計算: 每個字主動對全句進行 Self-Attention 權重分配與加權總和。

    • 目的: 讓每個字吸收「上下文」資訊(例如:知道「蘋果」在此處是指「公司」)。產出: 上下文特徵向量 $Z_{attn}$。

  2. 第一次融合與穩定 (Add & Norm):

    • Add (殘差連接): 將 $Z_{attn}$ 與原始輸入 $X_n$ 進行向量加法($Z_{attn} + X_n$)。
    • Norm (層正規化): 對相加後的結果進行標準化,確保數值穩定。目的: 保留原始資訊,防止語義在深層網路中失真。
  3. 深度思考 (Feed Forward Network)動作: 將上一步的結果送入兩層全連接神經網路(通常會先放大維度再縮小)。

    • 計算: 進行非線性轉換(使用 ReLU 或 GeLU 激活函數)。
    • 目的: 對 Attention 抓到的關係進行深層分析與特徵昇華(儲存領域知識)。
    • 產出: 深度加工向量 $Z_{ffn}$。
  4. 第二次融合與穩定 (Add & Norm)Add (殘差連接): 將 $Z_{ffn}$ 與進入第三步前的輸入進行向量加法。

    • Norm (層正規化): 再次進行標準化,平滑數值分佈。
    • 目的: 確保深度加工後的資訊能穩定傳遞給下一層。
  5. 輸出 (Output)結果: 產出這一層的最終向量 $X_{n+1}$。下一步: 這個 $X_{n+1}$ 會直接作為 第 $n+1$ 層 的輸入,重複以上流程。

模型微調的資料格式

微調 Embedding 模型時,不能只給模型看一句話。要給它一組關係,「三元組」(Triplet)

  • Anchor (錨點): 使用者的問題(例如:「台積電股價表現?」)。

  • Positive (正樣本): 正確或相關的內容(例如:「台積電今日收盤價創新高」)。

  • Negative (負樣本): 錯誤或無關的內容(例如:「如何在家烤蘋果派」)。

  • Hard Negative (困難負樣本):跟正解有點關聯,但實際上是錯誤的內容。 (強迫模型進入 Transformer 的深層 進行非線性轉換,去辨識微小的語意差異。這能顯著提升 MRR(正確答案的排名會更前面)。)

  • 目標: 透過訓練,讓模型內部的 Transformer 權重 發生變化,使得 $Anchor$ 與 $Positive$ 的向量距離拉近,而與 $Negative$ 的距離拉遠。

損失函數:目前較主流為 Multiple Negatives Ranking Loss (MNRL)

  • 概念:假設一個 Batch 有 64 組 $(A, P)$ 配對。對於第 1 個問句($A_1$),除了它自己的正確答案 $P_1$ 之外,Batch 內其他的 63 個正確答案($P_2$ 到 $P_{64}$)都會自動變成它的「負樣本」。

  • 效果: 一次運算,模型就像是在考一題「64 選 1」的超難選擇題,學習效率極高。

所以不需要費心手動建置許多負樣本,MNRL 可以將批次內除了正確解答的樣本都當成錯誤樣本。

公式:

$$L_i = -\log \frac{e^{\text{sim}(a_i, p_i) / \tau}}{\sum e^{\text{sim}(a_i, p_j) / \tau}}$$
  • 分子:正確答案的相似度。模型想讓它越高越好。
  • 分母:所有候選答案(包含一堆負樣本)的相似度總和。

核心目標:極大化正確答案在全體候選人中的「佔比」。 作法:MNRL 核心是一個「矩陣乘法」加上 Cross Entropy(交叉熵):

  • 矩陣計算: 把所有的 $Anchor$ 向量跟所有的 $Positive$ 向量做點積(相似度計算)。

  • 期望結果: 對角線上的分數(自己對應的正確答案)應該最高,非對角線(別人的答案)應該極低。

  • 優化: 模型會瘋狂調整 Transformer 權重,讓對角線的分數越來越大,其餘的分數被壓到趨近於零。

若是加入了 Hard Negative 樣本,則損失函數之公式分母將改為

$$\sum e^{\text{sim}(a_i, \text{正樣本})} + e^{\text{sim}(a_i, \text{硬負樣本})} + \sum e^{\text{sim}(a_i, \text{Batch內其他樣本})}$$

Hard Negative 樣本與 Anchor 的相似度會很大,因此損失函數將會變大 (分母變小),所以會讓模型在進行反向傳播時,對權重進行較大的調整。

檢索指標

在微調 sentence-transformers 時最關心的指標,用來評估正確答案有沒有被排在前面。

  1. Recall@K (召回率) — 「有沒有抓到?」

    定義: 在前 $K$ 個搜尋結果中,有沒有包含正確答案?應用: 如果你的 RAG 系統會餵 5 段資料給 LLM,那麼 Recall@5 就是關鍵。只要正確答案在前 5 名內,LLM 就有機會回答正確。分數: 只有 0 或 1(對單個查詢而言)。

  2. MRR (Mean Reciprocal Rank) — 「正確答案排第幾?」計算方式: $\frac{1}{\text{正確答案的排名}}$。

    第 1 名:$1.0$ 分、第 2 名:$0.5$ 分、第 10 名:$0.1$ 分: 它對排名的落後懲罰很重。微調成功最明顯的特徵就是 MRR 顯著提升,代表模型能一眼認出正確答案並把它排在首位。

  3. NDCG (Normalized Discounted Cumulative Gain)特點: 比 MRR 更高級,它考慮了「相關程度」。應用: 如果搜尋結果中有「極度相關」和「部分相關」的分別,NDCG 會確保極度相關的排在越前面分數越高。它是目前搜尋引擎(如 Google)最看重的指標。

  4. RAGAS 指標:衡量整個 RAG 系統的品質

    把微調後的模型放入 RAG 流程後(對應圖片中的 Lab 05),會用 RAGAS 框架來進行自動化評估:

    1. Faithfulness (忠實度)

      白話: LLM 有沒有胡說八道?

      檢查: 生成的答案是否完全來自檢索到的參考資料。

    2. Answer Relevance (回答相關性)

      白話: 答非所問嗎?

      檢查: 回答的內容是否真的解決了使用者最初提出的問題。

    3. Context Precision (檢索精準度)

      白話: 撈回來的資料乾淨嗎?

      檢查: 檢索到的 K 段資料中,相關資料是否排在前面,還是混入了一堆雜訊。

    4. Context Recall (檢索召回度)

      白話: 撈回來的資料夠寫答案嗎?

      檢查: 檢索到的內容是否包含了回答問題所需的所有事實。

    分數意義:

    在 RAGAS 中,每個指標(如 Faithfulness, Answer Relevance 等)都會產出一個得分:

      1.0: 完美。
    
      0.8 以上: 表現優異,具備上線水準。
    
      0.5 以下: 存在嚴重問題(例如:模型在胡說八道,或者沒搜到正確資料)。
    
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy