iT邦幫忙

2026 iThome 鐵人賽

DAY 8
0
佛心分享-SideProject30

30 天打造公開資料版急診檢傷系統:Side Project 與實驗計畫系列 第 8

Day 08|不是三選一:找出被混在一起的實驗變因

  • 分享至 

  • xImage
  •  

檢索增強生成(Retrieval-Augmented Generation, RAG)是一種先從外部知識庫找出候選證據,再交給大型語言模型(Large Language Model, LLM)整理回答的方法。前兩天,我們先比較三種候選組織方式,再建立共同的評估地圖。現在看似只差最後一步:讓三套系統各跑一次,分數最高的就是答案。

但如果系統 A 使用原始數值、平面文件與稠密檢索,系統 C 同時改用雙重查詢、階層文件、安全候選聯集、混合檢索與重排序,兩者即使相差 5 個百分點,也不能說「階層文件帶來 5 個百分點」。這個差距混合了五項改動,我們不知道哪一項帶來幫助、哪一項造成傷害,甚至不知道兩項改動是否互相抵銷。

下圖用機械模組表達同一個問題。背景三套機器一次換了許多零件,只能比較整組;前景兩套機器只有橘色模組不同,才有機會把輸出差異歸到那個模組。右側上鎖的資料盒代表兩組必須使用相同且事先固定的測試條件。

抽象實驗室背景有三套同時更換多個模組的裝置,前景兩套並排裝置只有一個橘色模組不同,旁邊放著上鎖的共同資料盒

上圖用概念方式表達控制變因:共同資料與其他模組保持不變,只替換一個待比較的元件,結果差異才有清楚的解釋範圍。


讀完這篇,你會知道什麼?

讀完 Day 08 後,你應該能夠:

  1. 分辨實驗因子、因子水準、控制條件、變因混淆與交互作用。
  2. 解釋為什麼比較三套完整架構,不能直接證明其中一個元件有效。
  3. 安排一次只改一項主要因素的控制比較。
  4. 分辨控制比較、移除單一元件的消融研究與模型敏感度檢查。
  5. 說明沒有 RAG 的基準方法為什麼不可缺少。
  6. 正確解讀 Top-k 候選覆蓋、最終方向錯誤與跨側錯誤。
  7. 用設定檔先寫下共同條件與比較順序,避免看到測試結果後再改規則。

本篇會用到的名詞

今天會同時談到實驗設計、檢索流程與錯誤分析,先建立一張詞彙索引;正文仍會逐一說明每個名詞的用途。

中文名稱 英文全名/縮寫 在本篇的用途
實驗因子 Experimental Factor 實驗者刻意改變、用來觀察輸出變化的條件
因子水準 Factor Level 同一個實驗因子可選擇的具體設定
控制條件 Controlled Condition 一組比較中刻意維持相同的資料、模型或參數
變因混淆 Confounding 多個因素一起改變,導致效果無法分開歸因
交互作用 Interaction 一項因素的效果會隨另一項因素的水準而改變
基準方法 Baseline 讓新方法有可解釋參照點的簡單或既有方法
消融研究 Ablation Study 從完整方法每次移除一個元件,觀察表現如何變化
前 k 筆候選 Top-k Candidates 檢索或排序後保留的前 k 個候選;k 是保留數量
候選覆蓋率 Candidate Coverage 正確級數或正確證據是否出現在前 k 筆候選中
跨側錯誤 Straddling Error 正確級數不在候選中,而且候選同時落在它的兩側

先把「系統」拆回可以觀察的因子

實驗因子(Experimental Factor)是實驗者刻意改變的輸入條件,例如查詢表示方式或文件結構。因子水準(Factor Level)則是這個因子的具體選項,例如文件結構可以有「平面」與「階層」兩個水準。

控制條件(Controlled Condition)是在同一組比較中刻意保持不變的部分。假設今天只想知道平面文件與階層文件的差異,測試案例、查詢文字、候選數量、檢索器、提示詞與生成模型就都應保持相同。

