📌 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 라이브러리를 사용하여 간단하게 감정 분석 수행 가능!
이제 파인튜닝 없이도 사전 학습된 감정 분석 모델을 활용하는 방법을 알게 되었어요! 🚀