LLM Fine Tune — точность проверки намного выше точности тестирования.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 LLM Fine Tune — точность проверки намного выше точности тестирования.

Сообщение Anonymous »

Я работаю над тонкой настройкой LLama3.2 для задачи классификации текста (10 классов).
Я использую преобразователи + библиотеку Unsloth. >
Размер моего набора данных составляет ~68000 записей (классы не сбалансированы)
Я разделил его на 90/10/10
Ниже приведен соответствующий раздел кода:

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

    @staticmethod
def preprocess_logits_for_metrics(logits, labels):
"""
Preprocess the logits to prepare for metric computation.
"""
if isinstance(logits, tuple):
logits = logits[0]

pred_ids = logits.argmax(dim=-1)
return pred_ids

def compute_metrics(self, eval_preds):
preds, labels = eval_preds
labels = labels[:, 1:]
preds = preds[:, :-1]

# -100 is a default value for ignore_index used by DataCollatorForCompletionOnlyLM
mask = labels == -100

# replace -100 with a value that the tokenizer can decode
labels[mask] = self.tokenizer.pad_token_id
preds[mask] = self.tokenizer.pad_token_id

decoded_labels = self.tokenizer.batch_decode(labels, skip_special_tokens=True)
decoded_preds = self.tokenizer.batch_decode(preds, skip_special_tokens=True)

bleu_score = bleu.compute(predictions=decoded_preds, references=decoded_labels)
# accuracy takes in lists of integers,
# and we want to evaluate only the parts that are not -100,
# hence the mask negation (~)
accuracy = acc.compute(predictions=preds[~mask], references=labels[~mask])

return {**bleu_score, **accuracy}

def create_trainer(self):
train_args = TrainingArguments(
per_device_train_batch_size=2,
gradient_accumulation_steps=2,
warmup_steps=200,
gradient_checkpointing=True,
per_device_eval_batch_size=1,
num_train_epochs=1,
learning_rate=2e-4,
fp16=not is_bfloat16_supported(),
bf16=is_bfloat16_supported(),
logging_steps=1,
optim="adamw_8bit",
weight_decay=0.01,
lr_scheduler_type="cosine",
report_to="none",
seed=3407,
output_dir=self.output_dir,
eval_strategy="steps",
eval_steps=0.2,
)

trainer = SFTTrainer(
model=self.model,
compute_metrics=self.compute_metrics,
preprocess_logits_for_metrics=self.preprocess_logits_for_metrics,
tokenizer=self.tokenizer,
train_dataset=self.train_data,
eval_dataset=self.eval_data,
dataset_text_field="text",
max_seq_length=self.max_seq_length,
dataset_num_proc=4,
packing=False,  # Can make training 5x faster for short sequences.
args=train_args,
dataset_kwargs={
"add_special_tokens": False,
"append_concat_token": False,
}
)

return trainer
Проблема в том, что хотя точность проверки кажется очень хорошей (около 93%), общая точность моего теста составляет около 73%.
Ниже приведен пример такого вывода проверки:

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

{'eval_loss': 0.33367401361465454, 'eval_bleu': 0.8965235057358906, 'eval_precisions': [0.9539581633741162, 0.9097976877705707, 0.8791150777260647, 0.8524279823068618], 'eval_brevity_penalty': 0.9983142831618589, 'eval_length_ratio': 0.9983157023870982, 'eval_translation_length': 5420418, 'eval_reference_length': 5429563, 'eval_accuracy': 0.9282161997238673, 'eval_runtime': 467.193, 'eval_samples_per_second': 7.267, 'eval_steps_per_second': 7.267, 'epoch': 0.2}
Я не верю, что произошла утечка данных.
Чем это можно объяснить?

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

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

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

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

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

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

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