美國國家標準暨技術研究院(National Institute of Standards and Technology, NIST)的實驗設計術語表,把因子描述為可能影響結果、且能在實驗中改變的變數;變因混淆則表示兩個或更多效果無法分開估計。NIST:實驗設計術語表

換成白話就是:輸出變了,不代表你已經知道是哪一個改動造成的。

變因混淆不是混淆矩陣

變因混淆(Confounding)描述的是實驗設計問題:兩個以上的因素一起改變,效果黏在一起,無法單獨解釋。

混淆矩陣(Confusion Matrix)則是 Day 07 使用的評估表格,用來統計參考級數與模型預測級數的交叉筆數。兩個中文名稱都有「混淆」,用途完全不同:前者問實驗能不能歸因,後者整理分類結果。

一次只改一項因素,也不是萬能答案

控制比較(Controlled Comparison)是本系列用來描述「共同條件固定,只改一項主要因素」的工程流程。它適合回答直接問題,例如:在同一個平面知識庫上,原始查詢、語意查詢與雙重查詢哪一個能找回更多正確候選?

但是,一次只改一項因素不能自動涵蓋交互作用(Interaction)。交互作用表示一項因素的效果會隨另一項設定而改變。舉例來說,語意查詢可能只在階層文件上有幫助,在平面文件上卻沒有相同效果。

因此,本篇先用控制比較建立「直接效果」的可解釋起點;若後續結果顯示效果依賴其他設定,還要另外設計組合實驗。不能把一組控制比較寫成適用所有架構的普遍因果結論。

稽核三套完整系統:究竟一次改了幾件事?

先建立三套假想設計。這些組合只用來檢查實驗邏輯,不是已完成的系統,也沒有任何效能分數。

實驗因子 系統 A:平面基準 系統 B:階層版本 系統 C:完整方法
查詢表示 原始數值 語意文字 雙重表示
文件結構 平面區塊 父子階層 父子階層
門控方式 無門控 生命徵象硬門控 安全候選聯集
檢索方式 稠密檢索 稠密檢索 混合檢索
重排序 關閉 關閉 啟用

稠密檢索(Dense Retrieval)會把查詢與文件轉成向量,再用向量相似度尋找語意接近的內容。混合檢索(Hybrid Retrieval)則同時結合向量訊號與關鍵字等稀疏訊號。重排序(Reranking)不重新建立候選,而是取得初步候選後,再用另一個評分器調整先後順序。

下圖把表格中的差異用顏色標出。請從系統 A 直線看到系統 C:五列全部改變,所以 A 與 C 的分數差只能歸給「整套組合」,不能單獨歸給階層、門控或重排序。

三欄實驗因子矩陣比較假想系統 A、B、C,五列依序是查詢表示、文件結構、門控方式、檢索方式與重排序,底部指出 A 與 C 同時改變五項因素

上圖也顯示系統 B 並沒有解決全部問題。B 與 C 之間仍同時更換查詢表示、門控方式、檢索方式與重排序。就算 C 勝過 B,我們仍不知道是安全候選聯集增加了正確候選,還是混合檢索找到更多關鍵字相符的規則。

設計實驗的價值就在這裡。一般觀察只能告訴我們某個組合與某個結果一起出現;有控制的實驗則透過主動改變條件,讓歸因問題更清楚。NIST 的工程統計手冊也將這兩種資訊來源分開討論。NIST:從觀察到實驗

第一組混淆:原始數值、語意文字與雙重表示

查詢表示(Query Representation)是送進檢索器的查詢形式。同一筆教學輸入可以有三種表示:

表示方式 示意內容 保留的訊息
原始數值 主訴為呼吸困難;呼吸速率每分鐘 28 次;血氧飽和度 91% 原始文字、數字與單位
語意文字 依指定規則版本,呼吸速率落在較高區間,血氧飽和度落在較低區間 規則轉換後的區間語意
雙重表示 同時保留前兩列 原始值與規則語意

