Spaces:
Sleeping
Sleeping
| """ | |
| Core - Zero-Shot Topic Classification Module | |
| Classification zero-shot avec BART-large-MNLI. | |
| Catégorise un texte dans des labels arbitraires sans entraînement spécifique. | |
| """ | |
| from typing import Any | |
| from transformers import pipeline | |
| # ── Chargement lazy du modèle ── | |
| _zs_pipeline = None | |
| def _get_pipeline(): | |
| """Charge le pipeline zero-shot en lazy loading.""" | |
| global _zs_pipeline | |
| if _zs_pipeline is None: | |
| _zs_pipeline = pipeline( | |
| "zero-shot-classification", | |
| model="facebook/bart-large-mnli", | |
| ) | |
| return _zs_pipeline | |
| def classify_zero_shot(text: str, categories: str) -> dict[str, Any]: | |
| """ | |
| Classifie un texte dans des catégories arbitraires. | |
| Args: | |
| text: Le texte à classifier. | |
| categories: Catégories séparées par des virgules | |
| (e.g., "Politics, Tech, Sports"). | |
| Returns: | |
| Dict avec 'labels' et 'scores' (list), 'top_label' et 'top_score'. | |
| """ | |
| pipe = _get_pipeline() | |
| # Parsing des catégories | |
| candidate_labels = [c.strip() for c in categories.split(",") if c.strip()] | |
| if not candidate_labels: | |
| return { | |
| "labels": [], | |
| "scores": [], | |
| "top_label": "N/A", | |
| "top_score": 0.0, | |
| } | |
| # Classification | |
| result = pipe(text, candidate_labels) | |
| # Formater les scores | |
| scores_formatted = [ | |
| {"label": label, "score": round(score * 100, 2)} | |
| for label, score in zip(result["labels"], result["scores"]) | |
| ] | |
| return { | |
| "labels": result["labels"], | |
| "scores": [round(s * 100, 2) for s in result["scores"]], | |
| "results": scores_formatted, | |
| "top_label": result["labels"][0], | |
| "top_score": round(result["scores"][0] * 100, 2), | |
| } | |