Former un modèle sentence-transformers
Ce SKILL.md est un routeur, pas un manuel. Il te dit quelles références et scripts d'exemple charger pour ta tâche. Le contenu réel — losses recommandées, evaluators, structure du script d'entraînement, sélection de modèle, réglages des training-args, dépannage — se trouve dans references/ et scripts/.
Ne synthétise pas un script d'entraînement à partir de ce fichier seul. Ouvre le template de production par type (scripts/train_<type>_example.py) et copie-le comme point de départ. Les templates contiennent du scaffolding porteur (helper autocast, classe model-card, liste de silencieux pour le logger, force=True, seed, TF32, imports compatibles avec les versions, gestion des métriques d'evaluator nommés) que les exécutions d'agents précédentes ont répétée manquées en créant les leurs à partir d'un snippet synthétisé.
1. Identifier le type de modèle
| Tag | Classe | Ce qu'il fait | Quand le choisir |
|---|---|---|---|
| [SentenceTransformer] | SentenceTransformer (bi-encoder) |
Mappe chaque entrée à un vecteur dense de dimension fixe | Récupération, similarité, clustering, classification, mining de paraphrase, dédup |
| [CrossEncoder] | CrossEncoder (reranker) |
Note les paires (query, passage) conjointement |
Récupération deux étapes (reclassement des top-100 du bi-encoder), classification de paires |
| [SparseEncoder] | SparseEncoder (SPLADE) |
Vecteurs creux sur le vocabulaire | Récupération sparse apprise, backends d'index inversé (Elasticsearch / OpenSearch / Lucene) |
Briseurs d'égalité quand la demande est ambiguë : « embedding model » / « vector search » / « similarity » → [SentenceTransformer]. « rerank » / « ranker » / « two-stage » → [CrossEncoder]. « SPLADE » / « sparse » / « inverted index » → [SparseEncoder]. Si encore flou, demande.
2. Lectures obligatoires
Lis ces documents en intégralité avant d'écrire du code. Ne trie pas par pertinence perçue.
Par type — toujours obligatoire
[SentenceTransformer]
references/losses_sentence_transformer.md— mapping loss-vers-forme-données ; requirementBatchSamplers.NO_DUPLICATESpour la famille MNRL ; incompatibilitéCached*↔gradient_checkpointing.references/evaluators_sentence_transformer.md— mapping evaluator-vers-tâche ; construction de clémetric_for_best_model(named vs unnamed) ; valeursprimary_metricpar evaluator.references/model_architectures.md— pipelines encoder vs decoder vs static vs Router ; règles de pooling (mean / cls / lasttoken) ; comportement d'auto-mean-pooling pour les bases MLM de démarrage frais.scripts/train_sentence_transformer_example.py— template de production ; copie ceci comme point de départ.
[CrossEncoder]
references/losses_cross_encoder.md— pointwise / pairwise / listwise / distillation ; dérivationpos_weight;activation_fn=Identity()obligatoire pour les non-BCE losses (sinon effondrement silencieux du classement en eval).references/evaluators_cross_encoder.md— recetteCrossEncoderRerankingEvaluator; format de clé d'evaluator nomméeval_{name}_{primary_metric}.scripts/train_cross_encoder_example.py— template de production ; copie ceci comme point de départ.
[SparseEncoder]
references/losses_sparse_encoder.md— requirement du wrapperSpladeLoss; poids du regularizer FLOPS ; comportement de smoke-test de la rampe active-dim.references/evaluators_sparse_encoder.md—SparseNanoBEIREvaluator(anglais uniquement) et l'alternative dans le domaine ; format de cléeval_{name}_{primary_metric}.scripts/train_sparse_encoder_example.py— template de production ; copie ceci comme point de départ.
Cross-cutting — toujours obligatoire (indépendamment de la tâche)
references/training_args.md— knobsTrainingArguments, règles de précision (charger fp32 + autocast bf16/fp16 ; jamaistorch_dtype=bfloat16),warmup_steps(float) vs deprecatedwarmup_ratio,save_stepsdoit être un multiple deeval_stepspourload_best_model_at_end, schedulers, HPO, tracker, resume, variantes hub-push.references/dataset_formats.md— règles de correspondance de colonnes (auto-détection du nom de label ; colonne-non-ordre-ni-nom) ; recettes de reshaping ; options de hard-negative mining.references/base_model_selection.md— commandes de découverte ; namespaces de modèles par type ; piègemax_seq_length=8192pour la famille ModernBERT ; rejet du script-loaderdatasets >= 4; raccourcis de point de départ non-anglais.references/troubleshooting.md— recettes d'échec indexées par symptôme. Survole les en-têtes de section à chaque exécution, même une saine ; les entrées « Les métriques ne s'améliorent pas » et « Hub push échoue » couvrent les bugs qui frappent fréquemment et sont moins coûteux à reconnaître avant qu'ils ne se produisent que de déboguer après.
Cross-cutting — charge quand applicable
references/hardware_guide.md— dimensionnement VRAM, multi-GPU, FSDP / DeepSpeed, saveurs HF Jobs. Obligatoire pour les modèles >24GB, multi-GPU, ou exécutions HF Jobs.references/hf_jobs_execution.md— obligatoire lors de l'exécution sur HF Jobs.references/prompts_and_instructions.md— obligatoire lors de l'utilisation de bases prompt-tuned (E5, BGE, GTE, Qwen3-Embedding, Instructor, Nomic, etc.) ou ajout de préfixes de stylequery:/passage:.
Scripts variantes (ouvre quand la tâche correspond)
- [SentenceTransformer]
scripts/train_sentence_transformer_<matryoshka|multi_dataset|with_lora|distillation|make_multilingual|static_embedding>_example.py. - [CrossEncoder]
scripts/train_cross_encoder_<distillation|listwise>_example.py. - [SparseEncoder]
scripts/train_sparse_encoder_distillation_example.py. - CLI hard-negative mining —
scripts/mine_hard_negatives.py.
3. Défauts
Remplace seulement si l'utilisateur le spécifie autrement :
- Exécution locale. Propose HF Jobs seulement si le matériel local ne peut pas tenir la tâche.
- Exécution unique. Après son achèvement, propose l'expérimentation si l'utilisateur en bénéficierait (verdict faible/marginal, framing « vois jusqu'où tu peux la pousser », etc.). Règles d'itération dans
references/training_args.md(section Experimentation). - Public Hub push à fin d'exécution, enveloppé dans try-except. Sur HF Jobs (env éphémère) ACTIVE AUSSI le push en-trainer (
push_to_hub=True+hub_strategy="every_save") ; détails dansreferences/hf_jobs_execution.md.
4. Contraintes que le script produit doit satisfaire
Ce sont des contrats non-négociables. L'implémentation vit dans les templates de production et les références — ne réinvente pas.
- Capture le score de l'evaluator de pré-entraînement comme
baseline_evalavanttrainer.train(). - Émets une seule ligne de fin d'exécution :
VERDICT: WIN|MARGINAL|REGRESSION | score=... | baseline=... | delta=.... Un moniteur la scrape. - Silence
httpx,httpcore,huggingface_hub,urllib3,filelock,fsspecà WARNING (sinon les URLs HF de téléchargement inondent le contexte de l'agent). - Tee logs vers
logs/{RUN_NAME}.log. - Termine avec
model.push_to_hub(...)enveloppé danstry/except. - Smoke-test avant toute longue exécution (
max_steps=1+ tiny dataset slice). Les templates de production montrent un motif courant (SMOKE_TESTenv var). - [CrossEncoder] Inclus
EarlyStoppingCallback(patience>=3)— les CE rerankers culminent souvent en milieu d'entraînement et régressent. - [SparseEncoder] Log
query_active_dims/corpus_active_dimssur la ligne verdict ; nDCG élevé avec sparsité effondrée n'est pas une victoire. Les clés reviennent avec préfixe de nom (p. ex...._query_active_dims) ; utilise la correspondance de suffixe pour les extraire — voir le template SPARSE de production pour le motif exact.
5. Flux de travail
- Identifier le type de modèle (§1). Demande s'il est ambigu.
- Charge les fichiers de lecture obligatoire du §2 pour ce type.
- Ouvre
scripts/train_<type>_example.pyet copie-le comme point de départ. - Remplace
MODEL_NAME,DATASET_NAME,RUN_NAME, la loss, et l'evaluator par la tâche de l'utilisateur. Croise la correspondance loss/forme-données contrereferences/losses_<type>.md; croise la clémetric_for_best_modelcontrereferences/evaluators_<type>.md(les evaluators nommés formatent la clé commeeval_{name}_{primary_metric}). - Smoke-test (
max_steps=1). - Exécute.
- Après l'exécution, ajoute à
logs/experiments.mdet propose l'itération si le verdict est faible/marginal.
Prérequis
pip install "sentence-transformers[train]>=5.0" # ajoute [train,image] / [audio] / [video] pour [SentenceTransformer] multimodal
pip install trackio # tracker optionnel ; ou wandb / tensorboard / mlflow
hf auth login # ou définis HF_TOKEN avec scope write (pour le Hub push)
GPU fortement recommandé. CPU fonctionne seulement pour les démos et [SentenceTransformer] StaticEmbedding.