1114_Bert / README.md
Wen1201's picture
Update README.md
34766ac verified

A newer version of the Gradio SDK is available: 6.13.0

Upgrade
metadata
title: BERT 乳癌存活預測系統
emoji: 🥼
colorFrom: blue
colorTo: green
sdk: gradio
sdk_version: 4.44.0
app_file: app.py
pinned: false

🥼 BERT 乳癌存活預測 - 二次微調完整平台 (含 ChatGPT 整合)

📋 更新內容

✅ 新增功能

  1. 💬 AI 助手頁面: 與 ChatGPT 互動,獲得專業建議
  2. 🔮 預測結果討論: 在預測頁面下方可以討論預測結果
  3. 🔑 全域 API Key 管理: 一次設定,全系統可用

⚠️ 重要說明

  • 您的原始計算程式碼完全沒有修改
  • 所有訓練、評估、預測邏輯保持不變
  • 僅新增了 ChatGPT 互動功能作為輔助工具

🚀 安裝步驟

1. 安裝依賴套件

pip install -r requirements.txt

2. 取得 OpenAI API Key

  1. 前往 OpenAI Platform
  2. 登入您的帳號
  3. 建立新的 API Key
  4. 複製 API Key (格式: sk-...)

3. 啟動應用程式

python app.py

📖 使用指南

步驟 0: 設定 API Key (新增)

  1. 打開應用程式後,在最上方找到「🔑 API 設定」區域
  2. 輸入您的 OpenAI API Key
  3. 點擊「💾 儲存 API Key」
  4. 看到 ✅ 成功訊息後,即可在所有頁面使用 AI 助手

步驟 1: 第一次微調 (原功能)

  1. 上傳訓練數據 A (CSV 格式: Text, label)
  2. 選擇微調方法 (Full Fine-tuning / LoRA / AdaLoRA)
  3. 調整訓練參數
  4. 開始訓練
  5. 系統會自動比較純 BERT vs 第一次微調的表現

步驟 2: 二次微調 (原功能)

  1. 選擇已訓練的第一次微調模型
  2. 上傳新的訓練數據 B
  3. 調整訓練參數
  4. 開始訓練

步驟 3: 新數據測試 (原功能)

  1. 上傳測試數據 C
  2. 選擇要比較的模型
  3. 系統會並排顯示三個模型的表現

步驟 4: 模型預測 (原功能 + 新增 AI 討論)

  1. 選擇任一已訓練模型
  2. 輸入病歷文本
  3. 查看預測結果
  4. 【新增】在下方與 AI 討論預測結果

步驟 5: AI 助手 (新增功能)

  1. 在「💬 AI 助手」頁面與 ChatGPT 互動
  2. 詢問關於模型訓練、參數調整的問題
  3. 使用快速問題按鈕快速了解概念

🤖 AI 助手功能

💬 通用 AI 助手

位置: 「💬 AI 助手」頁面

功能:

  • 解釋訓練結果和評估指標
  • 提供參數調整建議
  • 解答 LoRA、AdaLoRA 等方法的問題
  • 回答醫療 AI 相關問題

快速問題:

  1. 什麼是二次微調?
  2. LoRA vs AdaLoRA 差異?
  3. 如何選擇最佳化指標?
  4. 參數調整建議
  5. 如何避免過度擬合?

🔮 預測結果討論

位置: 「4️⃣ 模型預測」頁面下方

功能:

  • 分析病歷中的關鍵醫療指標 (ER, PR, HER2, 腫瘤分期等)
  • 解釋這些指標如何影響預後
  • 說明為什麼模型會做出特定預測
  • 比較未微調和微調模型的預測差異

快速問題:

  1. 分析這位病患的病歷
  2. 為什麼模型預測死亡/存活?
  3. 關鍵預後因子是什麼?
  4. 兩個模型預測為何不同?
  5. 這個預測可靠嗎?

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): 
   較大的腫瘤與較差的預後相關

因此模型預測死亡風險較高是合理的。建議積極的化療方案...

🔧 技術細節

新增的程式碼

  1. 全域 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 None
    
  2. ChatGPT 互動函數

    def chat_with_gpt(message, history, api_key, context=""):
        # 與 ChatGPT API 互動
        # 支援對話歷史和上下文
    
  3. 預測結果討論函數

    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

⚠️ 重要提醒

  1. API Key 安全: 不要將 API Key 提交到版本控制系統
  2. 成本控制: ChatGPT API 會產生費用,建議設定使用額度
  3. 醫療免責: AI 預測僅供參考,最終決策應由專業醫師做出
  4. 原始功能: 即使不使用 AI 助手,所有原始功能仍完全可用

📄 授權

本專案在原有基礎上新增 ChatGPT 整合功能,完全保留原始程式邏輯。

🙏 致謝

基於 BERT 模型、Hugging Face Transformers 和 OpenAI ChatGPT 開發。