血氧飽和度(Peripheral Oxygen Saturation, SpO2)是以周邊感測方式估計血液含氧比例的生命徵象。這裡的 91% 只沿用跨篇教學案例,不足以完成檢傷判定;案例仍缺少意識、呼吸窘迫程度、病史、其他生命徵象與制度規則所需條件。

語意文字也不能由作者憑感覺改寫。它必須由固定版本的規則轉換器產生,並保留原始值、單位、命中的規則識別碼與版本。否則「語意表示變好」可能只是改寫者偷偷加入了額外判斷。

如果平面系統使用原始數值,階層系統卻使用語意文字,那麼檢索差異至少有兩種可能來源:

  1. 文件的平面或階層結構。
  2. 查詢中的數值是否已被轉成接近規則文字的語意。

要測查詢表示,就固定平面知識庫、稠密檢索、無門控與無重排序,只更換原始、語意、雙重三個水準。要測文件結構,再固定已選定的查詢表示,只更換平面與階層。

這個順序讓第一步的輸出成為第二步的輸入:查詢表示先在共同環境中選定;接著文件結構比較沿用同一個查詢版本,不會把兩項改動混回去。

第二組混淆:文件結構與門控方式

文件結構回答「規則如何存放」。平面知識庫把規則片段放在同一層;階層知識庫保留父層主題與子層規則的關係。

門控方式回答「哪些內容有機會進入候選」。硬門控(Hard Gate)會直接排除不符合條件的候選;軟門控(Soft Gate)只調整候選權重;安全候選聯集門控(Safety-Union Gate)則合併主訴、生命徵象與高風險保護候選,再去重與排序。

兩者解決不同問題。若比較時同時把平面文件改成階層文件,又加入生命徵象硬門控,正確規則消失可能來自父層路由錯誤,也可能來自硬門控排除。執行紀錄再完整,也只能看見候選在哪裡消失,不能從這一組分數估計兩個元件各自的效果。

合理順序是:

  1. 固定查詢表示、檢索器、前 k 筆數量與其餘元件,只比較平面與階層文件。
  2. 文件結構選定後保持不變,只比較無門控、生命徵象硬門控、主訴軟門控與安全候選聯集。
  3. 每一組都記錄門控前候選、門控後候選、初步檢索結果與最終候選,才能知道錯誤發生在哪一層。

步驟 1 產生固定的文件結構,步驟 2 才能把差異集中在候選處理;步驟 3 則提供驗證資料,避免只看最終分數猜原因。

第三組混淆:檢索器與重排序器

初步檢索器負責產生候選,重排序器負責重排既有候選。若一次從稠密檢索直接跳到「混合檢索加重排序」,即使正確證據升到第一名,也無法知道它原本就被混合檢索找回,還是原本已在候選中、只是被重排序器往前移。

因此原本的一組比較要拆成兩段:

  1. D1 檢索方式:關閉重排序器,在其他條件相同時比較稠密與混合檢索。
  2. D2 重排序:固定混合檢索產生候選,比較重排序器關閉與啟用。

D1 的預期輸出是兩種檢索器各自的前 k 筆候選與候選覆蓋率;D2 的輸入則是已固定的混合檢索候選。若 D2 開啟後候選集合內容也跟著改變,表示實作沒有只做重排,這組比較便不合格。

沒有基準,就不知道複雜度買到了什麼

基準方法(Baseline)是新方法的參照點。基準不必是最強方法,但要能回答一個明確問題。DummyClassifier 是 scikit-learn 提供的簡單分類基準;它可以忽略輸入,按照多數類別或指定策略產生預測,用來檢查複雜方法是否只利用了類別比例。scikit-learn:DummyClassifier

本系列預計至少保留六個基準。表中的內容仍是實驗計畫,不是已完成結果。

