Skip to content

Latest commit

 

History

History
198 lines (156 loc) · 6.62 KB

File metadata and controls

198 lines (156 loc) · 6.62 KB

ESG-SASB Matching System - 最終實驗總結

📊 最終成績 (含 Private/Public Score)

版本 預測數 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 - 歷史最佳單模型

🏆 最終選擇:test_full_union.csv

理由

  • Private Score 最高 (0.2000):這是實際競賽評分的關鍵
  • 平均分數最佳 (0.1962):整體表現最穩定
  • 召回策略勝出:雖然 Public Score 略低,但更多的預測在 Private Set 中獲得更好回報

📉 有趣發現

  • test_vote_ensemble.csvtest_union_gemini3_deepseek.csv Public Score 都很高 (0.2127)
  • 但它們的 Private Score 差異極大 (0.0000 vs 0.1176)
  • 結論:高召回的全聯集策略在 Private Set 更有泛化能力

🔬 最終 Ensemble 版本產生方式

1. test_union_gemini3_deepseek.csv (15 predictions, F1=0.2127)

策略:優先使用 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. test_vote_ensemble.csv (14 predictions, F1=0.2127)

策略:多模型投票,如果 ≥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

3. test_full_union.csv (23 predictions, Private=0.2000 ⭐ BEST)

策略:全部模型的聯集(高召回策略)

# 優先順序: 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)

為什麼這個策略最好?

  1. 較高的召回率覆蓋了更多 Private Set 中的正確答案
  2. 雖然會引入一些錯誤,但整體 True Positives 增加更多
  3. 證明了「寧可多預測」在這個任務中是較好的策略

🏗️ 系統架構

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 = 25000

📁 專案結構

IR/
├── 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        # 本文件

📈 實驗歷程

  1. Baseline (v64, Gemini3): F1 = 0.1904
  2. DeepSeek R1 單獨: 13 predictions
  3. Gemma3 系列: llm_threshold 7-9 實驗
  4. Ensemble 策略:
    • 聯集 (Union): Gemini3 + DeepSeek = 0.2127
    • 投票 (Vote): 多模型共識 = 0.2127
    • 全聯集: 過度召回 = 0.1923 ❌

🎯 結論

  1. 高召回策略勝出test_full_union.csv 的全聯集策略在 Private Set 表現最佳
  2. Public Score ≠ 最終結果:在 Public 表現最好的版本 (0.2127) 在 Private 反而不佳
  3. Ensemble 策略有效:結合多個模型的預測比單一模型更有泛化能力
  4. 最佳配置: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%

🔜 未來改進方向

  1. 嘗試更多 LLM 模型 (GPT-4, Claude)
  2. 訓練專用的 SASB-ESG 匹配模型
  3. 改進 BBox 後處理邏輯
  4. 增加資料增強策略
  5. 調整召回/精確度平衡:根據此次經驗,傾向更高召回的策略