iT邦幫忙

2026 iThome 鐵人賽

DAY 23
0
AI Engineering

AI Engineering 研究前線:30 天讀懂一週一週長出來的技術脈絡系列 第 25 篇

Day25 - 前十名找回九成證據,仍有一題零召回

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20261009/20183478N5CdUrv4lB.png

Day 24 我把 1,720 份 Kubernetes 文件切成 chunks、建立 FTS5 索引,也量了索引大小和查詢延遲。今天沿用 Day 22 的十道問題,確認搜尋結果前幾名有沒有答案所需的 chunks。

搜尋速度和證據命中率是兩回事,得分開量。我把人工標記的支援 chunks 當作答案證據,另外記錄每題的搜尋延遲。

先標記答案真正需要的 chunks

data/benchmark.jsonl 記錄十題中文問題、預期答案與 Kubernetes 來源章節。新建的 data/day25-retrieval-queries.json 為每題固定一組英文搜尋詞,並列出直接支持預期答案的 gold_chunk_ids。我逐題對照 Day 22 標記的來源章節和切塊內容。結果即使來自同一份文件,只要沒命中標記的段落,就不算找到證據。

Kubernetes 語料是英文,現有 FTS5 也依關鍵字搜尋,所以查詢詞固定用英文。題目仍保留中文;這次沒有把題目翻譯成英文,也沒有請模型改寫查詢詞。查詢器會用 AND 組合搜尋詞,因此每個詞都必須出現在同一個 chunk 裡。

每題的 Recall@K,是前 K 個結果命中的 gold chunks 數量,除以該題標記的 gold chunks 總數。平均 Recall@K 是十題分數的算術平均,每題權重相同。Recall@K 的 K 固定為 1、3、5、10。每題先暖身一次,再依固定順序量 20 輪。這次只量測既有的搜尋流程;索引沒有重建,也沒有呼叫 Qwen 生成答案。

平均 Recall@10 為 0.900,十題中有九題找齊證據

完整索引有 1,720 份文件、36,807 個 chunks。下表列出十題的平均 Recall@K,以及前 K 名已包含全部必要 gold chunks 的題數。

K 平均 Recall@K 找齊所有 gold chunks 的題目
1 0.500 5/10
3 0.800 8/10
5 0.850 8/10
10 0.900 9/10

k8s-005 需要 ConfigMap 和 Secret 兩段證據。查詢 ConfigMap confidential data 把它們排在第 4 和第 8 名。前五名只命中第一段,所以 Recall@5 是 0.5;到前十名兩段都出現,Recall@10 才是 1.0。

k8s-007 則完全沒找回標記的證據段落:查詢 PersistentVolumeClaim storage 的前十名,兩個說明 PV 與 PVC 定義的 gold chunks 都沒有出現。前十名裡有同一份來源文件的其他 chunks,單看檔名很容易以為找對了。對照段落 ID 才看得出來,它們不是這題標記的證據;因此 K=10 的 Recall 仍是 0。把搜尋結果上限調到 100 後,兩個 gold chunks 才分別出現在第 65 和第 87 名。

搜尋不到證據,延遲仍低於一毫秒

200 次正式查詢中,p50 是 0.199 毫秒,p95 是 0.354 毫秒。計時從查詢解析開始,包含 SQLite 連線、MATCH、BM25 排序、讀取結果和轉成 Python 物件。不含索引建置與模型生成。量測環境為 Apple M5、32 GiB 記憶體、Python 3.13.15、SQLite 3.53.1。

這次只有十道題,搜尋詞是為英文語料人工挑選,每題標記一到兩個段落。結果只代表這批語料、查詢和標記方式,不能用來推論中文檢索或一般問題的表現。

重跑檢索評估

以下指令從 Repository 根目錄執行,依序用 Day 23 raw 建立 manifest、索引並執行評估器。執行前,tokenizer 必須已在本機快取。

mkdir -p data/day25/reproduction

HF_HUB_OFFLINE=1 uv run python knowledge/ingest.py \
  --raw-dir data/day23/results/raw \
  --output data/day25/reproduction/manifest.json \
  --tokenizer mlx-community/Qwen3.8-27B-4bit \
  --max-tokens 160 --overlap-tokens 24

HF_HUB_OFFLINE=1 uv run python knowledge/retrieve.py \
  --manifest data/day25/reproduction/manifest.json \
  --database data/day25/reproduction/retrieval.sqlite

HF_HUB_OFFLINE=1 uv run python knowledge/benchmark_retrieval.py \
  --manifest data/day25/reproduction/manifest.json \
  --database data/day25/reproduction/retrieval.sqlite \
  --output data/day25/reproduction/summary.json

評估器先核對索引與 manifest 的 chunk ID、來源和文字 hash,再確認每個 gold chunk 都對應到題集標記的來源。結果摘要存於 data/day25-retrieval-summary.json。本機重跑產物放在 data/day25/reproduction/,不加入 Git。

來源


上一篇
Day24 - 1,720 份文件建成索引,現有流程跑得動
系列文
AI Engineering 研究前線:30 天讀懂一週一週長出來的技術脈絡 共 25 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言