代號 基準方法 它回答的問題
B0 永遠預測多數類別 完全不看輸入可以得到多高的最低參照?
B1 部分規則方法;資訊不足時拒答 已能形式化的規則本身可以處理多少案例?
B2 結構化機器學習(Machine Learning, ML) 不使用生成文字時,表格欄位能提供多少訊號?
B3 文字嵌入加結構化特徵 非生成式的文字與表格組合能做到什麼?
B4 本地 LLM,不使用 RAG 外部規則檢索本身帶來多少差異?
B5 平面稠密 RAG 階層、門控、混合檢索與重排序是否超過簡單 RAG?

B4 尤其重要。若完整方法只和其他 RAG 比較,我們最多知道「哪種檢索流程較好」,無法回答外部規則檢索是否比單獨使用相同 LLM 更好。

公平的 B4 比較必須使用同一批測試案例、相同 LLM、相同輸出格式與盡可能一致的提示詞;唯一核心差異是有沒有把檢索證據送進模型。檢索增強生成的原始工作就是把生成模型與外部檢索記憶結合,因此這組對照直接檢查本專案的核心機制。Lewis 等人:Retrieval-Augmented Generation

基準分數高低都不能直接證明臨床安全。B0 可能因第三級樣本很多而取得不差的整體準確率;B1 可能在資料不足時大量拒答。這些行為仍要放回 Day 07 的各級召回、方向、距離、覆蓋與拒答評估中解讀。

控制比較與消融研究,不要全部混成同一個名字

消融研究(Ablation Study)通常從完整方法出發,每次移除一個元件,觀察結果如何改變。這個做法有助於檢查完整系統中的某個元件是否提供可觀察貢獻;相關方法研究也把「移除一部分再觀察表現」用來分析元件重要性。Meyes 等人:Ablation Studies in Artificial Neural Networks

本系列把實驗分成三種用途:

類型 本系列階段 起點 唯一主要變動 能回答的問題
控制比較 A、B、C、D1、D2 一組共同簡化條件 更換同一因子的水準 哪種表示、結構、門控、檢索或重排設定較合適?
移除元件的消融 E 完整方法 每次移除一個元件 完整組合是否依賴這個元件?
生成模型敏感度 F 完整方法與固定提示詞 更換本地生成模型規模 結論是否只在單一生成模型上成立?

下圖是整條實驗路線。先從 A 到 D2 建立可歸因的控制比較,再以 E 從完整方法移除單一元件,最後用 F 檢查生成模型依賴。底部深藍區塊代表開發資料與規則測試集;測試集在設定鎖定後才執行。

實驗路線從查詢表示、文件結構、門控方式、檢索方式與重排序的控制比較,接著進入移除單一元件的消融,再到生成模型敏感度檢查,底部標示開發資料與鎖定測試集

上圖的線性順序是執行與溝通的起點,不表示 A 的最佳水準一定能和 B、C 的最佳水準完美相加。若 E 顯示元件移除效果與前面控制比較不一致,就要把交互作用列為新的待驗證問題,而不是挑一張有利的表報告。

設定檔先寫「打算怎麼比」,執行紀錄再寫「實際怎麼跑」

可重現實驗需要把計畫與執行結果分開:

  • 實驗設定檔先聲明要比較的因子水準、共同條件與執行順序。
  • **執行清單(Run Manifest)**記錄某一次實際執行解析後的資料版本、規則版本、模型名稱、提示詞版本、參數、隨機種子、時間與輸出路徑。

本篇接下來會建立 configs/experiments/day-08-controlled-comparisons.json。JavaScript 物件表示法(JavaScript Object Notation, JSON)是一種以鍵與值儲存結構化資料的純文字格式。這份檔案的 statusplanningto-be-locked 表示版本尚待鎖定,因此不能把它當成完成實驗的紀錄。

先在自己的專案資料夾建立本篇完整檔案

接下來不會要求你前往任何程式碼網站。請在自己的電腦開啟專案資料夾,依下列順序建立檔案;每個程式碼區塊都是該檔案的完整內容,不含省略號。

