要针对您的自定义任务或领域微调预训练的 Sentence Transformer 模型,首先要准备好您的数据集并选择合适的模型架构。从 Sentence Transformers 库中的预训练模型开始,例如 all-mpnet-base-v2
或 paraphrase-mpnet-base-v2
,因为这些模型经过优化,可以生成句子嵌入。您的数据集应包括反映您希望模型学习的关系的文本对或三元组。例如,如果您的任务是语义相似性,您可能需要标记为相似或不相似的句子对。如果您的任务涉及检索(例如,问题-答案匹配),您可以使用 (query, positive_answer, negative_answer) 三元组。将您的数据转换为与库兼容的格式,例如 InputExample
对象列表,或使用 datasets
库加载和预处理您的数据。确保您的文本经过清理和规范化(例如,小写字母、删除特殊字符),以匹配预训练设置。
接下来,配置训练管道。使用 SentenceTransformer
类加载预训练模型,然后定义一个与您的任务对齐的损失函数。例如,ContrastiveLoss
非常适合具有标记对的相似性任务,而 MultipleNegativesRankingLoss
对于每个查询都有一个正候选和许多负候选的检索任务非常有效。指定带有批量大小(例如,16–32)的数据加载器,并使用 fit
方法设置训练循环。调整超参数,例如学习率(例如,2e-5)、epoch 数(3–10)和预热步数(总步数的 10%)。如果您的数据集很小,请考虑使用数据增强技术,例如回译或同义词替换,以提高泛化能力。例如,如果训练技术文档,您可以添加查询,方法是在保留其含义的同时重新措辞。使用评估指标(例如余弦相似度)进行验证,或使用特定于下游任务的指标(例如,分类层上的准确度)来监控进度。
最后,评估和优化微调后的模型。训练后,在保留的验证集或真实场景中测试模型。例如,如果您正在构建一个 FAQ 检索系统,请衡量正确答案在 top-k 结果中出现的频率。如果性能不足,请尝试不同的损失函数,调整学习率或增加数据集大小。使用 model.save()
保存模型以供以后部署。要将模型集成到应用程序中,请使用 encode()
方法为新文本生成嵌入。例如,在客户支持聊天机器人中,对用户查询进行编码,并将它们与预先计算的答案嵌入进行匹配。请记住,微调是迭代的 - 从一个小实验开始,验证结果,并根据反馈进行改进。避免使设置过于复杂;即使是简单的配置,当数据与目标任务很好地对齐时,通常也会产生显着改进。