Few-shot
"Few-shot"은 머신러닝, 특히 자연어 처리(NLP)에서 사용되는 개념으로, 모델이 매우 적은 예시(few examples)**를 보고 학습하여 새로운 작업을 수행할 수 있도록 하는 방식입니다.
Few-shot 학습을 활용함으로써, 언어 모델은 주어진 예제들을 참고하여 더 정확하고 일관된 응답을 생성할 수 있습니다. 이는 특히 특정 도메인이나 형식의 질문에 대해 모델의 성능을 향상시키는 데 효과적입니다.
이 방식은 Zero-shot(아예 학습 데이터 없이 수행하는 방식)과 One-shot(하나의 예시만 제공) 학습 방식의 중간에 위치하는 개념입니다.
예시
- 문장 1: "오늘 정말 기분이 좋다!"
라벨: 긍정적 - 문장 2: "오늘은 정말 피곤하고 지친 하루였다."
라벨: 부정적 - 문장 3: "어제 영화가 정말 재밌었어."
라벨: 긍정적 - 문장 4: "날씨가 흐리고 우울해."
라벨: 부정적
입력
"다음 문장이 긍정적인지 부정적인지 판단하세요:
'오늘은 멋진 하루였어!'"
출력
라벨 : 긍정적
간단한 감정 분석 예시 코드
import torch
from torch import nn
from transformers import BertTokenizer, BertForSequenceClassification, AdamW
model_name = 'bert-base-uncased'
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertForSequenceClassification.from_pretrained(model_name, num_labels=2)
# Few-shot 학습을 위한 간단한 데이터
train_data = [
("I am feeling great today!", 1), # 긍정적
("This day is terrible.", 0), # 부정적
("I love this weather.", 1), # 긍정적
("I am exhausted and sad.", 0) # 부정적
]
# 데이터 전처리 함수
def preprocess_data(data):
texts, labels = zip(*data)
encodings = tokenizer(list(texts), padding=True, truncation=True, return_tensors='pt')
labels = torch.tensor(labels)
return encodings, labels
# 데이터 준비
encodings, labels = preprocess_data(train_data)
optimizer = AdamW(model.parameters(), lr=5e-5)
# 모델 학습
model.train()
for epoch in range(3): # 학습 반복
optimizer.zero_grad()
outputs = model(**encodings, labels=labels)
# 손실 계산
loss = outputs.loss
print(f"Epoch {epoch+1}, Loss: {loss.item()}")
# 역전파
loss.backward()
# 파라미터 업데이트
optimizer.step()
# 모델 평가
def predict(text):
model.eval()
inputs = tokenizer(text, return_tensors='pt', padding=True, truncation=True)
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits
prediction = torch.argmax(logits, dim=1).item()
return "긍정적" if prediction == 1 else "부정적"
# 예측
test_text = "I feel amazing!"
print(f"입력 문장: '{test_text}' -> 예측 결과: {predict(test_text)}")
위와 같이 4개의 예시 문장을 이용해 BERT 모델을 훈련시키고, 새로운 문장을 예측할 수 있습니다.
'개발 | 프로젝트' 카테고리의 다른 글
CORS란? / React + Spring Boot CORS 문제 해결 (0) | 2025.03.20 |
---|---|
KoBERT 모델 (0) | 2025.03.13 |
Whisper로 STT(Speech-To-Text) 구현하기 (2) | 2025.03.07 |
FFmpeg으로 영상 데이터 음성 변환 (MP4 to WAV) (0) | 2025.03.06 |
[Spring] MVC 동작 구조 (0) | 2025.02.15 |