簡介#

ChatGPT [1] 是 OpenAI 於 2022 年推出的聊天機器人(Chatbot),能根據使用者的輸入生成類人文字,協助回答問題、提供解釋及產出創意內容。

ChatGPT 是史上成長最快的應用之一,上線不到三個月便突破 1 億名使用者 [2]。本章將深入探討如何建構類似 ChatGPT 的聊天機器人系統。

Figure 1: Example of a conversation with ChatGPT

需求釐清#

以下為面試中候選人與面試官的典型對話:

候選人:聊天機器人需要支援哪些語言? 面試官:先聚焦於英文即可。

候選人:我們需要確保聊天機器人產出無偏見且安全的內容,搭配嚴格的內容審核與演算法。這樣的假設合理嗎? 面試官:當然。

候選人:聊天機器人預期要處理哪些類型的任務? 面試官:需要能提供資訊並回答問題。

候選人:聊天機器人是否需要處理非文字的模態(Modality),例如圖片、音訊或影片? 面試官:先聚焦於純文字聊天機器人,輸入與輸出都是文字。

候選人:聊天機器人是否需要處理後續追問?應維持多長的對話上下文? 面試官:好問題。聊天機器人需要在同一對話中處理追問,上下文視窗(Context Window)至少為 4096 個 token。

候選人:聊天機器人是否需要瀏覽網頁、呼叫外部 API 或進行網路搜尋? 面試官:本輪不討論這些功能。

候選人:聊天機器人是否需要個人化互動? 面試官:暫不考慮個人化。

候選人:我們是否有基於指令的訓練資料? 面試官:有,我們有一份包含 80,000 筆指令與回覆的資料集。

將問題建模為機器學習任務#

定義系統的輸入與輸出#

  • 輸入:使用者提供的文字提示(Prompt),可以是問題、指令或任何文字查詢
  • 輸出:聊天機器人生成的相關且符合上下文的回應

Figure 2: Input and output of a chatbot

選擇合適的機器學習方法#

開發聊天機器人屬於語言生成任務(Language Generation Task),由語言模型(Language Model)處理輸入提示並生成回應。此類模型通常需要數十億參數才能有效學習,因此被稱為大型語言模型(Large Language Model, LLM)

僅解碼器 Transformer(Decoder-only Transformer) 是現代 LLM 的標準架構選擇,包括 OpenAI 的 GPT [3]、Google 的 Gemini [4] 及 Meta 的 Llama [5]。本章沿用此慣例,以僅解碼器 Transformer 作為基礎架構。

資料準備#

LLM 的效能取決於訓練資料的品質,這些資料主要來自網路。由於通常是從網站、論壇及部落格自動爬取,需要經過仔細的前處理。

網頁資料清理#

  • 內容擷取與解析:網頁爬取的資料常包含多餘元素(HTML 標籤、廣告、導覽連結)。可使用 Beautiful Soup [6] 或 lxml [7] 等解析庫擷取主要文字,並搭配 DOM 分析 [8] 與樣板偵測(Boilerplate Detection)[9] 隔離核心內容。
  • URL 與網域過濾:透過預定義規則或機器學習分類器排除低品質來源(垃圾部落格、內容農場、垃圾網站),並以網域白名單或黑名單篩選可信來源。
  • 語言辨識:使用 fastText [10] 或 langid.py [11] 等工具分類並過濾文件,確保符合目標語言。
  • 內容品質過濾:透過可讀性評分、垃圾偵測演算法及啟發式檢查(內容長度、句子結構)評估文字品質,也可使用機器學習模型根據擷取的特徵預測品質。

通用資料清理#

以下技術適用於網頁爬取資料及其他來源(書籍、文章、社群媒體貼文):

  • 移除不當內容:使用機器學習模型過濾冒犯性、有害或不適當的內容,確保模型僅學習合適且安全的素材。
  • 敏感資訊匿名化:將個人可識別資訊(PII)匿名化,以符合隱私法規與倫理準則。
  • 移除低品質資料:以機器學習模型評估連貫性、相關性、文法與可讀性,移除品質不佳的文字。
  • 去重複(Deduplication):移除跨來源的相似文字(例如同一篇新聞出現在多個網站),減少冗餘並避免過度曝光。
  • 移除無關資料:使用啟發式與規則式方法移除含有非標準字元或不支援語言的文字。
  • 文字分詞(Tokenization):套用子詞分詞演算法(Subword Tokenization),例如 Byte-Pair Encoding (BPE)。BPE 的介紹請參閱第三章。

