目錄

面對模稜兩可的問題,AI 該學會反問:詳解 CLAM 論文與自動化 Oracle 評估機制

這篇論文提出了一個名為 CLAM (CLarify-if-AMbiguous) 的框架,旨在解決大型語言模型 (LLM) 在面對定義不清 (Ambiguous) 的問題時,傾向於過度自信地「盲目猜測」或產生幻覺的痛點。

CLAM 賦予了模型一種類似人類的 後設認知 (Meta-cognition) 能力。它不直接回答問題,而是先經過一個「三階段漏斗」:

  1. 檢測: 判斷問題是否有歧義。
  2. 提問: 如果有歧義,生成具體的澄清問題詢問使用者。
  3. 回答: 根據使用者的補充資訊,給出最終精確答案。

此外,為了克服多輪對話評估昂貴且難以複製的挑戰,作者提出了一套基於 Oracle 的自動化評估協議。

為什麼這篇論文重要?
這篇論文的價值不在於它訓練了一個多強大的新模型,而在於它展示了如何透過流程設計提示工程 (Prompt Engineering),激發出模型潛在的推理能力。

在我們深入 CLAM 之前,必須先理解為什麼這個問題如此棘手。現代的大型語言模型 (LLM) 如 GPT-3,訓練目標通常是「預測下一個最可能的詞」。這種機制導致模型在面對 模稜兩可 (Ambiguous)定義不清 (Under-specified) 的使用者輸入時,會產生一種危險的行為傾向: 過度自信的猜測

試想一個場景: 使用者問「他什麼時候登陸月球? (When did he land on the moon?) 」。

  • 使用者的意圖: 心裡想的是 Alan Bean (阿波羅 12 號) 。
  • 模型的行為: 因為訓練數據中 Neil Armstrong 的頻率最高,模型直接回答 “July 20, 1969”。

這產生了兩大問題:

  1. 幻覺 (Hallucination) 與錯誤歸因: 模型給出了一個「事實正確」但「語境錯誤」的答案。這比完全胡說八道更難被發現。
  2. 缺乏後設認知 (Lack of Meta-cognition): 模型沒有意識到「我掌握的資訊不足以回答這個問題」,它缺乏人類那種「等等,我不確定你是指誰?」的自我反省機制。

然而,解決這個問題並非單純讓模型「多問問題」這麼簡單。如果我們矯枉過正,設計一個 強制澄清 (Force Clarification) 的系統,模型就會變成一個惱人的機器人,連「法國首都在哪?」這種明確問題都要反問「你是指現在的法國嗎?」。

因此,真正的挑戰在於選擇性 (Selectivity): 模型必須具備判別能力,只在必要時尋求澄清,而在問題明確時保持高效。

除了模型行為本身,研究領域還面臨一個巨大的方法論障礙: 多輪對話難以評估。 要測試一個會「反問」的系統,傳統上需要真人介入 (Human Evaluation) 來回答模型的澄清問題。這導致實驗成本極高、速度極慢,且無法保證可複製性 (不同受試者的回答品質不一) 。

我們將詳細拆解 CLAM (CLarify-if-AMbiguous) 的運作機制。請想像一個使用者的問題進入系統後,會經歷一個「三階段的決策漏斗」。

CLAM 流程概覽: 輸入問題 -> 歧義檢測 -> 若歧義則生成澄清問題 -> 獲得反饋 -> 生成最終答案。

這是整個系統的「大腦」。如果這個分類器失效,系統要麼變啞巴,要麼變聒噪。

作者並不是重新訓練一個分類器,而是利用 LLM 本身的生成能力。 我們使用 Few-shot Prompting,給模型看幾個範例:

Q: Who was the first woman to make a solo flight across this ocean?
This question is ambiguous: True.

Q: Who was the first woman to make a solo flight across the Atlantic?
This question is ambiguous: False.

Q: [User Input]
This question is ambiguous:

模型輸出不應該只看生成的文字 (“True” 或 “False”) ,因為文字是離散的,會丟失信心資訊。 CLAM 計算模型生成下一個 Token 為 “True”對數機率 (Log Probability):

Score=logP(token="True"Context) Score = \log P(\text{token} = \text{"True"} \mid \text{Context})

接著,我們設定一個閾值 τ\tau (論文中設為 -0.3) 。

  • Score>τ Score > \tau ,判定為 Ambiguous -> 進入澄清流程。
  • Scoreτ Score \le \tau ,判定為 Unambiguous -> 直接回答。
為什麼要用 Log Probability?
直接生成文字就像是問模型: 「是有歧義還是沒歧義?選一個!」模型可能會被迫選邊站。 使用 Log Probability 則像是問: 「你有幾成把握覺得這是有歧義的?」這給了我們一個連續的分數 (Continuous Score) ,讓我們能精細地調控系統的敏感度 (Sensitivity) 。

一旦守門員放行 (判定為歧義) ,模型的任務就從「回答」轉變為「提問」。

為了防止模型胡言亂語或直接放棄,作者設計了一個帶有強制引導句的 Prompt:

This is a conversation between a user and a question-answering bot.
... (Few-shot Examples) ...

User: {Ambiguous Question}
Bot: To answer this question, I need to ask the following clarifying question:

注意最後一行。系統不讓模型生成這部分,而是預先填好。這強迫模型接續這個句子,進入「提問模式」。

模型會基於 In-context Learning,模仿範例中的模式,識別出問題中的歧義點 (如代名詞 “he” 或多義詞 “bank”) ,並生成針對性的問句 (如 “Who is ‘he’?”) 。

這是流程的收尾。系統將所有資訊串接起來,形成一個完整的上下文。

輸入給模型的最終 Prompt 結構如下:

Context=[Qoriginal]+[Qclarify]+[Auser] Context = [Q_{\text{original}}] + [Q_{\text{clarify}}] + [A_{\text{user}}]

這是 LLM 的強項。模型不需要顯式地重寫問題 (例如把 “he” 替換成 “Alan Bean”) 。透過 Attention 機制,模型會自動將 AuserA_{\text{user}} 中的實體資訊與 QoriginalQ_{\text{original}} 中的模糊指代對齊,然後檢索正確知識並生成最終答案。

為了解決「評估太貴」的問題,作者引入了 Oracle 模型。這是一個在評估階段扮演使用者的 LLM。

Oracle 評估流程: 利用成對資料集,讓 Oracle 根據 Unambiguous Question 來回答 CLAM 的提問。

我們使用一個成對的資料集 (Qambiguous,Qunambiguous,Aground_truth)(Q_{\text{ambiguous}}, Q_{\text{unambiguous}}, A_{\text{ground\_truth}})

  1. CLAM 看到 QambiguousQ_{\text{ambiguous}},問: 「你是指誰?」
  2. Oracle 看到 QunambiguousQ_{\text{unambiguous}} (特權資訊) ,它知道這是關於 Alan Bean 的問題。
  3. Oracle 回答: 「我指的是 Alan Bean。」
  4. CLAM 根據這個回答生成最終答案。

為了懲罰「亂問問題」的行為,作者設計了一個指標。若模型對一個無歧義的問題進行了澄清 (即使最後答對) ,準確率會被乘以一個懲罰係數 λ\lambda (例如 0.8) 。

Accadj={1if correct & ambiguousλif correct & unambiguous & clarified0if incorrect \text{Acc}_{\text{adj}} = \begin{cases} 1 & \text{if correct \& ambiguous} \\ \lambda & \text{if correct \& unambiguous \& clarified} \\ 0 & \text{if incorrect} \end{cases}

這確保了高分模型必須兼具準確性選擇性

實驗部分是檢驗真理的時刻。這篇論文的實驗設計非常扎實,不僅證明了 CLAM 能夠提升準確率,更重要的是它解釋了「為什麼能贏」以及「贏在哪裡」。我們將重點關注以下三個核心發現。

為了全面評估 CLAM 的能力,作者使用了三個主要資料集:

  1. Ambiguous TriviaQA (作者自建) : 包含成對的歧義/無歧義問答,是測試核心能力的主戰場。
  2. ClariQ: 真實搜尋引擎的查詢紀錄,側重於資訊檢索場景。
  3. CLAQUA: 專注於實體消歧義 (Entity Disambiguation) 的多輪對話資料集。
這張圖展示了 CLAM 在 Ambiguous TriviaQA 上的表現。(a) 顯示 CLAM 在調整後準確率 (Adjusted Accuracy) 上大幅領先,證明它能在不犧牲效率的前提下解決歧義。(b) 顯示在純歧義問題上,CLAM 與強制澄清 (Force Clarification) 表現相當,但遠勝於預設 GPT。

核心發現 1: CLAM 找到了最佳平衡點Figure 5(a) 中,我們可以看到 CLAM 的柱狀圖顯著高於所有 Baseline。

  • Default GPT (藍色): 因為從不提問,遇到歧義就瞎猜,導致準確率極低。
  • Force Clarification (綠色): 雖然解決了歧義,但因為對所有問題 (包括無歧義的) 都進行反問,被懲罰係數 λ\lambda 大幅扣分。
  • CLAM (紅色): 準確率最高。這證明了其 選擇性 (Selectivity) 機制的成功——只在必要時出手,平時保持安靜。

核心發現 2: 單純 Prompting 無法檢測歧義 這是一個非常重要的消融實驗結果,請參考 Figure 6

這張 AUROC 曲線圖比較了不同方法的歧義檢測能力。CLAM (紅色) 的 AUROC 接近 0.9,遠高於 Prompting Baseline (橘色) 的 0.5 (隨機猜測)。
驚人發現: Prompting is not enough
許多人認為只要在 Prompt 裡加一句「如果不清楚請發問」,模型就能學會。但實驗數據狠狠打臉了這個假設。 Prompting Baseline 的 AUROC 分數接近 0.5,這意味著它跟隨機亂猜沒兩樣。 相反地,CLAM 利用 Log Probability 作為連續信號,成功激發了模型潛在的判斷力 (AUROC > 0.8)。

除了「什麼時候問」,我們也關心「問得好不好」。

  • 澄清問題品質: 人工評估顯示,CLAM 生成的澄清問題在 Ambiguous TriviaQA 上有 84.0% 的正確率,在 CLAQUA 上更是高達 99.0% (見 Table 2) 。這證明了 LLM 具備極強的語言學理解能力,能精確定位歧義點。
  • Oracle 可靠性: Oracle 模型在回答澄清問題時的準確率高達 98.8%。這驗證了作者提出的「自動化評估協議」是高度可靠的,未來研究可以放心使用。

這篇論文成功地將大型語言模型從一個「盲目的答題機器」轉化為一個「懂得反思的對話者」。

  1. 解決的問題: 克服了 LLM 在面對歧義問題時的過度自信與幻覺,以及多輪對話評估昂貴的難題。
  2. 使用的方法: 提出了 CLAM 架構,結合 Few-shot Prompting 與 Log Probability 檢測機制,實現了選擇性澄清 (Selective Clarification)。同時,引入了 Oracle 自動化評估協議。
  3. 達成的效果: 在多個資料集上顯著提升了 QA 準確率,並證明了該方法能有效區分歧義與非歧義問題,大幅優於單純的 Prompting 策略。