К основному содержанию
скилл CX Codex

train-sentence-transformers — скилл для Claude Code

Скилл для Claude Code и других агентов: проводит по обучению sentence-transformers — от выбора типа энкодера до выгрузки весов на Hugging Face Hub.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add huggingface/skills --skill train-sentence-transformers -a claude-code
Открыть на GitHub

Что делает train-sentence-transformers

Скилл сам модель не обучает. Он работает как маршрутизатор: определяет тип энкодера и отправляет агента к нужным файлам в references/ и scripts/. Ветки четыре: SentenceTransformer для плотных эмбеддингов, CrossEncoder для оценки пар, SparseEncoder (SPLADE) под обратный индекс и MultiVectorEncoder (ColBERT) с MaxSim по токенам.

За основу берут production-шаблон scripts/train_<type>_example.py и копируют его. Писать скрипт по одному SKILL.md нельзя: потеряется обвязка — autocast, seed, TF32, глушение логгеров, совместимые импорты. Прошлые прогоны агентов это уже теряли. Рядом лежат общие файлы: TrainingArguments, форматы датасетов, выбор базовой модели, разбор сбоев.

Часть правил легко пропустить, и тогда обучение тихо ломается. Веса грузят в fp32, точность держат через autocast bf16/fp16, а torch_dtype=bfloat16 не ставят. С load_best_model_at_end шаг сохранения должен быть кратен шагу оценки. CrossEncoder с не-BCE лоссом требует activation_fn=Identity(), иначе ранжирование на оценке разваливается. Оценщики NanoBEIR здесь рассчитаны на английский.

Какие задачи решает

  • Выбрать между би-энкодером, реранкером и SPLADE под задачу поиска
  • Запустить обучение CrossEncoder без падения ранжирования на валидации
  • Собрать твёрдые негативы и подключить их к MNRL-лоссу
  • Настроить metric_for_best_model для именованного оценщика
  • Выгрузить чекпойнт на Hugging Face Hub

Примеры запросов агенту

  • Обучи SentenceTransformer на моих парах вопрос-ответ из data/pairs.csv, возьми шаблон би-энкодера из скилла.
  • Нужен реранкер для двухэтапного поиска — собери CrossEncoder по шаблону scripts/train_cross_encoder_example.py.
  • Переведи это на ColBERT с оценкой MaxSim и проверь значение scale для выбранного режима.

Как установить train-sentence-transformers

1Через Skills CLI (Vercel)

npx skills add huggingface/skills --skill train-sentence-transformers -a claude-code

2Вручную: положить файлы

~/.claude/skills/train-sentence-transformers/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/train-sentence-transformers/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о train-sentence-transformers

Как установить train-sentence-transformers в Claude Code?

Выполните npx skills add huggingface/skills --skill train-sentence-transformers -a claude-code. Файл скилла появится в ~/.claude/skills/train-sentence-transformers/SKILL.md.

Что делает train-sentence-transformers?

Разводит задачу по четырём типам энкодеров и выдаёт агенту список файлов: лоссы, оценщики, шаблоны скриптов и общие настройки обучения.

Почему скилл требует копировать пример, а не писать скрипт с нуля?

В шаблоне есть готовая обвязка: autocast, seed, TF32, отключение лишних логгеров. Сам по себе SKILL.md её не содержит, и агенты на этом уже спотыкались.

Исходный текст

SKILL.md · Apache-2.0
---
name: train-sentence-transformers
description: Train or fine-tune sentence-transformers models across `SentenceTransformer` (bi-encoder, dense or static embedding model for retrieval, similarity, clustering, classification, paraphrase mining, dedup, multimodal), `CrossEncoder` (reranker, pair scoring for two-stage retrieval / pair classification), `SparseEncoder` (SPLADE, sparse embedding model for learned-sparse retrieval), and `MultiVectorEncoder` (ColBERT / late-interaction, per-token embeddings scored with MaxSim). Covers loss selection, hard-negative mining, evaluators, distillation, LoRA, Matryoshka, and Hugging Face Hub publishing. Use for any sentence-transformers training task.
---

# Train a sentence-transformers Model

**This SKILL.md is a router, not a manual.** It tells you which references and example scripts to load for your task. The actual content (recommended losses, evaluators, training-script structure, model selection, training-arg knobs, troubleshooting) lives in `references/` and `scripts/`.

