train-sentence-transformers
Train Sentence Transformers — навык Hugging Face для маршрутизации задач обучения и дообучения моделей sentence-transformers. Он не является самостоятельным учебником и прямо требует открыть соответствующие references и production-шаблон перед запуском. Навык помогает сначала определить тип модели, затем сопоставить форму данных, loss, evaluator и параметры тренировки. Если в запросе сказано «embedding model», «vector search» или «similarity», отправной точкой служит SentenceTransformer; слова «rerank», «ranker» или «two-stage» указывают на CrossEncoder; «SPLADE», «sparse» или «inverted index» — на SparseEncoder. При сохраняющейся неоднозначности исходная инструкция советует уточнить задачу. SentenceTransformer описан как bi-encoder, который переводит каждый вход в dense-вектор фиксированной размерности. Его сценарии включают retrieval, similarity, clustering, classification, paraphrase mining, deduplication и мультимодальные варианты. CrossEncoder совместно оценивает пару query и passage и подходит для второго этапа поиска, когда нужно переранжировать кандидатов, а также для pair classification. SparseEncoder предназначен для SPLADE и learned-sparse retrieval, где разреженные представления могут использоваться с Elasticsearch, OpenSearch или Lucene. Это разделение задаёт практический выбор архитектуры до выбора данных и метрики. Для SentenceTransformer исходный workflow требует прочитать mapping loss-to-data-shape, правила BatchSamplers.NO_DUPLICATES для семейств MNRL и совместимость Cached-вариантов с gradient checkpointing. Для CrossEncoder нужно сверить pointwise, pairwise, listwise или distillation loss, а для не-BCE loss использовать activation_fn=Identity(); отдельный CrossEncoderRerankingEvaluator и формат именованной метрики также обязательны к проверке. Для SparseEncoder нужен SpladeLoss, контроль FLOPS-регуляризации и smoke-проверка active dimensions, потому что высокий nDCG при схлопнувшейся разреженности не считается выигрышем. Общие материалы охватывают форматы датасетов, hard-negative mining, выбор базовой модели, TrainingArguments и troubleshooting. Навык предлагает варианты для Matryoshka, нескольких датасетов, LoRA, distillation, multilingual и static embedding, но не разрешает синтезировать тренировочный код только по этому описанию. Нужно взять scripts/train_<type>_example.py и заменить модель, датасет, имя запуска, loss и evaluator, сверив их с reference-файлами. До длинного запуска предусмотрен smoke-test с max_steps=1 и маленьким срезом данных. В каждом результате сохраняется baseline_eval до trainer.train(), затем выводится единая строка VERDICT: WIN, MARGINAL или REGRESSION с score, baseline и delta. Логи должны содержать отдельный файл запуска, а публикация в Hugging Face Hub выполняется в try/except; для HF Jobs дополнительно предусмотрен push_to_hub на каждом сохранении. Практические сценарии включают обучение embedding-модели для поиска, настройку CrossEncoder-реранкера, подготовку hard negatives и evaluators, distillation, LoRA или Matryoshka, а также публикацию результата в Hub. Ограничения определены самим источником: ссылки на references и шаблоны обязательны, а не факультативны; GPU настоятельно рекомендуется, тогда как CPU подходит только для демонстраций и StaticEmbedding в варианте SentenceTransformer. Для запуска нужны sentence-transformers[train]>=5.0, а для записи в Hub — авторизация hf или HF_TOKEN с правом записи.
Для чего подходит
- Обучение embedding-модели для поиска
- Настройка CrossEncoder-реранкера
- Подготовка hard negatives и evaluators
Установка
Сначала прочитайте SKILL.md и scripts в исходном репозитории. Затем выполните команду в каталоге проекта:
npx skills add https://github.com/huggingface/skills/tree/main/skills/train-sentence-transformers