回顧週一的假設
賭的是「檢索增強才有解」——沒有檢索,模型只能靠參數內記憶硬猜。地板是 20 萬次蒙地卡羅模擬驗證過的隨機猜測基準:0.367。
結果對比表
| route | 分數 | 說明 |
|---|---|---|
| Route A(零樣本,無檢索) | 0.88500 | Qwen3-8B(GGUF Q4_K_M),本地 M1,296.1 秒跑完 200 題 |
| Route B(TF-IDF RAG) | 0.53250 | 270K 篇 Wikipedia STEM 語料庫檢索 + 相似度評分,Kaggle CPU kernel |
| 隨機猜測地板 | 0.367 | 理論值 11/30,20 萬次蒙地卡羅模擬驗證 |
賽前賭檢索會贏,結果零樣本用 0.885 打贏 TF-IDF 檢索的 0.5325,整整贏了 0.3525 分。
關鍵發現
反轉一:沒有檢索,模型反而答得更好。 Qwen3-8B 零樣本直接拿下 0.885,逼近滿分,遠高於原本預期的「只能瞎猜」。合理解釋有兩個:這批 STEM 選擇題本身在模型預訓練語料的常見知識範圍內,不需要外部段落也答得出來;或者 GPT-3.5 出題時混淆選項的難度不夠高,模型光靠常識就能排除干擾項。
反轉二:TF-IDF 檢索反而拖累分數。 Route B 雖然遠贏隨機猜測地板(0.5325 vs 0.367),但比零樣本整整低了 0.3525。原因不難理解:Route B 沒有 LLM 做推理去消化檢索到的內容,純粹用 TF-IDF 相似度幫 5 個選項打分排序——檢索到的段落只要字面上跟某個干擾選項相似,就會誤導排序。這是「有檢索」跟「有沒有 reasoning 消化檢索內容」的差距,不是檢索這件事本身沒用。
反轉三:高分背後不是背答案。 0.885 這麼高的零樣本分數,很自然會讓人懷疑是不是背過答案——train.csv 從 2023 年上線起就公開,Qwen3-8B(2025 年發布)的訓練資料很可能涵蓋這批已流傳兩年多的 Q&A。用兩個獨立訊號查證:逐字接龍探測(給題目開頭,看模型能不能一字不差接出選項原文)0/30 命中,30 題裡最高相似度只有 0.368,遠低於 0.90 的命中門檻;perplexity 配對 t 檢定(原文 vs 手寫改寫版)得到 t=-2.677,單尾 p=0.994,方向甚至跟「背過」的預測相反。兩個訊號都落在「沒有污染證據」——0.885 是真材實料的科學知識,不是背答案。
結論與適用場景
- 這類科學選擇題,先試零樣本再加檢索。 檢索增強不是萬靈丹——如果底層模型本身在該領域知識夠紮實,粗糙的檢索反而會引入雜訊,拖累答對率。
- 簡單的 TF-IDF 檢索需要搭配 reasoning,不能只靠相似度排序。 Route B 的分數之所以不如預期,問題不在「有沒有檢索」,而在「檢索到的內容有沒有被消化」——這正是下週要優化的方向。
- 懷疑高分是背答案時,直接設計可驗證、門檻先講好的測試去查,不要用猜的。 逐字接龍加 perplexity 配對比較這兩個訊號,任何人都能在自己的模型上重跑一遍。
本週剩餘拆解預告
週四拆解記憶體污染檢測的完整方法論——逐字接龍怎麼設計判定門檻、perplexity 配對 t 檢定怎麼跑;週五講一段技術冒險:試著把 Route A 也送上 Kaggle 拿排行榜分數,結果一頭撞進 GGUF 量化模型在 transformers 底下解量化到一半整個 kernel 崩潰的故事,以及這對「為什麼 llama.cpp 能在本地又快又省記憶體」這件事的啟發。