**Do not synthesize a training script from this file alone.** Open the per-type production template (`scripts/train_<type>_example.py`) and copy it as your starting point. The templates contain load-bearing scaffolding (autocast helper, model-card class, logger silencing list, `force=True`, `seed`, TF32, version-compatible imports, named-evaluator metric handling) that prior agent runs have repeatedly missed when rolling their own from a synthesized snippet.

## 1. Identify the model type

| Tag | Class | What it does | When to pick |
|---|---|---|---|
| **[SentenceTransformer]** | `SentenceTransformer` (bi-encoder) | Maps each input to a fixed-dim dense vector | Retrieval, similarity, clustering, classification, paraphrase mining, dedup |
| **[CrossEncoder]** | `CrossEncoder` (reranker) | Scores `(query, passage)` pairs jointly | Two-stage retrieval (rerank top-100 from bi-encoder), pair classification |
| **[SparseEncoder]** | `SparseEncoder` (SPLADE) | Sparse vectors over the vocabulary | Learned-sparse retrieval, inverted-index backends (Elasticsearch / OpenSearch / Lucene) |
| **[MultiVectorEncoder]** | `MultiVectorEncoder` (ColBERT) | One embedding per token, scored with MaxSim | Late-interaction retrieval, recall gains over bi-encoders at higher storage cost, multimodal (ColPali / ColQwen2) |

Tiebreakers when the request is ambiguous: "embedding model" / "vector search" / "similarity" → **[SentenceTransformer]**. "rerank" / "ranker" / "two-stage" → **[CrossEncoder]**. "SPLADE" / "sparse" / "inverted index" → **[SparseEncoder]**. "ColBERT" / "late interaction" / "multi-vector" / "MaxSim" / "ColPali" / "ColQwen" → **[MultiVectorEncoder]**. If still unclear, ask.

## 2. Required reading

**Read these in full before writing any code. Do not triage by perceived relevance.**

### Per-type: always required

**[SentenceTransformer]**
- `references/losses_sentence_transformer.md`: loss-to-data-shape mapping, `BatchSamplers.NO_DUPLICATES` requirement for MNRL-family, `Cached*` ↔ `gradient_checkpointing` incompatibility.
- `references/evaluators_sentence_transformer.md`: evaluator-to-task mapping, `metric_for_best_model` key construction (named vs unnamed), per-evaluator `primary_metric` values.
- `references/model_architectures.md`: encoder vs decoder vs static vs Router pipelines, pooling rules (mean / cls / lasttoken), auto-mean-pooling behavior for fresh-start MLM bases.
- `scripts/train_sentence_transformer_example.py`: production template. Copy this as your starting point.

**[CrossEncoder]**
- `references/losses_cross_encoder.md`: pointwise / pairwise / listwise / distillation, `pos_weight` derivation, `activation_fn=Identity()` mandatory for non-BCE losses (silent eval-rank collapse otherwise).
- `references/evaluators_cross_encoder.md`: `CrossEncoderRerankingEvaluator` recipe, named-evaluator key format `eval_{name}_{primary_metric}`.
- `scripts/train_cross_encoder_example.py`: production template. Copy this as your starting point.

**[SparseEncoder]**
- `references/losses_sparse_encoder.md`: `SpladeLoss` wrapper requirement, FLOPS regularizer weights, smoke-test active-dim ramp behavior.
- `references/evaluators_sparse_encoder.md`: `SparseNanoBEIREvaluator` (English-only) and the in-domain alternative, `eval_{name}_{primary_metric}` key format.
- `scripts/train_sparse_encoder_example.py`: production template. Copy this as your starting point.

**[MultiVectorEncoder]**
- `references/losses_multi_vector_encoder.md`: MaxSim scoring, scale choice per scoring mode (`scale=1.0` for MaxSim, roughly the average query length for MeanMaxSim), MNRL / CachedMNRL / MarginMSE / DistillKLDiv, XTR-vs-ColBERT scoring, CachedMNRL ↔ `gradient_checkpointing` incompatibility.
- `references/evaluators_multi_vector_encoder.md`: `MultiVectorNanoBEIREvaluator` (English-only) and the in-domain alternative, `eval_NanoBEIR_mean_maxsim_ndcg@10` key format, distillation-eval spearman variant.
- `scripts/train_multi_vector_encoder_example.py`: production template. Copy this as your starting point.