這份檔案不依賴前一天的程式;只要電腦能執行 Python 3,就能先做 JSON 語法檢查。

先從專案根目錄建立需要的資料夾:

mkdir -p configs/experiments

如果指令沒有印出訊息是正常的。可用 test -d 資料夾路徑 && echo "資料夾已建立" 驗證單一資料夾。接著使用你熟悉的文字編輯器新增各檔案,把對應區塊完整貼入後儲存。

檔案 1:建立 configs/experiments/day-08-controlled-comparisons.json

保存共同條件、A 到 F 控制比較,以及探索性跨模型家族檢查。

請在文字編輯器建立 configs/experiments/day-08-controlled-comparisons.json,貼入以下完整內容並儲存:

{
  "schema_version": "0.2",
  "status": "planning",
  "description": "Day 08 教學用控制比較契約,不代表已完成實驗。",
  "shared_conditions": {
    "dataset_version": "to-be-locked",
    "triage_system_version": "to-be-locked",
    "reference_label_source": "to-be-locked",
    "test_split_id": "locked-test-v1",
    "rulebook_version": "to-be-locked",
    "evaluation_protocol_version": "day-07-v1-planning",
    "top_k": 5,
    "prompt_version": "triage-prompt-v1-planning",
    "model_lock": "configs/models/local-ollama-model-lock.json",
    "generator_model": "qwen3.5:4b-mlx",
    "generator_model_id": "61aa3858e9d3",
    "embedding_model": "qwen3-embedding:4b",
    "embedding_model_id": "df5bd2e3c74c",
    "reranker_model": "online-service-to-be-selected",
    "reranker_model_id": "to-be-locked",
    "reranker_type": "remote_reranking_service_to_be_locked",
    "random_seed": 42
  },
  "stages": [
    {
      "id": "A",
      "name": "查詢表示",
      "fixed": ["flat knowledge base", "dense retrieval", "no gate", "no reranker"],
      "levels": ["raw", "semantic", "dual"]
    },
    {
      "id": "B",
      "name": "文件結構",
      "fixed": ["dual query", "dense retrieval", "no gate", "no reranker"],
      "levels": ["flat", "hierarchical"]
    },
    {
      "id": "C",
      "name": "門控方式",
      "fixed": ["dual query", "hierarchical knowledge base", "dense retrieval", "no reranker"],
      "levels": ["none", "vital_hard", "complaint_soft", "safety_union"]
    },
    {
      "id": "D1",
      "name": "檢索方式",
      "fixed": ["dual query", "hierarchical knowledge base", "safety_union", "no reranker"],
      "levels": ["dense", "hybrid"]
    },
    {
      "id": "D2",
      "name": "重排序",
      "fixed": ["dual query", "hierarchical knowledge base", "safety_union", "hybrid retrieval", "same candidate set"],
      "levels": ["off", "on"]
    },
    {
      "id": "E",
      "name": "移除單一元件",
      "fixed": ["full proposed pipeline"],
      "levels": ["full", "minus semantic", "minus hierarchy", "minus safety union", "minus sparse retrieval", "minus reranker"]
    },
    {
      "id": "F",
      "name": "生成模型敏感度",
      "fixed": ["full proposed pipeline", "fixed prompt"],
      "levels": ["qwen3.5:0.8b-mlx", "qwen3.5:4b-mlx"]
    }
  ],
  "exploratory_checks": [
    {
      "id": "G",
      "name": "跨生成模型家族敏感度",
      "fixed": ["full proposed pipeline", "fixed prompt", "same retrieved evidence", "not used to select the confirmatory model"],
      "levels": ["qwen3.5:4b-mlx", "gemma4:e2b"]
    }
  ],
  "required_baselines": [
    "majority class",
    "partial rule-only",
    "structured machine learning",
    "embedding plus structured features",
    "local language model without retrieval",
    "flat dense retrieval-augmented generation"
  ]
}