模型開發#

架構#

LLM 的架構基於僅解碼器 Transformer。其中的文字嵌入(Text Embedding)、Transformer 區塊(Transformer Block)與預測頭(Prediction Head)與第二章所討論的僅解碼器 Transformer 相似,但 LLM 通常使用更進階的位置編碼(Positional Encoding) 方法。

Figure 3: Components of a decoder-only Transformer

位置編碼#

在聊天機器人場景中,輸入序列通常遠長於單一句子或電子郵件。我們的目標是建構上下文視窗至少 4096 個 token 的系統,這需要能同時捕捉 token 位置及其相對關係的位置編碼方法。

本節涵蓋以下內容:

  1. 絕對位置編碼(Absolute Positional Encoding)
  2. 相對位置編碼(Relative Positional Encoding)
  3. 旋轉位置嵌入(Rotary Positional Embedding, RoPE)[12] – 被 Llama 3 [13] 等主流 LLM 採用

絕對位置編碼#

絕對位置編碼使用傳統方法(正弦編碼或可學習編碼),為序列中的每個位置賦予一個唯一向量。編碼後的位置會加到 token 嵌入上,提供模型關於每個 token 出現位置的資訊。

形式上,注意力(Attention)的鍵(Key)與查詢(Query)計算如下:

$\begin{aligned} q_m & =W_q\left(e_m+p_m\right) \ k_n & =W_k\left(e_n+p_n\right) \end{aligned}$

其中:

  • $q_m$ 為位置 $m$ 的查詢向量
  • $k_n$ 為位置 $n$ 的鍵向量
  • $W_q$ 與 $W_k$ 為可學習的權重矩陣
  • $e_m$ 與 $e_n$ 為位置 $m$ 和 $n$ 的 token 嵌入
  • $p_m$ 與 $p_n$ 為位置 $m$ 和 $n$ 的位置向量(可學習或固定)

注意力分數(Attention Score)由查詢與鍵向量的點積計算:

$q_m \cdot k_n=e_m W_q W_k e_n+e_m W_q W_k p_n+p_m W_q W_k e_n+p_m W_q W_k p_n$

位置編碼 $p_m$ 與 $p_n$ 僅依賴絕對位置,這限制了模型捕捉 token 之間相對距離的能力,也難以泛化到不同長度或未見過的 token 位置。例如,在最長 512 個 token 的序列上訓練的模型,面對 4096 個 token 的序列時可能表現不佳。

相對位置編碼#

相對位置編碼不編碼絕對位置,而是編碼兩個 token 之間的位置差異。模型聚焦於相對距離,這通常比絕對位置更具資訊量。例如,知道「car」緊跟在「chased」之後,比知道它們分別在位置 5 和 10 更有意義。

不同論文提出不同的公式:

  • T5 [14]:丟棄第二與第三個交互項,並將第四個替換為可學習的偏差(Learnable Bias):

$q_m \cdot k_n=e_m W_q W_k e_n+b_{m, n}$

  • DeBERTa [15]:丟棄最後一項,並將第二與第三項中的絕對位置 $p_m$、$p_n$ 替換為相對位置向量 $R_{n-m}$:

$q_m \cdot k_n=e_m W_q W_k e_n+e_m W_q W_k R_{n-m}+R_{n-m} W_q W_k e_n$

相對位置編碼讓模型能獨立於絕對位置來理解 token 之間的關係。然而,$q_m \cdot k_n$ 無法再簡化為簡單的點積,這限制了線性注意力(Linear Attention)[16] 等高效技術的使用。RoPE 解決了這個限制。

旋轉位置編碼(RoPE)#

RoPE 將位置資訊表示為應用於 token 嵌入的旋轉矩陣(Rotation Matrix),同時編碼絕對與相對位置資訊。

給定一個輸入序列,RoPE 對每個嵌入施加旋轉矩陣:

$f\left(q_m, m\right)=q_m \cdot R\left(\theta_m\right)$

其中 $q_m$ 為位置 $m$ 的 token 嵌入,$R\left(\theta_m\right)$ 為以位置角度 $\theta_m$ 參數化的旋轉矩陣。此角度由位置索引 $m$ 推導,透過複數平面上的三角函數同時捕捉絕對與相對位置資訊。

