| from __future__ import annotations |
|
|
| from typing import Dict, Tuple |
|
|
| import numpy as np |
| from sklearn.metrics import ( |
| accuracy_score, |
| confusion_matrix, |
| f1_score, |
| precision_score, |
| recall_score, |
| ) |
|
|
|
|
| def _extract_predictions(eval_pred) -> Tuple[np.ndarray, np.ndarray]: |
| if hasattr(eval_pred, "predictions"): |
| logits = eval_pred.predictions |
| labels = eval_pred.label_ids |
| else: |
| logits, labels = eval_pred |
| preds = np.argmax(logits, axis=-1) |
| return preds, labels |
|
|
|
|
| def compute_metrics(eval_pred) -> Dict[str, float]: |
| preds, labels = _extract_predictions(eval_pred) |
| return { |
| "accuracy": accuracy_score(labels, preds), |
| "f1": f1_score(labels, preds, average="binary", zero_division=0), |
| "precision": precision_score(labels, preds, average="binary", zero_division=0), |
| "recall": recall_score(labels, preds, average="binary", zero_division=0), |
| } |
|
|
|
|
| def evaluate_predictions( |
| labels: np.ndarray, |
| preds: np.ndarray, |
| ) -> Dict[str, object]: |
| metrics = { |
| "accuracy": accuracy_score(labels, preds), |
| "f1": f1_score(labels, preds, average="binary", zero_division=0), |
| "precision": precision_score(labels, preds, average="binary", zero_division=0), |
| "recall": recall_score(labels, preds, average="binary", zero_division=0), |
| } |
| matrix = confusion_matrix(labels, preds, labels=[0, 1]).tolist() |
| return {"metrics": metrics, "confusion_matrix": matrix} |
|
|