SBERT Точная настройка всегда останавливается до завершения всех эпох.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 SBERT Точная настройка всегда останавливается до завершения всех эпох.

Сообщение Anonymous »

Я работаю над проектом с использованием предварительно обученных моделей SBERT (в частности, MiniLM) для проекта классификации текста с 995 классификациями. По большей части я следую шагам, изложенным здесь, и, кажется, все работает.
Моя проблема возникает при фактическом обучении модели. Независимо от того, какие значения я задавал в аргументах обучения, обучение всегда заканчивается раньше и никогда не завершает все пакеты. Например, я установил num_train_epochs=1, но он достигает только 0,49 эпохи. Если num_train_epochs=4, он всегда заканчивается на 3,49 эпохе.
Вот мой код:

Код: Выделить всё

from datasets import load_dataset
from sentence_transformers import (
SentenceTransformer,
SentenceTransformerTrainer,
SentenceTransformerTrainingArguments,
SentenceTransformerModelCardData,
)
from sentence_transformers.losses import BatchAllTripletLoss
from sentence_transformers.training_args import BatchSamplers
from sentence_transformers.evaluation import TripletEvaluator

model = SentenceTransformer(
"nreimers/MiniLM-L6-H384-uncased",
model_card_data=SentenceTransformerModelCardData(
language="en",
license="apache-2.0",
model_name="all-MiniLM-L6-v2",
)
)

loss = BatchAllTripletLoss(model)
# Loss overview: https://www.sbert.net/docs/sentence_transformer/loss_overview.html
# This particular loss method: https://www.sbert.net/docs/package_reference/sentence_transformer/losses.html#batchalltripletloss

# training args: https://huggingface.co/docs/transformers/main/en/main_classes/trainer#transformers.TrainingArguments
args = SentenceTransformerTrainingArguments(
# Required parameter:
output_dir="finetune/model20240924",
# Optional training parameters:
num_train_epochs=1,
max_steps = -1,
per_device_train_batch_size=8,
per_device_eval_batch_size=8,
learning_rate=1e-5,
warmup_ratio=0.1,
fp16=True,  # Set to False if you get an error that your GPU can't run on FP16
bf16=False,  # Set to True if you have a GPU that supports BF16
batch_sampler=BatchSamplers.GROUP_BY_LABEL,  #
# Optional tracking/debugging parameters:
eval_strategy="no",
eval_steps=100,
save_strategy="epoch",
# save_steps=100,
save_total_limit=2,
logging_steps=100,
run_name="miniLm-triplet",  # Will be used in W&B if `wandb` is installed
)

trainer = SentenceTransformerTrainer(
model=model,
args=args,
train_dataset=trainDataset,
eval_dataset=devDataset,
loss=loss,
#evaluator=dev_evaluator,
)
trainer.train()
Обратите внимание, что я не использую оценщик, поскольку мы создаем модель и тестируем ее постфактум с использованием специального тестового набора значений. Мой набор данных структурирован следующим образом:

Код: Выделить всё

Dataset({
features: ['Title', 'Body', 'label'],
num_rows: 23961
})
при этом набор данных dev имеет ту же структуру, только с меньшим количеством строк. Это дает следующий результат:

Код: Выделить всё

 [1473/2996 57:06 < 59:07, 0.43 it/s, Epoch 0/1]
Step    Training Loss
100     1.265600
200     0.702700
300     0.633900
400     0.505200
500     0.481900
600     0.306800
700     0.535600
800     0.369800
900     0.265400
1000    0.345300
1100    0.516700
1200    0.372600
1300    0.392300
1400    0.421900

TrainOutput(global_step=1473, training_loss=0.5003972503496366, metrics={'train_runtime': 3427.9198, 'train_samples_per_second': 6.99, 'train_steps_per_second': 0.874, 'total_flos': 0.0, 'train_loss': 0.5003972503496366, 'epoch': 0.4916555407209613})
Как бы я ни корректировал значения, я не могу заставить его выполнить все пакеты. Буду рад любым советам!

Подробнее здесь: https://stackoverflow.com/questions/790 ... all-epochs
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»