Figure 4: RoPE in 2D

圖 4 展示 RoPE 如何在二維空間中旋轉詞嵌入:

  • 左圖:「The cat chased the dog.」——「cat」(紅色)與「dog」(藍色)向量之間的角度捕捉了它們的相對位置。
  • 右圖:「Once upon a time, the cat chased the dog.」——「cat」與「dog」之間的相對角度維持不變,但絕對位置不同。

這展示了 RoPE 如何同時捕捉絕對與相對位置,使模型能理解詞序與距離。

在更高維度空間中,旋轉矩陣擴展至 $d$ 維:

$ R*{\theta, m}^d=\left(\begin{array}{ccccccc} \cos \left(m \theta_1\right) & -\sin \left(m \theta_1\right) & 0 & 0 & \cdots & 0 & 0 \ \sin \left(m \theta_1\right) & \cos \left(m \theta_1\right) & 0 & 0 & \cdots & 0 & 0 \ 0 & 0 & \cos \left(m \theta_2\right) & -\sin \left(m \theta_2\right) & \cdots & 0 & 0 \ 0 & 0 & \sin \left(m \theta_2\right) & \cos \left(m \theta_2\right) & \cdots & 0 & 0 \ \vdots & \vdots & \vdots & \vdots & \ddots & \vdots & \vdots \ 0 & 0 & 0 & 0 & \cdots & \cos \left(m \theta*{d / 2}\right) & -\sin \left(m \theta*{d / 2}\right) \ 0 & 0 & 0 & 0 & \cdots & \sin \left(m \theta*{d / 2}\right) & \cos \left(m \theta_{d / 2}\right) \end{array}\right)$

Figure 5: Rotation matrix $R_{\theta, m}^d$ with $d$ dimension parameterized by positional angle $\theta$

RoPE 的優缺點#

優點:

  • 平移不變性(Translational Invariance):即使 token 位置發生偏移,位置資訊仍保持一致,相較其他方法更具穩健性。
  • 相對位置表示:透過旋轉在嵌入空間中幾何地編碼位置資訊,使模型能內在地理解 token 之間的相對距離。
  • 泛化至未見位置:嵌入無論絕對位置如何都維持一致的關係,有助於在不同序列長度間更好地泛化。

缺點:

  • 數學複雜度:RoPE 引入了涉及旋轉的額外數學運算,比傳統的正弦編碼或可學習位置嵌入更為複雜。

訓練#

大多數聊天機器人(包括 ChatGPT)採用三階段訓練策略

  1. 預訓練(Pretraining)
  2. 監督式微調(Supervised Finetuning, SFT)
  3. 基於人類回饋的強化學習(Reinforcement Learning from Human Feedback, RLHF)

Figure 6: Three stages of training an LLM

第一階段:預訓練#

預訓練是初始階段,在大量來自網路的文字資料上訓練模型。目的是建立一個具備廣泛語言理解與世界知識的基礎模型(Base Model)

預訓練需要龐大的運算資源:通常需要數千張 GPU數百萬美元以及數個月的訓練時間

預訓練資料#

預訓練資料由來自各種來源的大規模語料庫(Corpus)組成。常用的資料集包括:

  • Common Crawl [17]:自 2008 年起從網頁收集的公開資料集,包含 PB 等級的資料量,但因含有大量無關與有害內容而需要大量清理。
  • C4 [18]:Google 建立的 Common Crawl 清理版本,專為訓練 LLM 設計。
  • GitHub:開源程式碼儲存庫,幫助模型理解程式語言與程式碼結構。
  • Wikipedia:來自維基百科的事實資訊,因經過仔細編寫與編輯而品質較高。
  • Books:涵蓋各類題材的長篇、高品質文字內容。
  • ArXiv:學術資料與發表論文,幫助模型理解學術術語與領域知識。
  • Stack Exchange [19]:對話格式的高品質問答內容。

Meta 的 Llama-1 模型使用了上述所有來源,總計約 1.4 兆個 token

DatasetSampling proportionDisk size
Common Crawl67.0%3.3 TB
C415.0%783 GB
Github4.5%328 GB
Books4.5%85 GB
Wikipedia4.5%83 GB
ArXiv2.5%92 GB
Stack Exchange2.0%78 GB

Table 1: Llama 1 pretraining dataset

