两阶段评测:先用被测模型生成答案,再用评分模型打分。 支持 score_model 参数。
(
self,
data_items,
model,
max_out_len=512,
batch_size=None,
save_path="./eval_results",
score_model=None,
)
| 126 | return prediction >= 0.5 |
| 127 | |
| 128 | def evaluate( |
| 129 | self, |
| 130 | data_items, |
| 131 | model, |
| 132 | max_out_len=512, |
| 133 | batch_size=None, |
| 134 | save_path="./eval_results", |
| 135 | score_model=None, |
| 136 | ): |
| 137 | """ |
| 138 | 两阶段评测:先用被测模型生成答案,再用评分模型打分。 |
| 139 | 支持 score_model 参数。 |
| 140 | """ |
| 141 | score_model = score_model or self.score_model |
| 142 | results = [] |
| 143 | print("🚀 Running model inference...") |
| 144 | model_outputs = [] |
| 145 | # 1. 让被测模型生成答案(带进度条) |
| 146 | for item in tqdm(data_items, desc="Generating responses", unit="item"): |
| 147 | prompt = self._build_prompt(item) |
| 148 | model_output = model.generate(prompt, max_out_len) |
| 149 | model_outputs.append(model_output) |
| 150 | # 2. 评分阶段(带进度条) |
| 151 | print("📝 Running scoring model...") |
| 152 | for item, model_output in tqdm( |
| 153 | zip(data_items, model_outputs), |
| 154 | total=len(data_items), |
| 155 | desc="Scoring responses", |
| 156 | unit="item", |
| 157 | ): |
| 158 | score_prompt = self._build_score_prompt(item, model_output) |
| 159 | score_response = score_model.generate(score_prompt, max_out_len) |
| 160 | score = self._extract_prediction(score_response, item) |
| 161 | # 3. 保存所有信息 |
| 162 | item_result = item.copy() |
| 163 | item_result[self.prediction_key] = score |
| 164 | item_result["model_output"] = model_output |
| 165 | item_result["score_response"] = score_response |
| 166 | item_result["pass"] = self._calculate_accuracy( |
| 167 | item.get("answer", ""), score, item |
| 168 | ) |
| 169 | results.append(item_result) |
| 170 | # 4. 保存和统计 |
| 171 | saved_files = self._save_results(results, save_path) |
| 172 | metrics = self._calculate_metrics(results) |
| 173 | self._print_results(metrics) |
| 174 | return { |
| 175 | "metrics": metrics, |
| 176 | "saved_files": saved_files, |
| 177 | "total_items": len(results), |
| 178 | } |
nothing calls this directly
no test coverage detected