Files
YG_FT/docs/模型评测功能总结.md

122 lines
7.0 KiB
Markdown
Raw Normal View History

# 模型评测功能总结
本项目(基于 LLaMA-Factory 的微调训练平台)包含 **4 套相对独立** 的模型评测能力,分别面向不同的使用场景:
| 能力 | 入口/目录 | 评测类型 | 打分方式 |
| --- | --- | --- | --- |
| 1. 学术 Benchmark 评测 | `llamafactory/eval/` | 选择题式基准(类 MMLU/C-Eval | 选项匹配 + few-shot |
| 2. 评估工作台 | `backend/app/api/v1/eval/` | 生成式问答(指令跟随) | BLEU / ROUGE / ExactMatch + 可选 LLM 评审 |
| 3. 平台评估系统 | `backend/app/api/v1/evaluation/` | 基于评估数据集的问答 | 判卷模型judge model打分05 分) |
| 4. 训练时验证评估 | `backend/app/services/task_runner.py` | 训练验证集 | loss 指标 |
下面分别说明。
---
## 1. 学术 Benchmark 评测LLaMA-Factory 原生)
面向标准学术选择题基准(如 MMLU、C-Eval 等),复用 LLaMA-Factory 原生的评测框架。
**核心文件**
- `llamafactory/eval/evaluator.py``Evaluator` 类 + `run_eval()` 入口
- `llamafactory/eval/template.py`:评测 prompt 模板(中/英,含 few-shot 示例构建)
- `llamafactory/hparams/evaluation_args.py``EvaluationArguments` 配置类
**工作流程**
1.`task`benchmark 名称加载数据集按科目subject拆分。
2. 每个样本构造 few-shot 提示词(`n_shot` 控制示例数,由 `lang` 决定中/英模板),将题干与候选选项拼入 prompt。
3. 调用模型推理得到预测,与标准答案比对,统计每个科目及整体的 `accuracy`
4. 结果写入 `save_dir`,打印各科目与平均准确率。
**关键参数(`EvaluationArguments`**
- `task`:基准数据集名
- `batch_size` / `n_shot` / `lang` / `save_dir` / `seed`
- `model_name_or_path``template``trust_remote_code` 等模型相关参数
> 该能力属于框架底层,本平台前端未直接提供操作入口,主要通过配置文件/脚本调用。
---
## 2. 评估工作台(生成式评测 + 指标计算)
后端路由位于 `backend/app/api/v1/eval/__init__.py`,前端称为「评估工作台」。**适用于评测模型的指令跟随与生成质量**,并支持 LLM 作为裁判LLM-as-a-Judge
**API 端点**
- `GET /evaluation/tasks`:列出评测任务(`frontend/src/api/evaluation.ts:listTasks`
- `POST /evaluation/run`:提交一次评测(`runEval`
- `GET /evaluation/report/{task_id}`:拉取评测报告(`getReport`
- `DELETE /evaluation/tasks/{task_id}`:删除任务(`deleteTask`
**评测流程(`run_eval`**
1. 通过 **LLaMA-Factory 数据管道**`get_dataset`) 加载数据集,支持 `subset` 与抽样(`eval_sample`)。
2.**原生 transformers** 加载模型在本地做生成推理(单进程顺序生成,便于展示样本)。
3. 计算客观指标(`compute_score`
- `BLEU`sacrebleu
- `ROUGE-1 / ROUGE-2 / ROUGE-L`rouge-score
- `Exact Match`
4. **可选 LLM 评审**judge当配置了 `judge_model` / `judge_api_base` / `judge_api_key` 时,调用 OpenAI 兼容接口对每条样本打分10 分制),并输出 4 个维度与理由:
- 核心事实正确性 `factual`
- 信息完整性 `completeness`
- 无幻觉 `no_hallucination`
- 格式合规性 `format`
- 综合分 `score` + `reason`
5. 任务状态持久化在后端 `eval_tasks.json`(支持 running/completed/failed/stopped前端轮询进度。
**前端页面**
- `frontend/src/views/evaluation/EvaluateTask.vue`:任务列表、创建评测对话框(选模型、数据集、指标、可选 judge 配置)
- `frontend/src/views/evaluation/EvaluateReport.vue`报告页展示综合得分、BLEU、ROUGE-L、各维度指标及「参考答案 vs 模型预测 vs LLM 评审」对比样例
---
## 3. 平台评估系统(基于评估数据集 + 判卷模型)
后端路由位于 `backend/app/api/v1/evaluation/__init__.py`,是平台业务层自研的评测体系。通过「评估数据集」组织题目,可一次性对 **多个被测模型 + 指定判卷模型** 进行批量评分。
**核心概念(数据模型 `backend/app/models/models.py`**
- `EvalDataset``models.py:131`):评估数据集,从项目问答对(`Question`/`Chunk`)中按 `question_type`mixed/fact/reasoning选题构建状态 `pending/running/completed/failed`
- `EvalResult``models.py:147`):单条评测结果,含 `judge_score`05 分)、`is_correct`true/false/partial`feedback``expected_answer` 等。
- `Task``models.py:184`):后台任务,`task_type="model-evaluation"`,记录进度与 `model_info`(存放平均分等汇总)。
**评测流程(`process_evaluation_task``backend/app/services/task_processor.py:336` 起)**
1. 加载评估数据集关联的题目,可选带入 `chunk` 上下文RAG 场景)。
2. 对每道题,先用 `build_eval_prompt` 组合「上下文 + 题目 + 参考答案」,调用 **判卷模型**`call_model`temperature=0.3)生成评分。
3. `parse_eval_result` 解析出 `score`(05)、`is_correct``feedback`,写入 `EvalResult`
4. 逐题提交进度(`completed_count` / `progress`),支持中途 `stopped`
5. 汇总:`avg_score = 总分/有效数 × 20`(换算百分制),`avg_score_5 = 总分/有效数`5 分制),存入 `task.model_info`。判定规则:得分 **≥3 视为正确**。
**特点**
- 判卷与被测模型解耦被测模型给出答案判卷模型judge独立评分降低自评偏差。
- 支持失败隔离:单题异常写入 `evaluation_status: failed` 记录而不中断整体任务。
---
## 4. 训练时验证评估
在微调训练任务执行期间,由 `backend/app/services/task_runner.py``do_eval` 触发:
- 在训练过程中对验证集validation set计算 `eval_loss`,用于监控过拟合。
- 结果回填到 `Task``loss_info` / `detail`,前端绘制 loss 曲线。
- 属于训练配套的轻量评估,不参与上述 13 的业务评测。
---
## 附属:前端评测相关页面
| 文件 | 作用 |
| --- | --- |
| `frontend/src/views/evaluation/EvaluateTask.vue` | 评估工作台:任务列表 + 创建评测 |
| `frontend/src/views/evaluation/EvaluateReport.vue` | 评估报告:指标卡 + 维度标签 + 对比样例 |
| `frontend/src/api/evaluation.ts` | 评估工作台接口封装 |
| 平台评估系统入口 | 评估数据集管理 + 评估任务model-evaluation创建与结果查看 |
---
## 小结
- **想要学术榜单式准确率** → 用能力 1LLaMA-Factory `eval/`)。
- **想要开放式生成质量BLEU/ROUGE + LLM 评审)** → 用能力 2评估工作台 `/evaluation/run`)。
- **想要基于自有问答数据、用判卷模型批量打分** → 用能力 3平台评估系统 `model-evaluation` 任务)。
- **训练过程监控** → 能力 4`do_eval` 验证集 loss
三种业务评测1/2/3相互独立可并存于同一平台数据模型`EvalDataset`/`EvalResult`/`Task`)主要服务于能力 3而能力 2 使用独立的 `eval_tasks.json` 文件持久化。