機器學習目標與損失函數#

由於我們訓練的是用於文字生成的僅解碼器 Transformer,機器學習目標為下一個 token 預測(Next-token Prediction),使用交叉熵損失(Cross-Entropy Loss) 衡量預測的 token 機率與正確 token 之間的差異。

預訓練的成果#

預訓練階段產出一個基礎模型,能理解語言並預測給定輸入提示之後的文字。

Figure 7: Base model continuing a sentence

基礎模型只能接續提示生成文字,無法直接回答問題。要使其成為實用的聊天機器人,需要進行監督式微調。

第二階段:監督式微調(SFT)#

SFT(也稱為指令微調,Instruction Finetuning)在較小但高品質的 (提示, 回應) 格式資料集上微調基礎模型。目標是保留基礎模型的語言理解能力,同時讓它學會回應提示,而非僅僅延續文字。

訓練資料#

訓練資料遵循 (提示, 回應) 格式,通常稱為示範資料(Demonstration Data),因為它示範了如何回應提示。

Figure 8: An example of demonstration data

與預訓練資料的主要差異:

規模:示範資料顯著較小,通常為 10,000 至 100,000 組。

DatasetSizeNotes
InstructGPT [20]~14,500OpenAI’s GPT-3 instruction datasets
Alpaca [21]52,000Developed by Stanford researchers
Dolly-15K [22]~15,000Created by Databricks
FLAN 2022 [23]~104,000Developed by Google Research

Table 2: Common demonstration datasets

品質:示範資料品質更高,通常由受過教育的人類標註員(Human Contractor)建立。在專業領域(醫療、金融),領域專家不可或缺。

EducationPercentage
Less than a high school degree0%
High school degree10.5%
Undergraduate degree52.6%
Master’s degree36.8%

Table 3: The education levels of OpenAI’s labelers

OpenAI 為 GPT 示範資料集聘請的標註員中,超過三分之一擁有碩士學位 [20]。雖然成本高昂,但這種專業水準對於產出可靠且符合特定產業需求的回應至關重要。

機器學習目標與損失函數#

機器學習目標與損失函數與預訓練相同:下一個 token 預測搭配交叉熵損失。模型仍根據輸入提示逐一 token 生成文字。

Figure 9: Loss calculation over a (prompt, response) example

SFT 的成果#

SFT 模型以(提示, 回應)格式生成詳細且有幫助的回應,而非僅僅延續文字。

Figure 10: The SFT model answers a prompt instead of continuing it

然而,SFT 模型不一定總能生成最佳回應——其答案可能不夠有幫助,甚至不安全。圖 11 展示了四個合理的回應:只有第二個既安全又有幫助。

Figure 11: Various responses to a prompt

為確保模型產出相關、安全且有幫助的回應,需要透過 RLHF 進一步微調。

第三階段:RLHF#

RLHF 也稱為對齊(Alignment) 階段,旨在調整模型以生成人類偏好的回應。它包含兩個依序執行的步驟:

  1. 訓練獎勵模型(Reward Model)
  2. 優化 SFT 模型
步驟 3.1:訓練獎勵模型#

獎勵模型評估回應對提示的相關性。它接收 (提示, 回應) 配對作為輸入,輸出一個預測有用程度的分數。分數越高代表回應越有幫助。

Figure 12: Reward model input and output

獎勵模型架構:獎勵模型與語言模型的大小比例並無一致的模式。例如:

  • OpenAI:60 億參數的獎勵模型對應 1750 億參數的語言模型 [20]
  • Anthropic:獎勵模型與語言模型皆為 100 億至 520 億參數 [24]

常見做法是複製 SFT 模型並加上一個預測相關性分數的預測頭。

Figure 13: Reward model architecture

訓練資料收集 步驟如下:

  1. 收集提示:手動建立一份提示清單。
  2. 生成多個回應:使用 SFT 模型為每個提示生成多個回應。
  3. 排序回應:標註員依相關性對回應進行排序。排序相較於評分能降低主觀性——讓標註員直接比較回應更為直觀。
  4. 建立偏好對:構建 (提示, 勝出回應, 落敗回應) 格式的配對。

Figure 14: Collecting training data to train a reward model

