簡介#
ChatGPT [1] 是 OpenAI 於 2022 年推出的聊天機器人(Chatbot),能根據使用者的輸入生成類人文字,協助回答問題、提供解釋及產出創意內容。
ChatGPT 是史上成長最快的應用之一,上線不到三個月便突破 1 億名使用者 [2]。本章將深入探討如何建構類似 ChatGPT 的聊天機器人系統。
需求釐清#
以下為面試中候選人與面試官的典型對話:
候選人:聊天機器人需要支援哪些語言? 面試官:先聚焦於英文即可。
候選人:我們需要確保聊天機器人產出無偏見且安全的內容,搭配嚴格的內容審核與演算法。這樣的假設合理嗎? 面試官:當然。
候選人:聊天機器人預期要處理哪些類型的任務? 面試官:需要能提供資訊並回答問題。
候選人:聊天機器人是否需要處理非文字的模態(Modality),例如圖片、音訊或影片? 面試官:先聚焦於純文字聊天機器人,輸入與輸出都是文字。
候選人:聊天機器人是否需要處理後續追問?應維持多長的對話上下文? 面試官:好問題。聊天機器人需要在同一對話中處理追問,上下文視窗(Context Window)至少為 4096 個 token。
候選人:聊天機器人是否需要瀏覽網頁、呼叫外部 API 或進行網路搜尋? 面試官:本輪不討論這些功能。
候選人:聊天機器人是否需要個人化互動? 面試官:暫不考慮個人化。
候選人:我們是否有基於指令的訓練資料? 面試官:有,我們有一份包含 80,000 筆指令與回覆的資料集。
將問題建模為機器學習任務#
定義系統的輸入與輸出#
- 輸入:使用者提供的文字提示(Prompt),可以是問題、指令或任何文字查詢
- 輸出:聊天機器人生成的相關且符合上下文的回應
選擇合適的機器學習方法#
開發聊天機器人屬於語言生成任務(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) 方法。
位置編碼#
在聊天機器人場景中,輸入序列通常遠長於單一句子或電子郵件。我們的目標是建構上下文視窗至少 4096 個 token 的系統,這需要能同時捕捉 token 位置及其相對關係的位置編碼方法。
本節涵蓋以下內容:
- 絕對位置編碼(Absolute Positional Encoding)
- 相對位置編碼(Relative Positional Encoding)
- 旋轉位置嵌入(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$ 推導,透過複數平面上的三角函數同時捕捉絕對與相對位置資訊。
圖 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)採用三階段訓練策略:
- 預訓練(Pretraining)
- 監督式微調(Supervised Finetuning, SFT)
- 基於人類回饋的強化學習(Reinforcement Learning from Human Feedback, RLHF)
第一階段:預訓練#
預訓練是初始階段,在大量來自網路的文字資料上訓練模型。目的是建立一個具備廣泛語言理解與世界知識的基礎模型(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:
| Dataset | Sampling proportion | Disk size |
|---|---|---|
| Common Crawl | 67.0% | 3.3 TB |
| C4 | 15.0% | 783 GB |
| Github | 4.5% | 328 GB |
| Books | 4.5% | 85 GB |
| Wikipedia | 4.5% | 83 GB |
| ArXiv | 2.5% | 92 GB |
| Stack Exchange | 2.0% | 78 GB |
Table 1: Llama 1 pretraining dataset
機器學習目標與損失函數#
由於我們訓練的是用於文字生成的僅解碼器 Transformer,機器學習目標為下一個 token 預測(Next-token Prediction),使用交叉熵損失(Cross-Entropy Loss) 衡量預測的 token 機率與正確 token 之間的差異。
預訓練的成果#
預訓練階段產出一個基礎模型,能理解語言並預測給定輸入提示之後的文字。
基礎模型只能接續提示生成文字,無法直接回答問題。要使其成為實用的聊天機器人,需要進行監督式微調。
第二階段:監督式微調(SFT)#
SFT(也稱為指令微調,Instruction Finetuning)在較小但高品質的 (提示, 回應) 格式資料集上微調基礎模型。目標是保留基礎模型的語言理解能力,同時讓它學會回應提示,而非僅僅延續文字。
訓練資料#
訓練資料遵循 (提示, 回應) 格式,通常稱為示範資料(Demonstration Data),因為它示範了如何回應提示。
與預訓練資料的主要差異:
規模:示範資料顯著較小,通常為 10,000 至 100,000 組。
| Dataset | Size | Notes |
|---|---|---|
| InstructGPT [20] | ~14,500 | OpenAI’s GPT-3 instruction datasets |
| Alpaca [21] | 52,000 | Developed by Stanford researchers |
| Dolly-15K [22] | ~15,000 | Created by Databricks |
| FLAN 2022 [23] | ~104,000 | Developed by Google Research |
Table 2: Common demonstration datasets
品質:示範資料品質更高,通常由受過教育的人類標註員(Human Contractor)建立。在專業領域(醫療、金融),領域專家不可或缺。
| Education | Percentage |
|---|---|
| Less than a high school degree | 0% |
| High school degree | 10.5% |
| Undergraduate degree | 52.6% |
| Master’s degree | 36.8% |
Table 3: The education levels of OpenAI’s labelers
OpenAI 為 GPT 示範資料集聘請的標註員中,超過三分之一擁有碩士學位 [20]。雖然成本高昂,但這種專業水準對於產出可靠且符合特定產業需求的回應至關重要。
機器學習目標與損失函數#
機器學習目標與損失函數與預訓練相同:下一個 token 預測搭配交叉熵損失。模型仍根據輸入提示逐一 token 生成文字。
SFT 的成果#
SFT 模型以(提示, 回應)格式生成詳細且有幫助的回應,而非僅僅延續文字。
然而,SFT 模型不一定總能生成最佳回應——其答案可能不夠有幫助,甚至不安全。圖 11 展示了四個合理的回應:只有第二個既安全又有幫助。
為確保模型產出相關、安全且有幫助的回應,需要透過 RLHF 進一步微調。
第三階段:RLHF#
RLHF 也稱為對齊(Alignment) 階段,旨在調整模型以生成人類偏好的回應。它包含兩個依序執行的步驟:
- 訓練獎勵模型(Reward Model)
- 優化 SFT 模型
步驟 3.1:訓練獎勵模型#
獎勵模型評估回應對提示的相關性。它接收 (提示, 回應) 配對作為輸入,輸出一個預測有用程度的分數。分數越高代表回應越有幫助。
獎勵模型架構:獎勵模型與語言模型的大小比例並無一致的模式。例如:
- OpenAI:60 億參數的獎勵模型對應 1750 億參數的語言模型 [20]
- Anthropic:獎勵模型與語言模型皆為 100 億至 520 億參數 [24]
常見做法是複製 SFT 模型並加上一個預測相關性分數的預測頭。
訓練資料收集 步驟如下:
- 收集提示:手動建立一份提示清單。
- 生成多個回應:使用 SFT 模型為每個提示生成多個回應。
- 排序回應:標註員依相關性對回應進行排序。排序相較於評分能降低主觀性——讓標註員直接比較回應更為直觀。
- 建立偏好對:構建 (提示, 勝出回應, 落敗回應) 格式的配對。

機器學習目標與損失函數:獎勵模型的目標是為勝出回應預測更高的分數。對於給定的(提示, 勝出回應, 落敗回應),目標是最大化 $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}}$。
成果:一個能為(提示, 回應)配對預測相關性分數、反映人類判斷的獎勵模型。
步驟 3.2:優化 SFT 模型#
使用獎勵模型優化 SFT 模型,使其生成的回應不僅合理且有幫助。常見方法使用近端策略優化(Proximal Policy Optimization, PPO) [25],迭代執行以下步驟:
- 生成模型回應:模型為給定提示生成多個可能的回應。
- 計算獎勵:獎勵模型為這些回應評分。
- 更新模型權重:強化學習演算法更新權重以最大化預期獎勵,強化得分較高的回應。
訓練資料:由標註員建立的提示清單,通常為 10,000 至 100,000 條。
機器學習目標與損失函數:知名 LLM 使用 PPO 及直接偏好優化(Direct Policy Optimization, DPO) [26] 等強化學習演算法。這些演算法的細節通常超出大多數 ML 系統設計面試的範圍。更多資訊可參閱 [27] 與 [28]。
RLHF 的成果:可部署為聊天機器人的最終模型。
| LLM name | Developer | Release date | Access | Parameters |
|---|---|---|---|---|
| o1 | OpenAI | September 12, 2024 | Preview only | Unknown |
| GPT-4o | OpenAI | May 13, 2024 | API | Unknown |
| Claude 3 | Anthropic | March 14, 2024 | API | Unknown |
| Gemini 1.5 | DeepMind | February 2, 2024 | API | Unknown |
| Llama 3 | Meta AI | April 18, 2024 | Open-Source | 8 and 70 billion |
| Grok-1 | xAI | November 4, 2023 | Open-Source | 314 billion |
| Mixtral 8x22B | Mistral AI | April 10, 2024 | Open-Source | 141 billion |
| Gemma | DeepMind | February 21, 2024 | Open-Source | 2 and 7 billion |
| Phi-3 | Microsoft | April 23, 2024 | Open-Source | 3.8 billion |
| DBRX | Databricks | March 27, 2024 | Open-Source | 132 billion |
Table 4: Popular LLMs
訓練總結#
三階段策略:
- 預訓練:在大規模語料庫上訓練,獲得廣泛的語言理解能力。
- SFT:微調使輸出適應(提示, 回應)格式。
- RLHF:進一步優化回應,使其有幫助、安全且符合人類偏好。
取樣#
取樣(Sampling)指的是如何從模型預測的機率分佈中選取 token,以生成連貫且有幫助的回應。
如第二章所述,文字生成有多種方法——有些是確定性的,有些是隨機性的。
確定性方法#
確定性方法(Deterministic Methods)如束搜尋(Beam Search)適合輸出長度短且可預測的任務,但對於開放式生成(如對話)效果較差,因為輸出長度變化大。
貪婪搜尋#
貪婪搜尋(Greedy Search)在每一步選擇機率最高的 token。
雖然直觀且通常連貫,但有兩個主要問題:
- 重複:當某些詞彼此跟隨的機率很高時,模型會「卡」在迴圈中,反覆使用相同的 token 序列。
- 次優生成:貪婪搜尋忽略替代路徑,可能錯過隱藏在低機率 token 之後的高機率序列。
束搜尋#
束搜尋(Beam Search)改進貪婪搜尋,同時考慮多個序列,在每一步追蹤前 $k$ 個序列。
它允許更多探索,但在開放式生成中仍有不足:
- 效率低:評估多個序列會拖慢生成速度。
- 重複:仍可能卡在迴圈中,重複常見片語。
隨機性方法#
隨機性方法(Stochastic Methods)引入隨機性,使其更適合開放式文字生成。以下介紹三種常見方法:
多項式取樣#
多項式取樣(Multinomial Sampling)根據完整的機率分佈選擇下一個 token。每個 token 都有一個機率,據此進行抽樣。
這確保了輸出的多樣性,但顯著的隨機性(尤其在機率分佈平坦時)常導致不連貫的生成結果。
由於連貫性問題,多項式取樣在 LLM 中很少使用。
Top-k 取樣#
Top-k 取樣 [30] 從最可能的 k 個 token 中選取,而非整個分佈。
逐步流程:
- 模型預測下一個 token 的機率分佈。
- 按機率降序排列 token。
- 取前 k 個 token 作為候選。
- 將前 k 個 token 的機率正規化(Normalize),使總和為 1。
- 從正規化後的分佈中抽樣。
Top-k 取樣在連貫性與多樣性之間取得平衡。GPT-2 最初使用此方法,對其成功至關重要。
主要限制:Top-k 總是從固定數量的最高機率 token 中選取,不考慮機率的實際分佈。當分佈尖銳時,可能納入不太可能的候選;當分佈平坦時,則因候選不足而限制了創造力。
Top-p(核心)取樣#
Top-p 取樣 [31](又稱核心取樣,Nucleus Sampling)根據累積機率動態調整候選 token 的數量。它不選取最可能的 k 個 token,而是選取累積機率超過閾值 p 的最小 token 集合。
逐步流程:
- 模型預測下一個 token 的機率分佈。
- 按機率降序排列 token。
- 選取累積機率超過閾值 p 的最小 token 集合。
- 將所選 token 的機率正規化,使總和為 1。
- 從正規化後的分佈中抽樣。
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$ 時始終產出相同結果。
大多數模型供應商將允許的溫度範圍設在 0 到 2 之間。
實務上,溫度通常介於 0.1 至 1.5。超過 1.5 會產出越來越不穩定的結果。最佳值取決於任務,需透過實驗確定。
| Use case | Temperature | Top-p | Description |
|---|---|---|---|
| Code generation | 0.2 | 0.1 | Deterministic and focused. Useful for syntactically correct code. |
| Creative writing | 0.7 | 0.8 | Exploratory and less constrained for storytelling. |
| Chatbot responses | 0.5 | 0.5 | Balances 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)等傳統指標。這些模型行為複雜,在不同任務上表現各異。我們從四個面向進行評估:
- 傳統評估
- 任務特定評估
- 安全性評估
- 人工評估
傳統評估#
傳統評估使用典型的離線指標。困惑度(Perplexity) 衡量模型預測訓練資料中確切 token 序列的準確度——數值越低代表模型對訓練 token 指定了越高的平均機率。
困惑度對初步評估有用,但無法衡量 LLM 的各種能力(如理解程式碼或解數學題)。需要任務特定的評估方法。
任務特定評估#
在多種任務上評估效能有助於找出模型的優勢與弱點。
常識推理#
評估模型基於日常情境與一般知識進行推理的能力——解讀慣用語、理解因果關係、預測可能的結果。
常見基準測試:PIQA [34]、SIQA [35]、HellaSwag [36]、WinoGrande [37]、OpenBookQA [38] 及 CommonsenseQA [39]。
世界知識#
測試模型的事實性知識:歷史事實、科學資訊、地理與時事。
常見基準測試:
- TriviaQA [40]:來自知識問答與競賽網站的問題。
- Natural Questions (NQ) [41]:來自自然網路查詢(Google)的問答。
- SQuAD [42]:基於維基百科文章的問題。
閱讀理解#
評估理解文章段落並據以回答問題的能力。
常見基準測試:SQuAD [42]、QuAC [43] 及 BoolQ [44]。
數學推理#
評估解決數學問題的能力。
常見基準測試:
- MATH [46]:高中數學競賽題目。
- GSM8K [45]:小學數學問題,測試解題技巧。
程式碼生成#
評估從自然語言提示產出語法正確且可運作程式碼的能力。
常見基準測試:
- HumanEval [47]:Python 程式設計任務。
- MBPP [48]:跨多種程式語言的任務,評估多語言程式碼生成能力。
綜合基準測試#
綜合基準測試結合多種任務,提供更全面的評估:
- MMLU [49]:涵蓋人文、STEM、社會科學等不同難度的選擇題。
- MMMU [50]:類似 MMLU 但測試多語言能力、推理及跨文化知識。
- AGIEval [51]:跨多個領域與任務測試通用人工智慧。
- Meta Llama 3 人工評估 [13]:1,800 個提示,涵蓋 12 個關鍵使用場景(建議、腦力激盪、分類、問答、程式設計、創意寫作、資訊擷取、角色扮演、推理、改寫、摘要)。
安全性評估#
安全性評估確保模型生成安全且符合倫理的回應。
毒性與有害內容#
評估模型避免生成有毒內容的能力:仇恨言論、辱罵語言、有害指示,以及助長攻擊或非法活動的內容。
基準測試:
- RealToxicityPrompts [52]:約 100,000 個由 PerspectiveAPI [53] 評分的提示。
- ToxiGen [54]:測試模型避免歧視性語言的能力。
- HateCheck [55]:測試各類型仇恨言論。
偏見與公平性#
評估回應中的性別、種族及其他偏見。
基準測試:
- CrowS-Pairs [56]:配對句子,僅在一個屬性(如性別)上有所不同,涵蓋 9 個偏見類別。
- BBQ [57]:手工編寫的問題集,針對社會偏見。
- BOLD [58]:23,679 個提示,用於跨五個領域的偏見基準測試。
真實性#
評估生成真實且事實正確回應的能力。
常見基準測試:TruthfulQA [59]——衡量模型辨別真實陳述並避免生成錯誤資訊的能力。
使用者隱私與資料洩漏#
評估模型從訓練資料中洩漏敏感資訊的傾向。常見基準測試:PrivacyQA [60]。
對抗穩健性#
測試模型處理旨在混淆或欺騙的輸入的能力。基準測試:AdvGLUE [61]、TextFooler [62] 及 AdvBench [63]。
人工評估#
人工評估員(Human Evaluator)對 LLM 的不同面向進行評分,例如有用性與安全性。這對於評估自動化基準測試可能遺漏的細微層面至關重要。
線上評估指標#
線上指標衡量 LLM 在正式環境中的表現:
- 使用者回饋與評分:使用者對回應的滿意度進行評分,找出需要改善的面向。
- 使用者參與度:例如「查詢次數」與「對話時長」等指標,可反映 LLM 是否有效提供有幫助的資訊。
- 轉換率(Conversion Rate):與 LLM 互動後購買或註冊的使用者比例。較高的轉換率代表使用者認為模型有用。
- 線上排行榜:即時追蹤 LLM 表現。知名案例為 LMSYS Chatbot Arena [64],基於超過 800,000 次人類兩兩比較進行排名。

整體 ML 系統設計#
設計聊天機器人系統需要多個元件協同運作。本節涵蓋兩個關鍵流程(Pipeline):
訓練流程#
訓練流程包含前述的三個關鍵階段:預訓練、SFT 與 RLHF,共同確保模型生成有幫助且安全的回應。
推論流程#
推論流程(Inference Pipeline)處理與使用者的即時互動。關鍵元件包括:
- 安全過濾(Safety Filtering)
- 提示增強器(Prompt Enhancer)
- 回應生成器(Response Generator)
- 回應安全評估器(Response Safety Evaluator)
- 拒絕回應生成器(Rejection Response Generator)
- 會話管理(Session Management)
安全過濾#
在處理之前分析使用者提示,偵測有害、不當或不安全的查詢。例如,要求製造危險裝置的提示將被拒絕並標記。
提示增強器#
精煉並豐富輸入提示,包括展開縮寫、糾正拼字錯誤,以及在必要時補充上下文。確保提示在送入模型前清晰、無歧義且文法正確。
回應生成器#
使用 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]
總結#