### Cross-cutting: always required (regardless of task)

- `references/training_args.md`: `TrainingArguments` knobs, precision rules (load fp32 + autocast bf16/fp16, never `torch_dtype=bfloat16`), `warmup_steps` (float) vs deprecated `warmup_ratio`, `save_steps` must be a multiple of `eval_steps` for `load_best_model_at_end`, schedulers, HPO, tracker, resume, hub-push variants.
- `references/dataset_formats.md`: column-matching rules (label name auto-detection, column-order-not-name), reshaping recipes, hard-negative mining options.
- `references/base_model_selection.md`: discovery commands, per-type model namespaces, ModernBERT-family `max_seq_length=8192` trap, `datasets >= 4` script-loader rejection, non-English starting-point shortcuts.
- `references/troubleshooting.md`: symptom-indexed failure recipes. Skim the section headings on every run, even a healthy one. The "Metrics don't improve" and "Hub push fails" entries cover bugs that bite frequently and are cheaper to recognize before they fire than to debug after.

### Cross-cutting: load when applicable

- `references/hardware_guide.md`: VRAM sizing, multi-GPU, FSDP / DeepSpeed, HF Jobs flavors. Required for >24GB models, multi-GPU, or HF Jobs runs.
- `references/hf_jobs_execution.md`: required when running on HF Jobs.
- `references/prompts_and_instructions.md`: required when using prompt-tuned bases (E5, BGE, GTE, Qwen3-Embedding, Instructor, Nomic, etc.) or adding `query: ` / `passage: ` style prefixes.

