提问人:pav 提问时间:11/14/2023 更新时间:11/15/2023 访问量:35
微调不带标签的 Huggingface 模型
Fine tune Huggingface model without labels
问:
我读到Hugginface模型可以微调
在使用 PyTorch Trainer 训练一节中,有一个代码示例:
from transformers import AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained("bert-base-cased", num_labels=5)
...
但是,如果我想微调一个计算句子相似度的模型(例如 paraphrase-multilingual-mpnet-base-v2),这是一个介于 0 和 1 之间的数字,那么 ?模型中没有标签。
在这种情况下应该如何指定?num_labels
num_labels
答:
2赞
inverted_index
11/15/2023
#1
在处理分类任务时,通常使用该参数。它的主要作用是在基本语言模型(如 BERT 或类似模型)之上附加一个分类头(通常称为 CLS 头),以便进行微调。但是,如果您的目标是从输入文本中提取原始嵌入或表示,则应绕过使用 .num_labels
AutoModelForSequenceClassification
为此,您可以改为初始化 transformers 库中的通用类,如下所示:AutoModel
from transformers import AutoModel
model = AutoModel.from_pretrained("bert-base-cased")
此方法可确保在没有额外分类头的情况下获取基本语言模型,因此该方法的输出将只是语言模型的原始隐藏表示形式。forward
评论
0赞
pav
11/15/2023
感谢您的回复。我接下来应该使用类吗?我今天读了很多关于 Huggingface 微调的文章,但没有发现有人对原始嵌入进行微调。这有意义吗?实际上,我的目标是更改某些短语之间的余弦相似性,这意味着应该更改该短语的嵌入。现在我很困惑如何指定一对句子的余弦相似度应该接近 1,而其他句子的相似度应该接近 0。我需要为此编写自定义函数吗?transformers.Trainer
compute_metrics
0赞
inverted_index
11/17/2023
是的,在加载模型后,您需要将其传递给 进行微调。这就是 Transformers 使用的模块化微调方式。但是,由于您希望使训练器适应您的特定需求,因此您需要继承一个训练器类(例如 MyTrainer),然后覆盖其功能。 不参与训练过程,而是参与评估,在评估中,您希望在验证集上计算一组指标。我建议看看 Huggingface 提供的示例来获得一个生动的想法。AutoModel
trasnformers.Trainer
compute_loss(...)
compute_metrics
评论