# 학습 및 테스트 데이터 불러오기
df_train = pd.read_csv(ROOT+'train_split.csv', encoding='utf-8')
df_test = pd.read_csv(ROOT+'test_split.csv', encoding='utf-8')
# DataFrame -> Dataset
train_set = datasets.Dataset.from_pandas(df_train)
test_set = datasets.Dataset.from_pandas(df_test)
# 토큰화 함수 정의
def train_batch_preprocess(batch):
return tokenizer(batch['cor_text'], padding='longest', truncation=True)
# map 메소드를 이용한 토큰화 (cor_text는 더이상 필요 없으므로 제거)
tk_train_set = train_set.map(train_batch_preprocess,
batched=True,
remove_columns=['cor_text'])
tk_test_set = test_set.map(train_batch_preprocess,
batched=True,
remove_columns=['cor_text'])
# 결과 확인
df_temp = pd.DataFrame(tk_train_set)
df_temp.head(2)
from transformers import TrainingArguments, Trainer
import evaluate
params = {
'output_dir' : 'test_trainer',
'num_train_epochs' : 3,
'per_device_train_batch_size' : 4,
'per_device_eval_batch_size' : 4,
'gradient_accumulation_steps' : 8,
'evaluation_strategy' : 'no',
'save_strategy' : 'steps',
'save_steps' : 1000,
'save_total_limit' : 1,
'learning_rate' : 2e-5,
'warmup_ratio' : 0.03,
'lr_scheduler_type' : 'cosine',
'logging_steps' : 1,
}
training_args = TrainingArguments(**params)
metric = evaluate.load("accuracy")
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tk_train_set,
eval_dataset=tk_test_set,
compute_metrics=metric,
)
trainer.train()
펑!
num_labels
를 지정해야한다.from transformers import AutoTokenizer, AutoModelForSequenceClassification
tokenizer = AutoTokenizer.from_pretrained("snunlp/KR-FinBert-SC")
model = AutoModelForSequenceClassification.from_pretrained("snunlp/KR-FinBert-SC", num_labels=5, ignore_mismatched_sizes=True)
KR-FinBert is trained for 5.5M steps with the maxlen of 512, training batch size of 32, and learning rate of 5e-5, taking 67.48 hours to train the model using NVIDIA TITAN XP.
EarlyStoppingCallback
을 적용하였다. precision recall f1-score support
0 0.89 0.85 0.87 159
1 0.81 0.84 0.82 73
2 0.77 0.79 0.78 73
3 0.83 0.86 0.84 56
4 0.91 1.00 0.95 10
accuracy 0.84 371
macro avg 0.84 0.87 0.85 371
weighted avg 0.84 0.84 0.84 371
삽질에 삽질을 거듭했던 하루였다. 그래도 괜찮은 모델과 학습 파라미터를 찾았으니 kaggle에서 해야할 일의 방향성을 명확히 잡은 것 같다.
그리고 다른 시도들도 해보고 싶은 것이 많았는데, Torch 문법의 벽에 가로막혀 하지 못한 것들이 많다.. 오류 때문에 시간도 많이 까먹게 되었는데, 꼭 Torch 문법도 공부해야겠다.