機器學習目標與損失函數:獎勵模型的目標是為勝出回應預測更高的分數。對於給定的(提示, 勝出回應, 落敗回應),目標是最大化 $S_{\text {win }}-S_{\text {lose }}$,其中:

  • $S_{\text {win }}$ 為(提示, 勝出回應)配對的預測分數
  • $S_{\text {lose }}$ 為(提示, 落敗回應)配對的預測分數

常用的損失函數為邊際排序損失(Margin Ranking Loss)

$\mathcal{L}\left(S_{\text {win }}, S_{\text {lose }}\right)=\max \left(0, m-\left(S_{\text {win }}-S_{\text {lose }}\right)\right)$

其中 $m$ 為超參數(Hyperparameter),定義分數之間期望的最小差距。若 $S_{\text {win}} - S_{\text {lose}} < m$,優化器會更新模型參數以提高 $S_{\text {win}}$ 或降低 $S_{\text {lose}}$。

Figure 15: Reward modeling loss calculation for a single example from training data

成果:一個能為(提示, 回應)配對預測相關性分數、反映人類判斷的獎勵模型。

Figure 16: The reward model predicts the relevance score for a (prompt, response) pair

步驟 3.2:優化 SFT 模型#

使用獎勵模型優化 SFT 模型,使其生成的回應不僅合理且有幫助。常見方法使用近端策略優化(Proximal Policy Optimization, PPO) [25],迭代執行以下步驟:

  1. 生成模型回應:模型為給定提示生成多個可能的回應。
  2. 計算獎勵:獎勵模型為這些回應評分。
  3. 更新模型權重:強化學習演算法更新權重以最大化預期獎勵,強化得分較高的回應。

Figure 17: Optimizing the model with the PPO algorithm

訓練資料:由標註員建立的提示清單,通常為 10,000 至 100,000 條。

機器學習目標與損失函數:知名 LLM 使用 PPO 及直接偏好優化(Direct Policy Optimization, DPO) [26] 等強化學習演算法。這些演算法的細節通常超出大多數 ML 系統設計面試的範圍。更多資訊可參閱 [27] 與 [28]。

RLHF 的成果:可部署為聊天機器人的最終模型。

LLM nameDeveloperRelease dateAccessParameters
o1OpenAISeptember 12, 2024Preview onlyUnknown
GPT-4oOpenAIMay 13, 2024APIUnknown
Claude 3AnthropicMarch 14, 2024APIUnknown
Gemini 1.5DeepMindFebruary 2, 2024APIUnknown
Llama 3Meta AIApril 18, 2024Open-Source8 and 70 billion
Grok-1xAINovember 4, 2023Open-Source314 billion
Mixtral 8x22BMistral AIApril 10, 2024Open-Source141 billion
GemmaDeepMindFebruary 21, 2024Open-Source2 and 7 billion
Phi-3MicrosoftApril 23, 2024Open-Source3.8 billion
DBRXDatabricksMarch 27, 2024Open-Source132 billion

Table 4: Popular LLMs

訓練總結#

三階段策略:

  • 預訓練:在大規模語料庫上訓練,獲得廣泛的語言理解能力。
  • SFT:微調使輸出適應(提示, 回應)格式。
  • RLHF:進一步優化回應,使其有幫助、安全且符合人類偏好。

Figure 18: Summary of LLM training, inspired by [29]

取樣#

取樣(Sampling)指的是如何從模型預測的機率分佈中選取 token,以生成連貫且有幫助的回應。

Figure 19: Selecting the next token from predicted probabilities

如第二章所述,文字生成有多種方法——有些是確定性的,有些是隨機性的。

Figure 20: Common methods for generating text

確定性方法#

確定性方法(Deterministic Methods)如束搜尋(Beam Search)適合輸出長度短且可預測的任務,但對於開放式生成(如對話)效果較差,因為輸出長度變化大。

貪婪搜尋#

貪婪搜尋(Greedy Search)在每一步選擇機率最高的 token。

Figure 21: Greedy search

雖然直觀且通常連貫,但有兩個主要問題:

  • 重複:當某些詞彼此跟隨的機率很高時,模型會「卡」在迴圈中,反覆使用相同的 token 序列。

Figure 22: Repetitive output

  • 次優生成:貪婪搜尋忽略替代路徑,可能錯過隱藏在低機率 token 之後的高機率序列。
束搜尋#

束搜尋(Beam Search)改進貪婪搜尋,同時考慮多個序列,在每一步追蹤前 $k$ 個序列。