### Variant scripts (open when the task matches)
- **[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`.
- Hard-negative mining CLI: `scripts/mine_hard_negatives.py`.

## 3. Defaults

Override only if the user specifies otherwise:
- **Local execution.** Pitch HF Jobs only if local hardware can't fit the job.
- **Single run.** After it completes, propose experimentation if the user would benefit (weak/marginal verdict, "see how high you can push it" framing, etc.). Iteration rules in `references/training_args.md` (Experimentation section).
- **Public Hub push at end-of-run, wrapped in try-except.** On HF Jobs (ephemeral env) ALSO enable in-trainer push (`push_to_hub=True` + `hub_strategy="every_save"`). Details in `references/hf_jobs_execution.md`.

## 4. Constraints the produced script must satisfy

These are non-negotiable contracts. Implementation lives in the production templates and references. Do not reinvent.

- Capture the pre-training evaluator score as `baseline_eval` **before** `trainer.train()`.
- Emit a single end-of-run line: `VERDICT: WIN|MARGINAL|REGRESSION | score=... | baseline=... | delta=...`. A monitor scrapes for this.
- Silence `httpx`, `httpcore`, `huggingface_hub`, `urllib3`, `filelock`, `fsspec` to WARNING (otherwise HF download URLs flood the agent's context).
- Tee logs to `logs/{RUN_NAME}.log`.
- End with `model.push_to_hub(...)` wrapped in `try/except`.
- Smoke-test before any long run (`max_steps=1` + tiny dataset slice). The production templates show one common pattern (`SMOKE_TEST` env var).
- **[CrossEncoder]** Include `EarlyStoppingCallback(patience>=3)`. CE rerankers often peak mid-training and regress.
- **[SparseEncoder]** Log `query_active_dims` / `corpus_active_dims` on the verdict line. High nDCG with collapsed sparsity is not a win. The keys come back name-prefixed (e.g. `..._query_active_dims`). Use suffix matching to pluck them. See the SPARSE production template for the exact pattern.
- **[MultiVectorEncoder]** Match `scale` to the scoring mode on any MNRL-family loss: near `1.0` for unnormalized MaxSim (do not copy `scale=20.0` from bi-encoder MNRL), roughly the average query length with length-normalized MeanMaxSim, since each score is divided by its query's token count. `XTRScores` is a train-only `similarity_fct`: the evaluators reject it, so evaluation always scores with MaxSim, including for XTR-trained models.

## 5. Workflow

1. Identify the model type (§1). Ask if ambiguous.
2. Load the §2 required-reading files for that type.
3. Open `scripts/train_<type>_example.py` and copy it as your starting point.
4. Replace `MODEL_NAME`, `DATASET_NAME`, `RUN_NAME`, the loss, and the evaluator with the user's task. Cross-check loss/data-shape match against `references/losses_<type>.md`. Cross-check the `metric_for_best_model` key against `references/evaluators_<type>.md` (named evaluators format the key as `eval_{name}_{primary_metric}`).
5. Smoke-test (`max_steps=1`).
6. Run.
7. After the run, append to `logs/experiments.md` and propose iteration if the verdict is weak/marginal.

## Prerequisites

```bash
pip install "sentence-transformers[train]>=5.0"        # add [train,image] / [audio] / [video] for [SentenceTransformer] multimodal
                                                       # [MultiVectorEncoder] requires >=6.0
pip install trackio                                    # optional tracker (or wandb / tensorboard / mlflow)
hf auth login                                          # or set HF_TOKEN with write scope (for Hub push)
```

GPU strongly recommended. CPU works only for demos and `[SentenceTransformer]` `StaticEmbedding`.

© huggingface · Apache-2.0 · huggingface/skills

Похожие скиллы

Всё по теме «ИИ и ML» →
sentence-transformers Orchestra Research Создаёт локальные векторные представления текста и изображений для RAG, семантического поиска и сравнения документов. CX Codex +1 959установок transformers-huggingface Mindrally Скилл для работы с библиотекой Hugging Face Transformers: загрузка моделей, токенизация, файнтюнинг через Trainer и оптимизация инференса. CX Codex +1 758установок nemotron-retrieval-recipes NVIDIA Nemotron Team Помогает планировать, отлаживать, обучать и развёртывать рецепты эмбеддингов и реранкинга NVIDIA Nemotron. Пригодится при настройке первого и второго этапов поиска в RAG-системах. CX Codex +1 2 000установок autoskill K-Dense-AI Анализирует историю работы из Screenpipe, находит повторяющиеся сценарии и готовит черновики новых скиллов. Запускается только по прямому запросу пользователя. CX Codex +1 1 700установок eval-harness-first Seth Hobson Собирает оценочный контур до начала fine-tuning: goldens, graders, калибровку judge и baseline базовой модели. Нужен для контроля регрессий. CX Codex 2 600установок unsloth Orchestra Research Скилл подсказывает агенту, как дообучать модели через Unsloth: обучение быстрее в 2-5 раз, памяти уходит на 50-80% меньше. CX Codex +1 981установок

Из того же набора25

huggingface-vision-trainer Скилл для файнтюнинга детекторов, классификаторов и SAM/SAM2 на GPU Hugging Face Jobs. Пригодится, когда своей видеокарты нет, а модель надо обучить и сохранить на Hub. CX Codex +1 1 900установок huggingface-best Скилл ищет лучшие модели под задачу по официальным лидербордам HuggingFace и отсеивает те, что не влезут на ваше железо. CX Codex +1 1 800установок huggingface-paper-publisher Ведёт статью по Hugging Face Hub: индексирует её по arXiv ID, привязывает к карточкам моделей и датасетов, помогает подтвердить авторство и собрать черновик. CX Codex +1 1 700установок huggingface-tool-builder Скилл для создания переиспользуемых скриптов, которые работают с Hugging Face API. Пригодится, если нужно автоматизировать поиск моделей, обогащать данные или объединять несколько API-запросов в одну цепочку. CX Codex +1 1 600установок huggingface-zerogpu Скилл для демо на Gradio Spaces с ZeroGPU: где ставить @spaces.GPU, как выбрать duration и что ломается на границе воркера. CX Codex +1 1 300установок huggingface-spaces Скилл помогает создавать, развёртывать и чинить приложения в Hugging Face Spaces. Пригодится для Gradio, Docker, Static SDK и ZeroGPU. CX Codex +1 1 100установок trl-training Помогает писать и отлаживать постобучение языковых моделей через TRL: SFT, DPO, GRPO, KTO и обучение модели награды. CX Codex +1 909установок hf-mem Считает, сколько памяти займёт модель с Hugging Face Hub при инференсе, и не скачивает веса. Пригодится, когда надо понять, влезет ли модель в GPU. CX Codex +1 858установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой