greatsangho의 이야기

캠프57일차 - 특정 LLM 모델 (BERT)을 Foundation 모델로 선택하여 도메인 특화 데이터로 파인튜닝 본문

프로그래밍/SK AI 캠프

캠프57일차 - 특정 LLM 모델 (BERT)을 Foundation 모델로 선택하여 도메인 특화 데이터로 파인튜닝

greatsangho 2024. 11. 15. 19:53

LLM
   - Bert fineTune

!pip install transformers
!pip install datasets

import os
import re
import numpy as np
from tqdm import tqdm
import tensorflow as tf
from transformers import *
import pandas as pd

# 토크나이져
tokenizer = AutoTokenizer.from_pretrained("bert-base-multilingual-cased")
# 모델 로드
model = AutoModelForSequenceClassification.from_pretrained("bert-base-multilingual-cased", num_labels = 2)

이제 저번과 같이 데이터를 불러온 뒤 전처리를 진행하고 데이터셋으로 저장한다.

모델은 bert-base-multilingal-cased를 불러온다.

training_args, compute_metrics, Trainer를 세팅한 뒤 trainer.train()을 진행한다.

trainer.evaluate()로 이진 분류가 잘 이루어졌는지 확인할 수 있다.

# 추론
text = '교도소 이야기구먼 솔직히 재미는 없다 평점 조정'
import torch
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
model.to(device)
model.eval() # 필수는 아님
inputs = tokenizer(text, max_length=MAX_LENGTH,padding='max_length',truncation=True,return_tensors='pt')
inputs = inputs.to(device)
predictions = model(**inputs)
print(predictions)
print(predictions.logits.shape)
predictions = torch.argmax(predictions.logits, dim=-1)
print(predictions, predictions.item())
'긍정' if predictions.item() == 1 else '부정'

학습한 데이터를 집어 넣어 긍정/부정을 평가한다. 평가할 때에는 처음 토크나이저에 넣어 학습시킨 모습 그대로 넣어준다.

파인튜닝을 진행하지 않은 상황에서는 긍정이라고 판단하지만, 파인튜닝을 진행한 뒤에는 부정으로 판단하는 것을 확인할 수 있다.

 

Bert를 이용한 감정 다중분류 finetune

AI허브의 데이터셋인 감성 대화 말뭉치를 활용하여 다양한 감정을 평가 및 분류해보았다.

감정이 다양한 코드로 나타내어지기 때문에 라벨 인코딩을 진행하였다.

마찬가지로 지금까지 진행한 한글 전처리 및 데이터셋으로 변환, TrainingArguments 설정, 평가를 위한 compute_metrics 정의, 그리고 Trainer 설정을 한 뒤 trainer.train()을 진행한다.

감정은 따로 리스트로 만들어준다.

emotion_txt = []
emotion_label = []
for idx,txt in enumerate(data.split()):
  if idx % 2 == 0:
    emotion_txt.append(txt)
  else:
    emotion_label.append(txt)

위와 마찬가지로 추론을 진행하여 가장 큰 값에 대해 반환하면 원하는

다른 Llama 2,Alpaca 모델들은 무거운 관계로 A100 GPU를 사용해도 부족하여 BERT로 진행하였다.

 

GPT 모델 중 기존 skt의 kogpt2보다 발달한 skt/ko-gpt-trinity-1.2B-v0.5 를 찾았는데 파인튜닝을 시도해볼 예정이다.

점점 컴퓨터 자원과 훈련 시간이 길어지는 것을 보며 앞으로 가볍고 정확한 모델이 왜 중요한지 그 이유를 알 것 같다.

반응형