Skip to content

ericsson-kuma/SPML-final-project

Repository files navigation

LLM-as-a-Judge 對抗攻擊與防禦研究

SPML 期末專案

最後更新: 2025-12-08
目前狀態: 主要實驗完成,消融實驗待執行


📋 專案概述

本專案研究 LLM-as-a-Judge 系統的安全性問題,設計並實作:

  1. 通用對抗短語攻擊 - 不需知道具體評分任務,可系統性提升劣質回答的評分
  2. 輕量級防禦策略 - 包含 Guard Suffix、Order Consistency Check 等多種防禦方法

📁 專案結構

SPML final project/
├── README.md              # 本說明文件
├── requirements.txt       # Python 依賴套件
├── proposal.md            # 專案提案
├── projectroad1.md        # 開發路線圖 1
├── projectroad2.md        # 開發路線圖 2
│
├── src/                   # 核心模組
│   ├── judge.py           # LLM 評審模型 (JudgeModel 類別)
│   ├── attack.py          # 基礎攻擊方法
│   ├── attack_advanced.py # 進階攻擊 (5種策略)
│   ├── defense.py         # 基礎防禦方法
│   ├── defense_advanced.py# 進階防禦 (6+種策略)
│   └── metric.py          # 評估指標工具
│
├── data/                  # 資料集
│   ├── test.jsonl         # 原始測試資料 (10筆)
│   └── tasks_extended.jsonl # 擴展資料集 (68筆, 8類任務)
│
├── evaluate.py            # 基礎評估腳本
├── evaluate_enhanced.py   # 增強版評估腳本 (支援多策略)
├── ablation.py            # 消融實驗腳本
├── plots.py               # 視覺化圖表生成
├── generate_report.py     # 報告生成器
├── run.py                 # 一鍵執行腳本
│
└── runs/                  # 實驗結果
    ├── exp_final/         # 主要實驗結果 ✓
    │   ├── baseline.csv   # 基準評分
    │   ├── attacked.csv   # 攻擊後評分
    │   ├── defended.csv   # 防禦後評分
    │   ├── attack_phrase.txt # 最佳攻擊短語
    │   ├── summary.json   # 結果摘要
    │   ├── report.md      # 實驗報告
    │   └── plots/         # 視覺化圖表 (6張)
    └── final_report.md    # 最終報告模板

🚀 快速開始

1. 安裝依賴

pip install -r requirements.txt

注意: NumPy 需使用 1.x 版本 (已在 requirements.txt 中指定)

pip install "numpy<2"  # 如遇到錯誤請執行此命令

2. 執行主要實驗

# 使用預設模型 (Qwen2.5-0.5B-Instruct)
python evaluate.py --model "Qwen/Qwen2.5-0.5B-Instruct" --device cuda --out runs/new_exp

# 或使用一鍵執行腳本 (包含完整流程)
python run.py --model "Qwen/Qwen2.5-0.5B-Instruct" --run-name my_experiment

3. 執行消融實驗 (待執行)

python ablation.py --model "Qwen/Qwen2.5-0.5B-Instruct" --device cuda --out runs/ablation

4. 生成視覺化圖表

python plots.py --run runs/exp_final --out runs/exp_final/plots

5. 生成報告

python generate_report.py --type final --results runs/exp_final --output runs/exp_final/report.md

📊 目前實驗結果 (exp_final)

指標 數值 說明
攻擊短語 "Outstanding quality" 搜尋 30 次迭代找到
分數提升 (Δscore) +0.289 攻擊後絕對評分平均提升
翻轉率 (Flip Rate) 0.0% 配對比較選擇翻轉比例
防禦拒絕率 59.4% (38/64) 防禦過於激進,需調整

⚠️ 已知問題

  • 防禦過於激進: OCC+GS 組合導致約 60% 的樣本被拒絕
  • 建議: 可嘗試只使用 Guard Suffix (GS) 或調低 OCC 閾值

🔧 核心模組說明

src/judge.py - LLM 評審模型

from src.judge import JudgeModel, GenConfig

judge = JudgeModel("Qwen/Qwen2.5-0.5B-Instruct", device="cuda")
score, raw = judge.score_absolute(instruction, response)  # 絕對評分
choice, raw = judge.choose_pairwise(instruction, resp_a, resp_b)  # 配對比較

src/attack_advanced.py - 攻擊策略

支援 5 種策略:

  • hill_climb: 迭代式優化 (預設)
  • greedy: 貪婪搜尋
  • random: 隨機採樣
  • semantic: 語義模板攻擊
  • ensemble: 組合策略

src/defense_advanced.py - 防禦策略

支援 6+ 種策略:

  • guard_suffix (GS): 添加防禦指令
  • occ: Order Consistency Check
  • occ_gs: 結合 OCC 和 GS
  • sanitization: 輸入過濾
  • multi_round: 多輪投票
  • ensemble: 組合防禦

📈 視覺化圖表 (已生成)

位於 runs/exp_final/plots/:

  1. exp_final_score_dist.png - 分數分佈圖
  2. exp_final_attack_impact.png - 攻擊效果對比
  3. exp_final_defense_effect.png - 防禦效果分析
  4. exp_final_task_analysis.png - 任務類別分析
  5. exp_final_latency.png - 延遲統計
  6. exp_final_dashboard.png - 綜合儀表板

✅ 已完成工作

  • 擴展資料集 (68 筆, 8 類任務)
  • 進階攻擊模組 (5 種策略)
  • 進階防禦模組 (6+ 種策略)
  • 視覺化模組 (6 種圖表)
  • 消融實驗腳本
  • 報告生成器
  • 主要實驗執行完成
  • 視覺化圖表生成

⏳ 待完成工作

  • 消融實驗: 比較不同攻擊/防禦策略效果

    python ablation.py --model "Qwen/Qwen2.5-0.5B-Instruct" --device cuda --out runs/ablation

    預計耗時: 30-60 分鐘

  • 調整防禦參數: 降低拒絕率

    • 修改 evaluate.py 中的防禦策略設定
    • 可嘗試只用 guard_suffix 而非 occ_gs
  • 完善最終報告: 加入消融實驗結果

    python generate_report.py --type final --results runs/exp_final --output final_report.md
  • 測試其他模型 (可選):

    • Llama-3.2-1B-Instruct
    • Phi-3-mini
    • 其他開源 LLM

🖥️ 運行環境

項目 版本/規格
Python 3.11
GPU NVIDIA GeForce RTX 3090
PyTorch 2.x (CUDA)
transformers latest
NumPy 1.26.4 (需 < 2.0)

📝 接手須知

  1. 環境設置: 確保 NumPy < 2.0,否則會有 scipy/sklearn 相容性問題
  2. 模型快取: Qwen2.5-0.5B-Instruct 已下載在 HuggingFace 快取中 (~988MB)
  3. GPU 記憶體: 0.5B 模型約需 2-3GB VRAM
  4. 實驗時間:
    • 主要實驗 (30 iterations): ~5-6 分鐘
    • 消融實驗 (完整): ~30-60 分鐘

📞 聯絡方式

如有問題請聯繫專案成員。


最後更新: 2025-12-08 00:35

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors