---
title: Twinkle Eval Analyzer
emoji: ✨
colorFrom: blue
colorTo: indigo
sdk: docker
app_file: app.py
pinned: false
---
# 🌟 Eval Analyzer
一個基於 🎈 **Streamlit** 的互動式工具,用來分析 **[Twinkle Eval](https://github.com/ai-twinkle/Eval)** 格式的評估檔案(`.json` / `.jsonl`)。
## 🌐 線上使用
- [Twinkle Eval Analyzer (Zeabur 部署)](https://twinkle-ai-eval-analyzer.zeabur.app/) (thanks @BbsonLin)
- [Eval Analyzer (GitHub Pages)](https://doggy8088.github.io/eval-analyzer/) (thanks @doggy8088)
- [Eval Analyzer (Streamlit Cloud)](https://ai-twinkle-eval-analyzer.streamlit.app/) (thanks @thliang01)
## 📌 功能特色

圖:gpt-oss-120b 在 MMLU 部分子集上的表現成績預覽
### 📈 原始成績圖表
- 支援上傳多個 **Twinkle Eval 檔案**(`json` / `jsonl`)。
- 自動解析評估結果,抽取:
- `dataset`
- `category`
- `file`
- `accuracy_mean`
- `source_label`(模型名稱 + timestamp)
- 提供整體平均值的計算,缺漏時自動補足。
- **分數閾值篩選**:
- 支援兩種篩選模式:
- **任一模型符合**:只要有任一個模型在該類別符合條件,就顯示該類別和所有模型的分數。
- **特定模型符合**:篩選特定模型符合條件的類別(需選擇要篩選的模型)。
- 可設定閾值條件:≥ 或 ≤ 特定分數。
- 根據顯示比例(0–1 或 0–100)自動調整閾值範圍。
- 篩選後自動更新圖表、分頁顯示及排序。
- 若無符合條件的類別,顯示提示訊息。
- 視覺化:
- 各類別的柱狀圖(依模型分組對照)。
- 可選擇排序方式(平均由高→低、平均由低→高、字母排序)。
- 支援分頁顯示(自訂每頁顯示類別數量)。
- 指標可切換為原始值或 0–100 比例。
- 支援 **CSV 匯出**(下載分頁結果)。
### ⚖️ 差距分析(Baseline Δ)圖表
- **基準模型比較**:選擇一個基準模型(Baseline)與多個候選模型(Candidates)進行差距分析。
- **差距計算**:自動計算 Δ = Candidate 分數 − Baseline 分數。
- **多種排序模式**:
- `|Δ| 由大到小`:依絕對差距排序,找出差異最大的項目。
- `Δ 由大到小(提升最多)`:找出候選模型相對基準提升最多的類別。
- `Δ 由小到大(下降最多)`:找出候選模型相對基準下降最多的類別。
- `依類別名稱`:依字母順序排列。
- **差距門檻過濾**:可設定最小差距門檻,只顯示 |Δ| ≥ 門檻的類別。
- **視覺化呈現**:
- **per-category 排行圖**:每個候選模型獨立分面,以水平長條圖顯示各類別的差距。
- **per-candidate 總結**:統計各候選模型的 Mean Δ、Median Δ、Win/Lose/Tie 次數及覆蓋率。
- **Top/Bottom-N 清單**:顯示每個候選模型提升最多與下降最多的 N 個類別。
- **CSV 匯出**:支援下載差距排行、總覽表、Top/Bottom-N 清單。
## 🚀 使用方式
### 1. 安裝環境
建議使用虛擬環境(如 `venv` 或 `conda`):
```bash
pip install -r requirements.txt
```
### 2. 啟動應用程式
```bash
streamlit run app.py
```
### 3. 操作流程
#### 原始成績
1. 在左側 Sidebar 上傳一個或多個 **Twinkle Eval 檔案**。
2. 選擇要查看的資料集。
3. 設定排序方式、分頁大小、顯示比例(0–1 或 0–100)。
4. 查看圖表與資料表,並可下載 CSV。
#### 差距分析(Baseline Δ)
1. 在「差距分析設定」中選擇排序方式與差距門檻。
2. 在差距分析區塊選擇基準模型(Baseline)。
3. 選擇一個或多個候選模型(Candidates)進行比較。
4. 查看差距排行圖表與統計總結。
5. 下載差距分析結果(CSV 格式)。
## 📂 檔案格式要求
每份 json / jsonl 檔案需符合 Twinkle Eval 格式,至少包含以下欄位:
```json
{
"timestamp": "2025-08-20T10:00:00",
"config": {
"model": { "name": "my-model" }
},
"dataset_results": {
"datasets/my_dataset": {
"average_accuracy": 0.85,
"results": [
{
"file": "category1.json",
"accuracy_mean": 0.9
},
{
"file": "category2.json",
"accuracy_mean": 0.8
}
]
}
}
}
```
或者可以到 Twinkle AI [Eval logs](https://huggingface.co/collections/twinkle-ai/eval-logs-6811a657da5ce4cbd75dbf50) collections 下載範例。
## ⚠️ 檔案格式相容性注意事項
**重要提醒**:此工具目前支援特定的 JSON/JSONL 格式。來自外部資料集(如 Hugging Face 儲存庫)的檔案可能無法直接相容。
### 常見問題
- **缺少必要欄位**:缺少 `config` 或 `dataset_results` 欄位的檔案將無法載入
- **錯誤的檔案命名**:請使用 `results_*.json` 而非 `eval_results_*.jsonl` 格式
- **外部資料集格式**:來自其他工具或儲存庫的評估日誌可能使用不同的架構
- **欄位命名**:不同的欄位名稱(例如 `accuracy` vs `accuracy_mean`)可能導致解析錯誤
### 疑難排解
如果遇到「缺少必要欄位」錯誤:
1. 確認您的檔案包含所有必要的頂層欄位
2. 檢查巢狀物件是否遵循預期結構
3. 對於外部資料集,考慮建立轉換腳本或[提出議題](https://github.com/ai-twinkle/eval-analyzer/issues)請求格式支援
### 貢獻
我們歡迎支援額外格式的貢獻!請參閱我們的[貢獻指南](CONTRIBUTING.md)或提交功能請求。
## 📊 輸出範例
### 原始成績圖表
- **圖表**:顯示各模型在不同類別的 accuracy_mean 比較。
- **表格**:Pivot Table,行為類別,列為模型,值為 accuracy。
- **下載**:每頁結果可匯出成 CSV。
### 差距分析圖表
- **差距排行圖**:水平長條圖顯示各類別相對於基準的差距(Δ),每個候選模型獨立分面。
- **總覽表**:顯示各候選模型的平均差距、中位數差距、勝敗次數與覆蓋率。
- **Top/Bottom-N 清單**:展開式面板顯示每個候選模型提升與下降最多的類別詳細資訊。
- **下載**:支援匯出差距排行、總覽表、Top/Bottom-N 清單(CSV 格式)。
## 📄 License
MIT