본문 바로가기
Deep Learning

모델 파인튜닝 ABC

by ssury94 2025. 2. 20.

 

📌 1. 감정 분석 모델을 파인튜닝하기 위해 필요한 라이브러리 불러오기

from transformers import AutoModelForSequenceClassification, AutoTokenizer

✔ AutoModelForSequenceClassification → 문장을 분류하는 모델 (감정 분석, 스팸 필터링 등)
✔ AutoTokenizer → 문장을 토큰으로 변환하는 기능 (BERT 기반 모델 사용 시 필수)

 

 

 

📌 2. 사전 학습된 감정 분석 모델과 토크나이저 불러오기

model_name='distilbert-base-uncased-finetuned-sst-2-english'

# 감정 분석을 위한 사전 학습된 모델과 토크나이저 불러오기
model = AutoModelForSequenceClassification.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

📌 설명:

  • distilbert-base-uncased-finetuned-sst-2-english → 감정 분석(Sentiment Analysis) 모델
  • from_pretrained(model_name) → Hugging Face에서 사전 학습된 모델을 로드

이 모델은 "긍정/부정" 감정 분석을 수행할 수 있도록 학습된 상태입니다.
✔ 즉, 추가 학습 없이 텍스트 입력만으로 감정 분석이 가능!

 

 

 

 

📌 3. 분석할 문장 준비

texts=[
    "I love this movie! It was fantastic!",  # 긍정적인 리뷰
    "This is the worst experience I have ever had.",  # 부정적인 리뷰
    """As the sun slowly began to set over the vast horizon, 
    casting a warm golden glow across the sky, painting it with hues of orange, pink, and purple..."""
]  # 중립적인 문장

📌 설명:

  • 감정 분석을 테스트할 문장 3개 준비
  • 첫 번째 문장은 긍정적인 리뷰
  • 두 번째 문장은 부정적인 리뷰
  • 세 번째 문장은 중립적이며 감정을 명확히 판별하기 어려운 문장

 

 

 

📌 4. 토크나이저로 문장을 토큰으로 변환

text = ["I love this movie! It was fantastic!"]
inputs = tokenizer(text, return_tensors='pt')

📌 설명:

  • tokenizer(text, return_tensors='pt') → 문장을 토큰화하여 PyTorch 텐서(pt)로 변환
  • 모델이 이해할 수 있도록 입력을 숫자로 변환하는 과정
  • inputs 내부에는 다음과 같은 정보가 포함됨:
    • input_ids: 토큰화된 문장 (숫자로 변환됨)
    • attention_mask: 의미 있는 토큰인지 여부 (1: 유효한 토큰, 0: 패딩)

모델은 원본 텍스트를 직접 이해하지 못하고, 반드시 숫자로 변환된 데이터(input_ids)를 사용해야 합니다.

 

 

 

 

📌 5. 감정 분석 수행

# 모델 실행 (추론 모드)
with torch.no_grad():  # 학습을 하지 않고 예측만 수행
    logits = model(**inputs)

📌 설명:

  • with torch.no_grad() → 추론 모드 (Inference Mode)
  • 학습을 하지 않고, 단순히 모델이 입력된 문장의 감정을 예측
  • model(**inputs) → 토큰화된 문장을 모델에 입력하여 감정 예측 결과(logits) 출력

여기서 얻은 logits는 "긍정/부정" 확률 값을 포함하는 숫자 배열입니다.
✔ 하지만 logits 자체는 사람이 읽을 수 없는 숫자로 되어 있으므로, 이를 감정 점수로 변환해야 합니다.

 

 

 

 

📌 6. 예측 결과 확인

logits

📌 설명:

  • logits는 모델이 예측한 **"긍정/부정 점수"**를 포함하는 숫자 배열
  • 예제 출력 (실제 값과 다를 수 있음):
    tensor([[-2.304,  2.621]])
    
  • 첫 번째 값이 부정적인 감정 점수, 두 번째 값이 긍정적인 감정 점수

즉, 값이 높은 쪽이 모델의 예측 결과!
✔ 위 예제에서는 "2.621"이 더 크므로, 모델은 이 문장을 긍정적인 리뷰로 판단합니다.

 

 

 

 

📌 7. 소프트맥스(Softmax) 적용하여 확률 변환

import torch.nn.functional as F

# logits을 확률 값으로 변환 (소프트맥스 함수 적용)
probs = F.softmax(logits.logits, dim=-1)

# 확률 출력
print(probs)

📌 설명:

  • logits 값은 확률 값이 아니므로, 이를 소프트맥스(Softmax) 함수를 이용해 확률로 변환
  • F.softmax(logits, dim=-1) → 각 감정(긍정/부정)의 확률을 계산
  • 예제 출력 (실제 값과 다를 수 있음):
    tensor([[0.02, 0.98]])  # → 긍정일 확률 98%
    

이제 확률 값으로 변환되었으므로, 직관적으로 감정을 판단할 수 있음
✔ 0.98 (98%) 이므로, "이 문장은 매우 긍정적" 이라는 결론!

 

 

 

 

📌 8. 최종 감정 분석 결과 출력

# 예측된 감정 클래스 가져오기
predicted_class = torch.argmax(probs, dim=-1).item()

# 감정 레이블 매핑
labels = ["Negative", "Positive"]

# 결과 출력
print(f"Predicted Sentiment: {labels[predicted_class]}")

📌 설명:

  • torch.argmax(probs, dim=-1) → 가장 높은 확률을 가진 감정 클래스를 선택
  • labels = ["Negative", "Positive"] → 0: 부정(Negative), 1: 긍정(Positive)
  • 최종적으로 "Positive" 또는 "Negative" 결과 출력

✔ 예제 출력:

Predicted Sentiment: Positive

✔ 즉, "I love this movie! It was fantastic!" 문장은 긍정적인 리뷰라고 모델이 예측함!

 

 

 

📌 최종 정리

단계 설명

1. 사전 학습된 모델 로드 distilbert-base-uncased-finetuned-sst-2-english 모델 사용
2. 입력 데이터 준비 감정 분석할 문장 리스트 작성
3. 토크나이징(Tokenization) tokenizer()를 사용해 문장을 숫자로 변환
4. 감정 분석 수행 (추론) model(**inputs) 실행하여 예측 수행
5. 소프트맥스 변환 F.softmax()로 확률 값 변환
6. 최종 감정 결과 출력 torch.argmax()를 사용하여 긍정/부정 예측

 

 

 

 

 

 

💡 이 코드의 핵심 개념

사전 학습된 감정 분석 모델을 활용하여 추가 학습 없이 감정을 예측
토크나이징(Tokenization) → 모델 예측(Logits) → 소프트맥스 변환(Probabilities) → 감정 판별(Labeling) 과정
Hugging Face의 Transformers 라이브러리를 사용하여 간단하게 감정 분석 수행 가능!

이제 파인튜닝 없이도 사전 학습된 감정 분석 모델을 활용하는 방법을 알게 되었어요! 🚀