Я работаю над тонкой настройкой 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%.
Ниже приведен пример такого вывода проверки:
Я работаю над тонкой настройкой LLama3.2 для задачи классификации текста (10 классов). Я использую преобразователи + библиотеку Unsloth. > Размер моего набора данных составляет ~68000 записей (классы не сбалансированы) Я разделил его на 90/10/10 Ниже приведен соответствующий раздел кода: [code] @staticmethod def preprocess_logits_for_metrics(logits, labels): """ Preprocess the logits to prepare for metric computation. """ if isinstance(logits, tuple): logits = logits[0]
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])
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 [/code] Проблема в том, что хотя точность проверки кажется очень хорошей (около 93%), общая точность моего теста составляет около 73%. Ниже приведен пример такого вывода проверки: [code]{'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} [/code] Я не верю, что произошла утечка данных. Чем это можно объяснить?
Я использую T5, текстовую модель для выполнения проверки орфографии в данном наборе данных, состоящем из обзоров. Модель точно настроена в 2 итерациях 20 тыс. Обзоров и 40 тыс. Обзоров каждый. потери обучения и потери проверки во всем этом процессе...
function st_makeenvelope (двойная точность, двойная точность, двойная точность, двойная точность, целое число) не существует
Подсказка: Никакая функция не соответствует данным имени и типам аргументов. Вам может потребоваться добавить явные типы....
Я пытаюсь создать модель преобразователя зрения для своего личного проекта с помощью PyTorch.
Проблема в том, что когда я запускаю тестовый код, я не уверен, что Я правильно рассчитываю потери при обучении, потери при проверке, точность обучения и...
Я создаваю модель Seedencetransformer ('All-Minilm-L6-V2'), используя словарь (JSON) с названием Category_Descriptions в качестве набора данных.
Ниже приведен Структура данных Category_descriptions :
{
CategoryA : {
CategorySearch : Description...
Я создаваю модель Seedencetransformer ('All-Minilm-L6-V2'), используя словарь (JSON) с названием Category_Descriptions в качестве набора данных.
Ниже приведен Структура данных Category_descriptions :
{
CategoryA : {
CategorySearch : Description...