Few-Shot Prompting¶
개념¶
Few-shot 프롬프팅은 모델에 소수의 예시(일반적으로 2~5개)를 제공한 후, 그 예시의 패턴을 학습하여 새로운 입력에 대해 유사하게 작업을 수행하도록 하는 방식입니다. 사전학습 없이 맥락 내에서 학습(In-Context Learning)하는 능력을 활용합니다.
인컨텍스트 학습(In-Context Learning)¶
개념¶
모델이 맥락 창 내의 예시를 보고 패턴을 파악하여, 마지막 입력에 대해 같은 패턴으로 응답하는 현상입니다.
작동 원리¶
- 모델이 제공된 예시들을 분석
- 입력과 출력 사이의 패턴 추출
- 마지막 입력에 대해 학습한 패턴 적용
이는 모델의 가중치를 업데이트하지 않으면서도 동작하므로 매우 효율적입니다.
시연(Demonstrations)과 주례(Exemplars)¶
시연(Demonstrations)¶
각 예시는 다음 구조를 따릅니다:
주례(Exemplars) 선택의 중요성¶
Min et al. (2022) 연구에 따르면:
- 라벨 공간(Label Space): 예시에 포함된 모든 가능한 출력 클래스가 나타나야 함
-
3개 클래스 분류에 2개 클래스만 있는 예시는 부적절
-
형식 일관성(Format Consistency): 모든 예시가 동일한 형식 따라야 함
-
혼합된 형식은 모델 성능 저하
-
분포 일치(Distribution Matching): 예시의 특성이 실제 데이터와 유사해야 함
실전 예제¶
1. 감정 분석 - 다양한 샷 수 비교¶
Zero-Shot 버전¶
프롬프트:
다음 문장의 감정을 분석하세요. 긍정(positive), 부정(negative), 중립(neutral) 중 하나로 분류하세요.
문장: "이 상품은 기대보다 별로입니다."
One-Shot 버전¶
프롬프트:
다음 문장들의 감정을 분석하세요. 긍정(positive), 부정(negative), 중립(neutral) 중 하나로 분류하세요.
예시:
문장: "이 영화는 정말 훌륭했어요!"
감정: 긍정(positive)
문장: "이 상품은 기대보다 별로입니다."
Few-Shot (3-Shot) 버전¶
프롬프트:
다음 문장들의 감정을 분석하세요. 긍정(positive), 부정(negative), 중립(neutral) 중 하나로 분류하세요.
예시:
문장: "이 영화는 정말 훌륭했어요!"
감정: 긍정(positive)
문장: "이 제품은 별로입니다."
감정: 부정(negative)
문장: "날씨가 맑습니다."
감정: 중립(neutral)
문장: "이 상품은 기대보다 별로입니다."
결과 비교: - Zero-Shot: 불안정한 성능 - One-Shot: 향상된 성능 - Few-Shot (3-Shot): 가장 안정적인 성능
2. 텍스트 분류 - 뉴스 카테고리 분류¶
프롬프트:
뉴스 기사를 카테고리로 분류하세요.
카테고리: 정치, 경제, 기술, 스포츠
예시 1:
기사: "정부가 새로운 환경 정책을 발표했습니다."
카테고리: 정치
예시 2:
기사: "삼성전자, 신형 스마트폰 출시"
카테고리: 기술
예시 3:
기사: "코스피, 3000포인트 돌파했습니다."
카테고리: 경제
예시 4:
기사: "손흥민, 해외 리그 MVP 수상"
카테고리: 스포츠
이제 다음 기사를 분류하세요:
기사: "인공지능 기술이 의료 산업을 혁신하고 있습니다."
카테고리:
모델 응답:
3. 구조화된 데이터 추출¶
프롬프트:
다음 문장에서 이름(name)과 직책(title)을 JSON 형식으로 추출하세요.
예시:
문장: "김철수는 한국은행의 부총재입니다."
JSON: {"name": "김철수", "title": "한국은행 부총재"}
문장: "이영희 교수는 서울대학교 물리학과의 학과장입니다."
JSON: {"name": "이영희", "title": "서울대학교 물리학과 학과장"}
이제 다음 문장을 분석하세요:
문장: "박민준은 삼성전자 AI 연구소의 연구원입니다."
JSON:
모델 응답:
Few-Shot의 한계¶
복잡한 추론에서의 부족함¶
Min et al. (2022)과 이후 연구들이 보여주는 한계:
- 논리 추론: 복잡한 수학 문제는 Few-Shot으로 부족
-
해결책: Chain-of-Thought와 결합
-
다단계 처리: 여러 단계의 처리 필요 시
-
해결책: Prompt Chaining 사용
-
예시 의존성: 예시의 품질에 매우 의존적
-
해결책: 신중한 예시 선택 또는 자동 예시 선택
-
맥락 창 제약: 너무 많은 예시는 맥락 창 초과
- 해결책: 중요한 예시만 선택
💡 실전 팁¶
효과적인 Few-Shot 프롬프트
- 라벨 공간 확보: 모든 가능한 출력 클래스를 예시에 포함
- 형식 일관성: 모든 예시가 동일한 형식 사용
- 대표성: 예시가 실제 데이터 분포를 대표
- 명확성: 입출력 구분이 명확해야 함
- 순서: 가장 대표적인 예시를 먼저 배치
프롬프트 템플릿
주의사항
- 3-5개 정도의 예시가 최적 (더 많다고 좋은 것 아님)
- 노이즈 있는 예시는 성능을 악화시킬 수 있음
- 예시 순서가 성능에 영향을 미칠 수 있음
선택 기준: Few-Shot vs Zero-Shot¶
| 상황 | Zero-Shot | Few-Shot |
|---|---|---|
| 작업이 명확함 | 좋음 | 불필요 |
| 특정 형식 필요 | 약함 | 우수 |
| 도메인 특화 | 약함 | 우수 |
| 높은 정확도 필요 | 약함 | 우수 |
| 빠른 응답 중요 | 좋음 | 약간 느림 |
| 토큰 절약 필요 | 좋음 | 더 많은 토큰 사용 |
📝 핵심 정리¶
- Few-shot은 맥락 내 학습을 통해 모델이 예시의 패턴을 파악하고 적용
- 라벨 공간, 형식 일관성, 분포 일치가 성공의 핵심
- 3-5개의 대표적인 예시가 최적
- 복잡한 추론이 필요하면 Chain-of-Thought와 결합 필요
- 올바른 예시 선택은 모델 성능을 획기적으로 향상시킬 수 있음