| 版本 | 預測數 | Private | Public | 平均 | 策略說明 |
|---|---|---|---|---|---|
| test_full_union.csv | 23 | 0.2000 ⭐ | 0.1923 | 0.1962 | 全部模型聯集 |
| test_union_gemini3_deepseek.csv | 15 | 0.1176 | 0.2127 | 0.1652 | Gemini3 + DeepSeek 聯集 |
| test_vote_ensemble.csv | 14 | 0.0000 | 0.2127 | 0.1064 | 多模型投票 (≥2票採用) |
| test_intersection_deepseek_gemini3.csv | - | 0.0000 | 0.1463 | 0.0732 | DeepSeek ∩ Gemini3 交集 |
| test_v64_selective_merge_gemini3.csv | 9 | - | 0.1904 | - | 歷史最佳單模型 |
理由:
- Private Score 最高 (0.2000):這是實際競賽評分的關鍵
- 平均分數最佳 (0.1962):整體表現最穩定
- 召回策略勝出:雖然 Public Score 略低,但更多的預測在 Private Set 中獲得更好回報
test_vote_ensemble.csv和test_union_gemini3_deepseek.csvPublic Score 都很高 (0.2127)- 但它們的 Private Score 差異極大 (0.0000 vs 0.1176)
- 結論:高召回的全聯集策略在 Private Set 更有泛化能力
策略:優先使用 Gemini3 的預測,其次用 DeepSeek 補充
# 優先順序: Gemini3 > DeepSeek
if gn_code:
ensemble[id] = gn_pred # 使用 Gemini3 的 bbox
elif ds_code:
ensemble[id] = ds_pred # 使用 DeepSeek 的預測來源模型:
- Gemini3:
test_v64_selective_merge_gemini3.csv(歷史最佳,9 predictions) - DeepSeek:
test_deepseek_th060_llm8.csv(13 predictions)
策略:多模型投票,如果 ≥2 個模型預測相同 code 則採用
# 收集 4 個模型的預測
models = ['DeepSeek', 'Gemini3', 'Gemma3-llm8', 'Gemma3-llm9']
# 只有當 ≥2 模型同意時才採用
# 優先使用 Gemini3 的 bbox,其次 DeepSeek
if votes >= 2:
ensemble[id] = prediction
elif model == 'Gemini3': # Gemini3 獨有也採用
ensemble[id] = gn_pred策略:全部模型的聯集(高召回策略)
# 優先順序: Gemini3 > DeepSeek > Gemma3-llm9 > Gemma3-llm8
# 任何模型有預測就採用
for model in ['Gemini3', 'DeepSeek', 'Gemma3-llm9', 'Gemma3-llm8']:
if model_has_prediction(id):
ensemble[id] = prediction
break來源模型:
- Gemini3:
test_v64_selective_merge_gemini3.csv(9 predictions) - DeepSeek:
test_deepseek_th060_llm8.csv(13 predictions) - Gemma3-llm9:
test_v74_gemma3_th060_llm9.csv(12 predictions) - Gemma3-llm8:
test_v73_gemma3_th060_llm8.csv(17 predictions)
為什麼這個策略最好?
- 較高的召回率覆蓋了更多 Private Set 中的正確答案
- 雖然會引入一些錯誤,但整體 True Positives 增加更多
- 證明了「寧可多預測」在這個任務中是較好的策略
ESG Report Page + SASB Metrics
│
▼
┌─────────────────────────┐
│ 1. Bi-Encoder │ BAAI/bge-m3
│ (語義相似度檢索) │ score_threshold = 0.60
└─────────────────────────┘
│
▼
┌─────────────────────────┐
│ 2. Cross-Encoder │ BAAI/bge-reranker-v2-m3
│ (重排序) │ reranker_top_k = 9
└─────────────────────────┘
│
▼
┌─────────────────────────┐
│ 3. LLM Scoring │ DeepSeek-R1 / Gemma3 / Gemini3
│ (相關性評分 1-10) │ llm_threshold = 7-8
└─────────────────────────┘
│
▼
┌─────────────────────────┐
│ 4. BBox Processing │ Merge / Expand
│ (邊界框處理) │
└─────────────────────────┘
│
▼
Predictions
# config.py 關鍵參數
# Retrieval
score_threshold = 0.60 # 相似度閾值
score_threshold_english = 0.6 # 英文閾值
# LLM
llm_threshold = 7-8 # LLM 信心閾值
llm_model = "deepseek-r1:14b" # 或 "gemma3:12b"
# BBox
horizontal_spread_threshold = 200
max_merged_ratio = 0.50
min_bbox_area = 25000IR/
├── main.py # 主程式入口
├── config.py # 配置管理
├── data/
│ ├── train.json # 訓練資料 (151 samples)
│ ├── test.json # 測試資料 (72 samples)
│ ├── processed/
│ │ ├── esg_segments_v2.jsonl # ESG 段落
│ │ ├── esg_segments_v4.jsonl # 補充段落
│ │ └── sasb_metrics.json # SASB 指標
│ ├── reports/ # ESG 報告 PDFs
│ └── sasb/ # SASB 標準文件
├── scripts/ # 前處理腳本
├── results/ # 推理結果
└── FINAL_SUMMARY.md # 本文件
- Baseline (v64, Gemini3): F1 = 0.1904
- DeepSeek R1 單獨: 13 predictions
- Gemma3 系列: llm_threshold 7-9 實驗
- Ensemble 策略:
- 聯集 (Union): Gemini3 + DeepSeek = 0.2127 ⭐
- 投票 (Vote): 多模型共識 = 0.2127 ⭐
- 全聯集: 過度召回 = 0.1923 ❌
- 高召回策略勝出:
test_full_union.csv的全聯集策略在 Private Set 表現最佳 - Public Score ≠ 最終結果:在 Public 表現最好的版本 (0.2127) 在 Private 反而不佳
- Ensemble 策略有效:結合多個模型的預測比單一模型更有泛化能力
- 最佳配置:4 模型全聯集,優先順序 Gemini3 > DeepSeek > Gemma3
- Private Score: 0.2000 (test_full_union.csv)
- Public Score: 0.1923 (test_full_union.csv)
- 平均: 0.1962
- 相較 Baseline (0.1904) 提升: 5.0%
- 嘗試更多 LLM 模型 (GPT-4, Claude)
- 訓練專用的 SASB-ESG 匹配模型
- 改進 BBox 後處理邏輯
- 增加資料增強策略
- 調整召回/精確度平衡:根據此次經驗,傾向更高召回的策略