A newer version of the Gradio SDK is available: 6.13.0
metadata
title: BERT 乳癌存活預測系統
emoji: 🥼
colorFrom: blue
colorTo: green
sdk: gradio
sdk_version: 4.44.0
app_file: app.py
pinned: false
🥼 BERT 乳癌存活預測 - 二次微調完整平台 (含 ChatGPT 整合)
📋 更新內容
✅ 新增功能
- 💬 AI 助手頁面: 與 ChatGPT 互動,獲得專業建議
- 🔮 預測結果討論: 在預測頁面下方可以討論預測結果
- 🔑 全域 API Key 管理: 一次設定,全系統可用
⚠️ 重要說明
- 您的原始計算程式碼完全沒有修改
- 所有訓練、評估、預測邏輯保持不變
- 僅新增了 ChatGPT 互動功能作為輔助工具
🚀 安裝步驟
1. 安裝依賴套件
pip install -r requirements.txt
2. 取得 OpenAI API Key
- 前往 OpenAI Platform
- 登入您的帳號
- 建立新的 API Key
- 複製 API Key (格式: sk-...)
3. 啟動應用程式
python app.py
📖 使用指南
步驟 0: 設定 API Key (新增)
- 打開應用程式後,在最上方找到「🔑 API 設定」區域
- 輸入您的 OpenAI API Key
- 點擊「💾 儲存 API Key」
- 看到 ✅ 成功訊息後,即可在所有頁面使用 AI 助手
步驟 1: 第一次微調 (原功能)
- 上傳訓練數據 A (CSV 格式: Text, label)
- 選擇微調方法 (Full Fine-tuning / LoRA / AdaLoRA)
- 調整訓練參數
- 開始訓練
- 系統會自動比較純 BERT vs 第一次微調的表現
步驟 2: 二次微調 (原功能)
- 選擇已訓練的第一次微調模型
- 上傳新的訓練數據 B
- 調整訓練參數
- 開始訓練
步驟 3: 新數據測試 (原功能)
- 上傳測試數據 C
- 選擇要比較的模型
- 系統會並排顯示三個模型的表現
步驟 4: 模型預測 (原功能 + 新增 AI 討論)
- 選擇任一已訓練模型
- 輸入病歷文本
- 查看預測結果
- 【新增】在下方與 AI 討論預測結果
步驟 5: AI 助手 (新增功能)
- 在「💬 AI 助手」頁面與 ChatGPT 互動
- 詢問關於模型訓練、參數調整的問題
- 使用快速問題按鈕快速了解概念
🤖 AI 助手功能
💬 通用 AI 助手
位置: 「💬 AI 助手」頁面
功能:
- 解釋訓練結果和評估指標
- 提供參數調整建議
- 解答 LoRA、AdaLoRA 等方法的問題
- 回答醫療 AI 相關問題
快速問題:
- 什麼是二次微調?
- LoRA vs AdaLoRA 差異?
- 如何選擇最佳化指標?
- 參數調整建議
- 如何避免過度擬合?
🔮 預測結果討論
位置: 「4️⃣ 模型預測」頁面下方
功能:
- 分析病歷中的關鍵醫療指標 (ER, PR, HER2, 腫瘤分期等)
- 解釋這些指標如何影響預後
- 說明為什麼模型會做出特定預測
- 比較未微調和微調模型的預測差異
快速問題:
- 分析這位病患的病歷
- 為什麼模型預測死亡/存活?
- 關鍵預後因子是什麼?
- 兩個模型預測為何不同?
- 這個預測可靠嗎?
AI 醫療知識庫:
- ER/PR 陽性: 預後較好,可用荷爾蒙治療
- HER2 陽性: 需要標靶治療
- 三陰性乳癌 (ER-, PR-, HER2-): 預後較差
- 腫瘤分期: Stage I/II 較好,Stage III/IV 較差
- 淋巴結轉移: 有轉移預後較差
📊 原有功能 (完全保留)
資料格式
CSV 檔案必須包含:
- Text: 病歷文本 (英文)
- label: 標籤 (0=存活, 1=死亡)
微調方法比較
| 方法 | 參數量 | 訓練速度 | 記憶體使用 | 效果 |
|---|---|---|---|---|
| Full Fine-tuning | 100% | 1x (基準) | 高 | 最佳 |
| LoRA | ~1% | 3-5x 快 | 低 | 良好 |
| AdaLoRA | ~1% | 3-5x 快 | 低 | 良好 |
評估指標
| 指標 | 說明 |
|---|---|
| F1 Score | 精確率和召回率的調和平均 |
| Accuracy | 整體準確率 |
| Precision | 預測為死亡中的準確率 |
| Recall/Sensitivity | 實際死亡中被識別的比例 |
| Specificity | 實際存活中被識別的比例 |
| AUC | ROC 曲線下面積 |
💡 使用範例
與 AI 討論預測結果
用戶輸入病歷:
45-year-old female with ER-, PR-, HER2- triple-negative breast cancer,
Stage III, lymph node positive, tumor size 4.5cm
用戶提問: "為什麼模型預測死亡風險高?"
AI 可能回答:
這位病患呈現多個預後較差的因子:
1. **三陰性乳癌** (ER-, PR-, HER2-):
這是預後最差的亞型,因為無法使用荷爾蒙治療或HER2標靶治療
2. **Stage III**:
屬於局部晚期,相比早期乳癌預後較差
3. **淋巴結陽性**:
表示癌細胞已擴散,增加復發風險
4. **腫瘤較大** (4.5cm):
較大的腫瘤與較差的預後相關
因此模型預測死亡風險較高是合理的。建議積極的化療方案...
🔧 技術細節
新增的程式碼
全域 API Key 管理
GLOBAL_API_KEY = None def set_global_api_key(api_key): global GLOBAL_API_KEY GLOBAL_API_KEY = api_key.strip() if api_key else NoneChatGPT 互動函數
def chat_with_gpt(message, history, api_key, context=""): # 與 ChatGPT API 互動 # 支援對話歷史和上下文預測結果討論函數
def chat_about_prediction(message, history, api_key, patient_text, baseline_result, finetuned_result): # 專門針對預測結果的討論 # 包含醫療知識庫
原始程式碼保護
✅ 完全保留的函數 (一個字都沒改):
set_seed()- 隨機種子設定evaluate_baseline_bert()- 基準模型評估run_original_code_with_tuning()- 核心訓練邏輯test_on_new_data()- 新數據測試predict_text()- 預測功能get_available_models()- 模型列表train_first_wrapper()- 第一次微調包裝train_second_wrapper()- 二次微調包裝test_new_data_wrapper()- 測試包裝
✅ 完全保留的訓練邏輯:
- 資料準備和預處理
- Tokenization
- 權重設定
- 模型初始化 (Full Fine-tuning / LoRA / AdaLoRA)
- 訓練循環
- 評估指標計算
- 模型儲存
🐛 故障排除
Q1: API Key 無效
A: 檢查 API Key 格式是否正確 (應為 sk-... 開頭)
Q2: openai 套件錯誤
A: 執行 pip install openai==0.28.1
Q3: AI 助手無回應
A: 確認已在「API 設定」區域儲存 API Key
Q4: API 請求限制
A: 您的 OpenAI 帳號可能達到速率限制,請稍後再試
📝 版本資訊
- Version: 2.0.0 (新增 ChatGPT 整合)
- Python: 3.10+
- 新增依賴: openai 0.28.1
⚠️ 重要提醒
- API Key 安全: 不要將 API Key 提交到版本控制系統
- 成本控制: ChatGPT API 會產生費用,建議設定使用額度
- 醫療免責: AI 預測僅供參考,最終決策應由專業醫師做出
- 原始功能: 即使不使用 AI 助手,所有原始功能仍完全可用
📄 授權
本專案在原有基礎上新增 ChatGPT 整合功能,完全保留原始程式邏輯。
🙏 致謝
基於 BERT 模型、Hugging Face Transformers 和 OpenAI ChatGPT 開發。