1.Trainer API
Hugging Face의 Transformers 라이브러리에서 제공하는 모델 훈련과 평가를 간편하게 수행할 수 있는 고수준 API
1-1.trainer객체
- model: 사전 학습된 모델을 전달
- training_args: 앞에서 설정한 학습 및 평가 관련 설정을 전달
- train_dataset: 학습에 사용할 데이터셋입니다. 여기서는 "train" 키에 해당하는 데이터셋
- eval_dataset: 모델 평가에 사용할 검증 데이터셋입니다. 여기서는 "validation" 키에 해당하는 데이터셋
- data_collator: 입력 데이터의 패딩 및 변환 작업을 수행하는 객체
- tokenizer: 모델에 들어갈 텍스트를 변환하는 토크나이저
trainer = Trainer(
model,
training_args,
train_dataset=tokenized_datasets["train"],
eval_dataset=tokenized_datasets["validation"],
data_collator=data_collator,
tokenizer=tokenizer,
)
1-2.train()
모델을 학습시키는 메소드
모델의 성능을 점진적으로 향상시킨다.
trainer.train()
1-3.evaluate()
모델의 성능을 평가하는 메소드로, 주어진 검증 데이터를 통해 모델의 정확도나 다른 메트릭스를 계산한다.
trainer.evaluate()
2.학습
BERT 모델을 사용해 문장 분류를 위한 모델을 학습하는 과정
from datasets import load_from_disk
from transformers import TrainingArguments,AutoModelForSequenceClassification,Trainer,DataCollatorWithPadding,AutoTokenizer
### 데이터셋 로드
tokenized_datasets = load_from_disk("./tokenized_datasets")
### 토크나이저와 모델 로드, 데이터셋 패딩
checkpoint = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
data_collator = DataCollatorWithPadding(tokenizer=tokenizer)
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=2)
### Trainer 설정
training_args = TrainingArguments(
output_dir="test-trainer", # 저장 디렉토리
num_train_epochs=3, # 학습 에포크 수
per_device_train_batch_size=8, # 학습 배치 크기
evaluation_strategy="epoch", # 매 에포크마다 평가
save_strategy="epoch", # 매 에포크마다 체크포인트 저장
logging_dir="test-logs", # 로그 저장 디렉토리
)
### Trainer 객체 생성
trainer = Trainer(
model,
training_args,
train_dataset=tokenized_datasets["train"],
eval_dataset=tokenized_datasets["validation"],
data_collator=data_collator,
tokenizer=tokenizer,
)
### Trainer 학습
trainer.train()
3.평가
미리 학습된 checkpoint의 모델을 사용하여 문장 분류 작업을 평가하는 과정
from datasets import load_from_disk
from transformers import TrainingArguments,AutoModelForSequenceClassification,Trainer,DataCollatorWithPadding,AutoTokenizer
import numpy as np
import evaluate
### 데이터셋 로드
tokenized_datasets = load_from_disk("./tokenized_datasets")
### checkpoint 경로
checkpoint_path = "test-trainer/checkpoint-1377"
### 토크나이저와 모델 로드, 데이터셋 패딩
checkpoint = checkpoint_path
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
data_collator = DataCollatorWithPadding(tokenizer=tokenizer)
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=2)
### Trainer 설정
training_args = TrainingArguments("test-trainer", evaluation_strategy="epoch")
### 평가 함수
def compute_metrics(eval_preds):
metric = evaluate.load("glue", "mrpc")
logits, labels = eval_preds.predictions, eval_preds.label_ids
predictions = np.argmax(logits, axis=-1)
return metric.compute(predictions=predictions, references=labels)
### Trainer 객체 생성
trainer = Trainer(
model,
training_args,
train_dataset=tokenized_datasets["train"],
eval_dataset=tokenized_datasets["validation"],
data_collator=data_collator,
tokenizer=tokenizer,
compute_metrics=compute_metrics,
)
### Trainer 평가
predictions = trainer.predict(tokenized_datasets["validation"])
print(predictions.predictions.shape, predictions.label_ids.shape)
print(compute_metrics(predictions))
(408, 2) (408,)
{'accuracy': 0.8504901960784313, 'f1': 0.8942807625649913}
- (408, 2) : 예측된 로그it 값이 408개의 샘플에 대해 2개의 클래스 값을 가진다.
- (408,) : 실제 레이블 값 역시 408개의 샘플에 대해 각각의 클래스 값을 포함한다.
- { 'accuracy': 0.85, 'f1': 0.89 } : 정확도와 F1 점수를 통해 모델 성능을 평가한 결과
반응형
'AI' 카테고리의 다른 글
[AI] ONNX (Open Neural Network Exchange) (0) | 2025.01.09 |
---|---|
[AI] DataSet 용어 (0) | 2025.01.09 |
[AI] transformers DataSet 전처리 (0) | 2025.01.08 |