儲存後先確認檔名與相對路徑完全一致,再繼續建立下一個檔案。

完成後產生必要檔案並做靜態檢查

以下命令會在需要時產生套件鎖定檔,接著檢查設定格式與 Python 語法;它們不會啟動模型,也不會把病患資料送到網路:

python3 -m json.tool configs/experiments/day-08-controlled-comparisons.json

每個命令都應正常結束。若 JSON 顯示行號,先檢查貼上時是否遺漏逗號、引號或括號;若 py_compile 報錯,先依行號修正縮排或漏貼內容。靜態檢查通過後,再執行本文後面的正式步驟。

接下來用四個步驟檢查這份計畫。

步驟 1:確認工作目錄與檔案位置

  • 目的:避免在錯誤資料夾執行指令。
  • 前置條件:已在自己的電腦建立本系列專案資料夾,並可執行 Python 3。前一節已提供設定檔全文,不需要另外下載程式。
  • 輸入:專案根目錄下的 configs/experiments/day-08-controlled-comparisons.json
  • 操作:先切換到專案根目錄,再確認設定檔存在。
  • 預期輸出:可以在上述路徑看到 JSON 檔案。
  • 驗證方式:若檔案不存在,回到前一節依完整 JSON 內容建立,並確認目前終端機位於專案根目錄;不要只建立沒有內容的同名空檔。

步驟 2:驗證 JSON 語法

在專案根目錄執行下列指令。它只讀取設定檔並檢查語法,不會啟動模型或讀取病患資料。

python3 -m json.tool configs/experiments/day-08-controlled-comparisons.json
  • 目的:先排除缺少逗號、引號或括號等格式問題。
  • 前置條件:步驟 1 已確認目前位於專案根目錄,而且設定檔存在。
  • 輸入:Day 08 的 JSON 設定檔。
  • 操作:Python 內建的 json.tool 解析檔案並格式化輸出。
  • 預期輸出:終端機印出完整且縮排整齊的 JSON,指令正常結束。
  • 驗證方式:若看到行號與語法錯誤,先修正缺少的逗號、引號或括號;不能在語法無效時繼續產生實驗工作。

步驟 3:檢查共同條件是否真的共同

依序檢查 shared_conditions 中的資料版本、檢傷制度版本、參考標籤來源、鎖定測試集識別碼、規則版本、評估流程版本、top_k、提示詞版本、生成模型與隨機種子。每一個階段還要確認 fixed 列出的條件沒有在不同水準中偷偷改變。

  • 目的:確認每組分數差都有單一、可說明的主要變動。
  • 前置條件:設定檔已通過 JSON 語法驗證。
  • 輸入shared_conditions、各階段的 fixedlevels 欄位。
  • 操作:逐階段列出固定條件與因子水準,檢查同一階段是否還有未聲明的改動。
  • 預期輸出:A 到 D2 的每一組比較,都能用一句話指出唯一主要變動。
  • 驗證方式:若一句話中出現「同時也換了……」,就表示比較尚未拆乾淨。

步驟 4:執行前把待鎖定值換成可追溯版本

to-be-locked 只能出現在規劃階段。正式執行前要換成可追溯的資料版本與規則版本;模型、提示詞、索引、程式版本與測試切分也要固定。實際執行後,再由程式產生 Run Manifest,不要用手動複製來假裝紀錄。

  • 目的:讓每份結果都能連回確切輸入與程式狀態。
  • 前置條件:資料、規則、提示詞、模型與測試切分已完成版本化。
  • 輸入:規劃設定檔,以及各項實際版本識別碼。
  • 操作:取代所有待鎖定值;執行時由程式將解析後的完整條件寫入 Run Manifest。
  • 預期輸出:每次執行都有唯一清單,能從結果追到所有輸入版本。
  • 驗證方式:任意抽一份結果,若無法回答「使用哪個測試切分、規則、提示詞與模型」,該次結果就不可重現。