Figure 23: Beam search with a beam width of 3

它允許更多探索,但在開放式生成中仍有不足:

  • 效率低:評估多個序列會拖慢生成速度。
  • 重複:仍可能卡在迴圈中,重複常見片語。

隨機性方法#

隨機性方法(Stochastic Methods)引入隨機性,使其更適合開放式文字生成。以下介紹三種常見方法:

多項式取樣#

多項式取樣(Multinomial Sampling)根據完整的機率分佈選擇下一個 token。每個 token 都有一個機率,據此進行抽樣。

Figure 24: Multinomial sampling

這確保了輸出的多樣性,但顯著的隨機性(尤其在機率分佈平坦時)常導致不連貫的生成結果。

Figure 25: GPT-2 output using multinomial sampling

由於連貫性問題,多項式取樣在 LLM 中很少使用。

Top-k 取樣#

Top-k 取樣 [30] 從最可能的 k 個 token 中選取,而非整個分佈。

Figure 26: Example of top-k sampling with k=3

逐步流程:

  1. 模型預測下一個 token 的機率分佈。
  2. 按機率降序排列 token。
  3. 取前 k 個 token 作為候選。
  4. 將前 k 個 token 的機率正規化(Normalize),使總和為 1。
  5. 從正規化後的分佈中抽樣。

Figure 27: GPT-2 output using top-k sampling with k=50

Top-k 取樣在連貫性與多樣性之間取得平衡。GPT-2 最初使用此方法,對其成功至關重要。

主要限制:Top-k 總是從固定數量的最高機率 token 中選取,不考慮機率的實際分佈。當分佈尖銳時,可能納入不太可能的候選;當分佈平坦時,則因候選不足而限制了創造力。

Figure 28: Top-k sampling in sharp distribution

Top-p(核心)取樣#

Top-p 取樣 [31](又稱核心取樣,Nucleus Sampling)根據累積機率動態調整候選 token 的數量。它不選取最可能的 k 個 token,而是選取累積機率超過閾值 p 的最小 token 集合。

Figure 29: Top-p sampling adaptively chooses tokens based on the probability distribution

逐步流程:

  1. 模型預測下一個 token 的機率分佈。
  2. 按機率降序排列 token。
  3. 選取累積機率超過閾值 p 的最小 token 集合。
  4. 將所選 token 的機率正規化,使總和為 1。
  5. 從正規化後的分佈中抽樣。

Figure 30: GPT-2 output using top-p sampling with p=0.92

Top-p 取樣被廣泛用於先進 LLM 中,在確保連貫性與上下文相關性的同時允許適度的隨機性,以生成類人文字。

其他取樣技術#

以下兩種技術常搭配進階取樣方法使用:

溫度#

溫度(Temperature)透過在套用 Softmax 之前縮放 logits 來控制預測的隨機性

$p_i=\frac{\exp \left(x_i / T\right)}{\displaystyle\sum_j^n \exp \left(x_j / T\right)}$

其中:

  • $x_i$ 為每個可能輸出的 logits(原始分數)
  • $T$ 為溫度參數
  • $p_i$ 為經 Softmax 後輸出 $i$ 的機率

溫度的行為:

  • $T = 1$:Softmax 正常運作。
  • $T > 1$:分佈更均勻,輸出更隨機、更多樣。適合創意任務。過高則導致離題或無意義的輸出。
  • $T < 1$:更確定性,最高 logits 主導。適合需要精確答案的任務(摘要、翻譯)。過低則導致重複。$T = 0$ 時始終產出相同結果。

Figure 31: Different temperature values applied to the same logits

大多數模型供應商將允許的溫度範圍設在 0 到 2 之間。

Figure 32: OpenAI’s temperature documentation [32]

實務上,溫度通常介於 0.1 至 1.5。超過 1.5 會產出越來越不穩定的結果。最佳值取決於任務,需透過實驗確定。

Use caseTemperatureTop-pDescription
Code generation0.20.1Deterministic and focused. Useful for syntactically correct code.
Creative writing0.70.8Exploratory and less constrained for storytelling.
Chatbot responses0.50.5Balances coherence and diversity for natural engagement.

Table 5: Empirical temperature and top-p ranges for different tasks [33]

重複懲罰#

