培训概述¶
备注
在 训练 Sentence Transformer 模型 <../sentence_transformer/training_overview.html>
_ 得到改进的 v3.0 版本中,CrossEncoder 训练方法并未更新。改进 CrossEncoder 的训练计划在未来的主要更新中进行。
CrossEncoder 类是 Hugging Face AutoModelForSequenceClassification 的一个包装器,但它包含一些方法,使得训练和预测分数变得更加简单。保存的模型与 Hugging Face 完全兼容,也可以使用它们的类进行加载。
首先,你需要一些句子对数据。你可以有一个连续的分数,例如:
from sentence_transformers import InputExample
train_samples = [
InputExample(texts=["sentence1", "sentence2"], label=0.3),
InputExample(texts=["Another", "pair"], label=0.8),
]
或者你有不同的类,如在 training_nli.py 示例中:
from sentence_transformers import InputExample
label2int = {"contradiction": 0, "entailment": 1, "neutral": 2}
train_samples = [
InputExample(texts=["sentence1", "sentence2"], label=label2int["neutral"]),
InputExample(texts=["Another", "pair"], label=label2int["entailment"]),
]
然后,您定义基础模型和标签数量。您可以使用任何与 AutoModel 兼容的 Hugging Face 预训练模型:
model = CrossEncoder('distilroberta-base', num_labels=1)
对于二元任务和连续得分任务(如STS),我们设置 num_labels=1。对于分类任务,我们将其设置为我们拥有的标签数量。
我们通过调用 :meth:CrossEncoder.fit <sentence_transformers.cross_encoder.CrossEncoder.fit>
开始训练:
model.fit(
train_dataloader=train_dataloader,
evaluator=evaluator,
epochs=num_epochs,
warmup_steps=warmup_steps,
output_path=model_save_path,
)