若機器學習實驗沒有保留程式、資料與執行條件,讀者就難以重建同一條比較路徑。Pineau 等人的可重現性計畫報告把「使用相同程式與可取得資料得到相近結果」視為檢查研究發現可靠性的重要步驟,也指出可重現流程有助於減少非預期錯誤。Pineau 等人:Improving Reproducibility in Machine Learning Research

測試集要上鎖,不是在每次看完結果後繼續調參數

開發資料用來選擇查詢表示、前 k 筆數量、文件切分、提示詞與門檻;鎖定測試集只用來做事先指定的最終評估。

如果每看一次測試結果就回頭修改 top_k、提示詞或門控門檻,再重新測到滿意為止,測試集實際上已參與開發。即使每次都沒有直接訓練模型,反覆且自適應地使用保留資料(Holdout Data)仍可能對同一批資料過度適配;相關研究專門分析了重複使用保留資料所造成的風險。Dwork 等人:Generalization in Adaptive Data Analysis and Holdout Reuse

本系列的做法是:

  1. 在開發資料與規則測試集上完成除錯、選擇與流程修正。
  2. 鎖定設定檔、程式版本與主要指標。
  3. 執行共同測試集,保留成功與失敗結果。
  4. 若測試結果促成新設計,就把它標成下一輪假設,使用新的評估計畫,而不是回寫原本的預先比較。

「鎖定」不是永遠不能改進系統,而是不能一邊偷看同一份考卷,一邊把改過的答案包裝成第一次作答。

Top-k 候選不是 k 個最終答案

前 k 筆候選(Top-k Candidates)是檢索或排序階段保留的前 k 個候選。k 只表示保留數量,不是樣本總數,也不是模型同時下了 k 個正式判定。本系列統一使用 Top-k,避免用 N 同時表示候選數與測試樣本數。

Top-1 是排序第一的候選,可用來分析最終方向;Top-k 則主要報告候選覆蓋率(Candidate Coverage),也就是正確級數或正確證據是否仍在候選集合中。

若要描述候選集合的錯誤方向,只分「全部偏高」與「全部偏低」仍不完整。假設參考級數 y = 3,而且正確級數不在候選中:

候選 {4, 5}:純檢傷不足候選,全部數字都比參考級數大
候選 {1, 2}:純檢傷過度候選,全部數字都比參考級數小
候選 {2, 4, 5}:跨側錯誤,候選同時落在參考級數兩側

公式中的 y 代表參考級數。因為五級數字越小越急迫,候選數字全都大於 y 表示全部偏向較不急;全都小於 y 表示全部偏向較急。第三種集合沒有單一方向,因此不能硬塞進前兩類。

跨側錯誤(Straddling Error)是本系列用於候選稽核的名稱,不是通用臨床標準。它的條件是:正確級數不在候選集合中,而且最小候選小於參考級數、最大候選大於參考級數。

下圖把三種集合放在同一條五級軸線上。請先找黑色箭頭所指的參考第 3 級,再看被外圈標記的候選落在哪一側。

三個五級候選集合範例都以第 3 級為參考,左圖候選為第 4 與第 5 級,中圖候選為第 1 與第 2 級,右圖候選同時包含第 2、第 4 與第 5 級

上圖使用合成集合示範候選落點,不是實驗結果。若候選是 {2, 3, 5},雖然同時出現在參考級數兩側,但第 3 級已被找回,所以這是候選覆蓋成功,不屬於跨側錯誤。最終系統是否判成第 3 級,還要看重排序與生成階段,不能由候選集合直接推定。

因此報告要分成三層:

  1. 候選層:Top-k 是否覆蓋正確級數或正確規則,以及未覆蓋時屬於哪種候選錯誤。
  2. 排序層:正確候選出現在第幾名,重排序前後是否移動。
  3. 最終輸出層:Top-1 或模型最終級數的檢傷不足、檢傷過度與距離。

