TL;DR | 面試情境模擬 #
👴 面試官:LLM 的幻覺(Hallucination)是什麼?怎麼解決?
🧑💻 你:幻覺是 LLM 生成聽起來有信心但實際上錯誤的內容,例如捏造不存在的論文、給錯誤的 API 名稱、混淆相似的事實。根本原因是 LLM 的訓練目標是「生成高機率的下一個 token」而不是「說出真相」。主要緩解方式:用 RAG 讓模型引用真實文件、降低 Temperature 減少隨機性、要求模型說出資料來源、對輸出做事實核查。
比喻:記憶力很好但會亂掰的人 #
想像一個博覽群書的人,你問他任何問題他都會自信地回答,但他有個毛病:記不住的細節他會「填空」,用聽起來合理的內容補上去。你問他「某本書的第 15 章標題是什麼」,他不會說「我不記得」,而是給你一個聽起來符合這本書風格的標題——可能完全是他編的。
LLM 就是這樣。
幻覺的三種類型 #
1. 事實錯誤(Factual Hallucination) #
捏造或混淆真實世界的事實。
使用者:愛因斯坦在哪一年獲得諾貝爾獎?因為什麼?
LLM:愛因斯坦在 1921 年獲得諾貝爾物理學獎,表彰他發現相對論。
實際:獲獎原因是光電效應,不是相對論。
2. 知識截止(Knowledge Cutoff) #
訓練資料有截止日期,對此之後的事件一無所知,但可能會猜。
3. 上下文矛盾(Context Contradiction) #
模型在長對話中忘記前面說過的內容,或與提供的資料矛盾。
為什麼會發生? #
LLM 的訓練目標:
最大化 P(next token | previous tokens)
↓
模型學到的是「什麼樣的詞語序列在訓練資料裡常出現」
↓
不是學「什麼是真的」
所以:
「愛因斯坦獲得諾貝爾獎因為______」
→ 「相對論」和「光電效應」在訓練資料裡都常跟這句話共現
→ 模型可能選了更「常見」但錯誤的填空
緩解幻覺的方法 #
| 方法 | 原理 | 效果 |
|---|---|---|
| RAG | 提供真實文件讓模型引用,限制回答範圍 | 最有效,事實查詢場景首選 |
| 降低 Temperature | Temperature=0 讓輸出更確定,減少隨機填空 | 降低創意但提高準確性 |
| 要求引用來源 | Prompt 裡要求說明資料來源 | 讓錯誤更容易被發現 |
| Self-consistency | 同一問題問多次,取多數共識答案 | 成本高,準確率提升有限 |
| 事後驗證 | 用工具或搜尋引擎核查輸出 | 適合高風險場景 |
| Fine-tuning | 在特定領域資料上微調,減少領域外猜測 | 針對性強,訓練成本高 |
RAG 如何緩解幻覺 #
沒有 RAG:
問題 → LLM(從訓練記憶回答,可能捏造)→ 回答
有 RAG:
問題 → 向量搜尋 → 相關文件片段
↓
LLM(基於提供的文件回答)→ 回答
「根據提供的資料,...」
RAG 不能完全消除幻覺,但能把「引用真實文件」和「從記憶猜測」明確分開,大幅降低事實錯誤率。
💡 延伸問題 #
Q1:Temperature 是什麼?設為 0 就沒有幻覺嗎? #
Temperature 控制輸出的隨機程度。Temperature=0 讓模型每次選擇機率最高的 token(最確定的輸出),Temperature=1 增加多樣性。設為 0 不能消除幻覺,只是讓幻覺更「一致」(每次都說同樣的錯誤)。
Q2:為什麼 LLM 不能說「我不知道」? #
訓練資料裡,「我不知道」的出現頻率遠低於各種自信回答。RLHF 過程中,人類評分者傾向於給出有內容的回答更高分,進一步讓模型偏向生成答案而非拒絕。改善方式:在 System prompt 裡明確指示「不確定時說不知道」。
Q3:不同模型的幻覺率差多少? #
根據各種 benchmark(TruthfulQA、HaluEval),GPT-4、Claude 3 Opus 等大型模型幻覺率顯著低於小型模型,但沒有任何模型幻覺率為零。高風險場景(法律、醫療)不應該只依賴 LLM,必須搭配人工驗證或 RAG。