重複懲罰(Repetition Penalty)明確降低生成重複序列的可能性,可透過以下方式實現:

  • 終止生成:當偵測到重複的 n-gram 時終止(由 Hugging Face 模型中的 no_repeat_ngram_size 控制)
  • 修改 token 機率:降低已取樣 token 的機率(如 ChatGPT API 中的 frequency_penalty

更多關於 LLM 取樣方法的資訊,請參閱 [30]。

評估#

離線評估指標#

評估 LLM 不能僅依賴困惑度(Perplexity)等傳統指標。這些模型行為複雜,在不同任務上表現各異。我們從四個面向進行評估:

  1. 傳統評估
  2. 任務特定評估
  3. 安全性評估
  4. 人工評估

傳統評估#

傳統評估使用典型的離線指標。困惑度(Perplexity) 衡量模型預測訓練資料中確切 token 序列的準確度——數值越低代表模型對訓練 token 指定了越高的平均機率。

困惑度對初步評估有用,但無法衡量 LLM 的各種能力(如理解程式碼或解數學題)。需要任務特定的評估方法。

任務特定評估#

在多種任務上評估效能有助於找出模型的優勢與弱點。

常識推理#

評估模型基於日常情境與一般知識進行推理的能力——解讀慣用語、理解因果關係、預測可能的結果。

Figure 33: Example of common-sense reasoning

常見基準測試:PIQA [34]、SIQA [35]、HellaSwag [36]、WinoGrande [37]、OpenBookQA [38] 及 CommonsenseQA [39]。

世界知識#

測試模型的事實性知識:歷史事實、科學資訊、地理與時事。

Figure 34: World knowledge example

常見基準測試:

  • TriviaQA [40]:來自知識問答與競賽網站的問題。
  • Natural Questions (NQ) [41]:來自自然網路查詢(Google)的問答。
  • SQuAD [42]:基於維基百科文章的問題。
閱讀理解#

評估理解文章段落並據以回答問題的能力。

Figure 35: Reading comprehension example from SQuAD

常見基準測試:SQuAD [42]、QuAC [43] 及 BoolQ [44]。

數學推理#

評估解決數學問題的能力。

Figure 36: Mathematical reasoning example from GSM8K [45]

常見基準測試:

  • MATH [46]:高中數學競賽題目。
  • GSM8K [45]:小學數學問題,測試解題技巧。
程式碼生成#

評估從自然語言提示產出語法正確且可運作程式碼的能力。

Figure 37: Code generation example from HumanEval

常見基準測試:

  • HumanEval [47]:Python 程式設計任務。
  • MBPP [48]:跨多種程式語言的任務,評估多語言程式碼生成能力。
綜合基準測試#

綜合基準測試結合多種任務,提供更全面的評估:

  • MMLU [49]:涵蓋人文、STEM、社會科學等不同難度的選擇題。
  • MMMU [50]:類似 MMLU 但測試多語言能力、推理及跨文化知識。
  • AGIEval [51]:跨多個領域與任務測試通用人工智慧。
  • Meta Llama 3 人工評估 [13]:1,800 個提示,涵蓋 12 個關鍵使用場景(建議、腦力激盪、分類、問答、程式設計、創意寫作、資訊擷取、角色扮演、推理、改寫、摘要)。

安全性評估#

安全性評估確保模型生成安全且符合倫理的回應。

毒性與有害內容#

評估模型避免生成有毒內容的能力:仇恨言論、辱罵語言、有害指示,以及助長攻擊或非法活動的內容。

Figure 38: Model’s expected response to toxic prompts

基準測試:

  • RealToxicityPrompts [52]:約 100,000 個由 PerspectiveAPI [53] 評分的提示。
  • ToxiGen [54]:測試模型避免歧視性語言的能力。
  • HateCheck [55]:測試各類型仇恨言論。
偏見與公平性#

評估回應中的性別、種族及其他偏見。

基準測試:

  • CrowS-Pairs [56]:配對句子,僅在一個屬性(如性別)上有所不同,涵蓋 9 個偏見類別。
  • BBQ [57]:手工編寫的問題集,針對社會偏見。
  • BOLD [58]:23,679 個提示,用於跨五個領域的偏見基準測試。
真實性#

評估生成真實且事實正確回應的能力。

Figure 39: Truthfulness example from TruthfulQA

常見基準測試:TruthfulQA [59]——衡量模型辨別真實陳述並避免生成錯誤資訊的能力。

使用者隱私與資料洩漏#

評估模型從訓練資料中洩漏敏感資訊的傾向。常見基準測試:PrivacyQA [60]。

對抗穩健性#

測試模型處理旨在混淆或欺騙的輸入的能力。基準測試:AdvGLUE [61]、TextFooler [62] 及 AdvBench [63]。

人工評估#

人工評估員(Human Evaluator)對 LLM 的不同面向進行評分,例如有用性與安全性。這對於評估自動化基準測試可能遺漏的細微層面至關重要。

線上評估指標#

線上指標衡量 LLM 在正式環境中的表現:

  • 使用者回饋與評分:使用者對回應的滿意度進行評分,找出需要改善的面向。

Figure 40: Collecting users’ feedback

  • 使用者參與度:例如「查詢次數」與「對話時長」等指標,可反映 LLM 是否有效提供有幫助的資訊。
  • 轉換率(Conversion Rate):與 LLM 互動後購買或註冊的使用者比例。較高的轉換率代表使用者認為模型有用。
  • 線上排行榜:即時追蹤 LLM 表現。知名案例為 LMSYS Chatbot Arena [64],基於超過 800,000 次人類兩兩比較進行排名。

Figure 41: Chatbot Arena leaderboard

整體 ML 系統設計#

設計聊天機器人系統需要多個元件協同運作。本節涵蓋兩個關鍵流程(Pipeline):

訓練流程#

訓練流程包含前述的三個關鍵階段:預訓練SFTRLHF,共同確保模型生成有幫助且安全的回應。

推論流程#

推論流程(Inference Pipeline)處理與使用者的即時互動。關鍵元件包括:

  • 安全過濾(Safety Filtering)
  • 提示增強器(Prompt Enhancer)
  • 回應生成器(Response Generator)
  • 回應安全評估器(Response Safety Evaluator)
  • 拒絕回應生成器(Rejection Response Generator)
  • 會話管理(Session Management)

Figure 42: Chatbot overall design

安全過濾#

在處理之前分析使用者提示,偵測有害、不當或不安全的查詢。例如,要求製造危險裝置的提示將被拒絕並標記。

提示增強器#

精煉並豐富輸入提示,包括展開縮寫、糾正拼字錯誤,以及在必要時補充上下文。確保提示在送入模型前清晰、無歧義且文法正確。

Figure 43: Example of prompt enhancement

回應生成器#

使用 Top-p 取樣與已訓練的 LLM 互動以生成回應。可選擇性地生成多個回應,並根據預定義準則選出最合適的一個。

回應安全評估器#

在向使用者展示生成的回應之前,評估其是否包含有害或不當內容。作為倫理與安全標準的最後一道防線

拒絕回應生成器#

當輸入提示不安全或生成的回應不適當時,產生清晰且禮貌的說明。

會話管理#

維護對話上下文並處理後續追問,追蹤聊天歷史記錄並管理對話流程。聊天歷史連同增強後的提示一起送入回應生成器,透過參考先前的互動確保上下文相關性

其他討論主題#

若時間允許,可進一步探討以下主題:

  • 管理對話狀態與跨多輪追蹤上下文的技術 [65]
  • 更高效的 ML 目標,如多 token 預測(Multi-token Prediction)[66]
  • 處理超長序列長度 [67][68]
  • 開發多模態 LLM(Multimodal LLM)[69][70]
  • 利用外部知識庫與資料庫的 RAG(第六章詳述)[71]
  • 加速文字生成的效率技術(如蒸餾,Distillation)
  • 將 LLM 適配至特定領域(如客服、醫療),同時避免遺忘先前知識 [72]
  • LLM 的安全與隱私議題
  • 不同的優化演算法:PPO、DPO、拒絕取樣(Rejection Sampling)[73]
  • 紅隊測試(Red-teaming)LLM 以降低危害 [74]
  • 超級對齊(Super-alignment)及其重要性 [75]
  • 上下文學習(In-context Learning)的運作原理 [76]
  • 分組查詢注意力(Grouped Query Attention)及其優勢 [77]
  • 思維鏈提示技術(Chain-of-thought Prompting,第六章詳述)[78]
  • 實作 KV 快取(KV Cache)[79]
  • 要求模型為輸出產出清晰且可驗證的理由 [80]

總結#

Image represents a mind map summarizing the design of a generative AI system.