這三層輸出不能互相代替。候選覆蓋成功只證明正確資訊沒有在檢索階段消失,不代表模型一定採用它;最終答案正確也不代表檢索可靠,因為模型可能忽略錯誤證據後碰巧答對。

常見的五個誤解

「我比較了三套完整系統,所以等於比較三個因子」

系統數量不等於因子數量。每套系統可能同時改變查詢、文件、門控、檢索與重排序;必須先畫因子矩陣才能知道改了幾項。

「一次只改一項,就證明這個元件永遠有效」

控制比較只能支持指定共同條件下的效果。元件之間可能存在交互作用,換到其他文件結構、資料集或生成模型後仍需驗證。

「只要移除某個東西,都叫消融」

A 到 D2 是在共同條件下更換因子水準;E 才是從完整方法移除單一元件;F 是模型敏感度檢查。名稱分清楚,讀者才知道比較的起點與問題。

「完整方法勝過最簡單方法,就不用其他基準」

最簡單基準只能說明完整方法超過最低參照。沒有結構化 ML、不使用 RAG 的 LLM 與平面 RAG 等中間基準,就無法知道提升來自生成、檢索、結構還是額外複雜度。

「Top-k 都比參考級數更大或更小,所以方向一定能二分」

候選可能同時落在參考級數兩側,也可能已包含正確級數。候選層要先報覆蓋,再將未覆蓋集合拆成純單側與跨側錯誤;最終方向仍由 Top-1 或最終輸出判定。


本日小結

今天沒有訓練模型,也沒有產生效能排行榜。我們完成的是一份能讓後續結果被解釋的實驗骨架:

  1. 完整系統比較只能回答整組方案誰高誰低,不能自動解釋單一元件。
  2. 查詢表示、文件結構、門控、檢索與重排序必須拆成可控制的實驗因子。
  3. D 階段要拆成 D1 檢索方式與 D2 重排序,避免把候選產生和候選重排混在一起。
  4. A 到 D2 是控制比較,E 是移除單一元件的消融,F 是生成模型敏感度檢查。
  5. B0 到 B5 的基準分別回答最低參照、規則、結構化學習、非生成組合、無檢索生成與簡單 RAG 的價值。
  6. Top-k 主要報候選覆蓋,Top-1 分析最終方向;跨側錯誤補上無法二分的候選集合。
  7. 設定檔先固定計畫,Run Manifest 再記錄實際執行;測試集不能一邊查看一邊調整。

這些設計提升的是結果的可解釋性與可重現性,不是臨床部署資格。系統仍定位為臨床決策支援候選,不能取代醫師、護理師與正式檢傷流程。

下一篇預告

Day 08 已經把模糊的「三套架構誰最好」拆成可以控制的實驗因子。Day 09 會把每一項比較再寫成明確的研究問題、預先假設、主要指標與可被資料否定的判準。

換句話說,今天決定「一次只動哪一顆旋鈕」;下一篇要決定「動完之後,看到什麼才算支持或不支持原本的想法」。


參考資料

  1. Lewis, P., et al. (2020). 知識密集型自然語言處理任務的檢索增強生成.
  2. National Institute of Standards and Technology. Glossary of Experimental Design Terminology.
  3. National Institute of Standards and Technology. Experiments and Experimental Design.
  4. Pineau, J., et al. (2021). Improving Reproducibility in Machine Learning Research.
  5. Dwork, C., et al. (2015). Generalization in Adaptive Data Analysis and Holdout Reuse.
  6. scikit-learn developers. DummyClassifier.
  7. Meyes, R., et al. (2019). Ablation Studies in Artificial Neural Networks.

上一篇
Day 07|整體準確率為什麼不夠?先建立急診檢傷評估地圖
下一篇
Day 09|不要只問哪個最好:把研究問題寫成可驗證的假設
系列文
30 天打造公開資料版急診檢傷系統:Side Project 與實驗計畫17
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言