Train and Fine-Tune Sentence Transformers Models
https://huggingface.co/blog/how-to-train-sentence-transformers
https://www.sbert.net/docs/sentence_transformer/training_overview.html#why-finetune
https://github.com/fanqingsong/fine-tuning-sentence-transformers/tree/main
这是一篇关于 Hugging Face 官方博客的文章,主要介绍了如何使用 sentence-transformers 库对模型进行训练和微调。
文章的核心观点是:虽然预训练模型功能强大,但为了在特定任务上获得最佳效果,微调是必不可少的。文章详细阐述了微调 Sentence Transformers 模型的完整流程。
🎯 为什么要微调 (Why Finetune?)
预训练模型(如 BERT)通常是通用的,并不理解特定任务中“相似性”的具体含义。微调可以让模型适应具体的应用场景,例如:
- 分类任务:让语义相似的文本产生相似的向量嵌入。
- 语义文本相似度 (STS):根据语义的细微差别来区分文本。
- 语义搜索:侧重于优化查询与文档之间的匹配效果。
🛠️ 训练核心组件 (Training Components)
微调一个 Sentence Transformer 模型主要涉及以下几个关键部分:
- 模型 (Model):通常由一个
Transformer模块(如 BERT, RoBERTa)和一个Pooling模块组成。也支持多模态模型。 - 数据集 (Dataset):可以从 Hugging Face Hub 或本地加载。数据格式(列名)需要与所选的损失函数相匹配。例如,非标签列(如 "sentence1")是输入,标签列(如 "score")是目标值。
- 损失函数 (Loss Function):没有通用的最佳选择,需要根据数据和任务来决定。常见的有
CoSENTLoss,MultipleNegativesRankingLoss,CosineSimilarityLoss等。 - 训练参数 (Training Arguments):使用
SentenceTransformerTrainingArguments来配置学习率、Batch size、训练轮数(Epochs)等超参数。 - 评估器 (Evaluator):在训练期间或结束后评估模型性能,例如使用
EmbeddingSimilarityEvaluator来评估 STS 任务。 - 训练器 (Trainer):
SentenceTransformerTrainer是核心,它将以上所有组件整合在一起执行训练。
🚀 高级训练技巧
- 多数据集训练 (Multi-Dataset Training):支持同时使用多个数据集进行训练,这能有效提升模型的泛化能力。可以为不同数据集指定不同的损失函数,并设置采样策略(如按比例或轮询)。
- 最佳基础模型 (Best Base Models):文章基于在 14 个文本相似度任务上的表现,列出了推荐的基础模型。其中
microsoft/mpnet-base表现最佳,其次是ernie-2.0-en和deberta-base。
📢 重要更新
- 弃用旧方法:旧版的
model.fit()方法已被标记为弃用(Deprecated)。 - 推荐新方法:官方强烈建议直接使用
SentenceTransformerTrainer进行训练,因为它提供了更多的控制权和功能支持。
出处:http://www.cnblogs.com/lightsong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

浙公网安备 33010602011771号