콘텐츠로 이동

Few-Shot Prompting

개념

Few-shot 프롬프팅은 모델에 소수의 예시(일반적으로 2~5개)를 제공한 후, 그 예시의 패턴을 학습하여 새로운 입력에 대해 유사하게 작업을 수행하도록 하는 방식입니다. 사전학습 없이 맥락 내에서 학습(In-Context Learning)하는 능력을 활용합니다.

인컨텍스트 학습(In-Context Learning)

개념

모델이 맥락 창 내의 예시를 보고 패턴을 파악하여, 마지막 입력에 대해 같은 패턴으로 응답하는 현상입니다.

작동 원리

  1. 모델이 제공된 예시들을 분석
  2. 입력과 출력 사이의 패턴 추출
  3. 마지막 입력에 대해 학습한 패턴 적용

이는 모델의 가중치를 업데이트하지 않으면서도 동작하므로 매우 효율적입니다.

시연(Demonstrations)과 주례(Exemplars)

시연(Demonstrations)

각 예시는 다음 구조를 따릅니다:

입력: [사용자 입력]
출력: [기대하는 출력]

주례(Exemplars) 선택의 중요성

Min et al. (2022) 연구에 따르면:

  1. 라벨 공간(Label Space): 예시에 포함된 모든 가능한 출력 클래스가 나타나야 함
  2. 3개 클래스 분류에 2개 클래스만 있는 예시는 부적절

  3. 형식 일관성(Format Consistency): 모든 예시가 동일한 형식 따라야 함

  4. 혼합된 형식은 모델 성능 저하

  5. 분포 일치(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 수상"
카테고리: 스포츠

이제 다음 기사를 분류하세요:
기사: "인공지능 기술이 의료 산업을 혁신하고 있습니다."
카테고리:

모델 응답:

카테고리: 기술
설명: 기사가 AI 기술과 의료 응용에 관한 내용으로, 기술 카테고리에 해당합니다.

3. 구조화된 데이터 추출

프롬프트:
다음 문장에서 이름(name)과 직책(title)을 JSON 형식으로 추출하세요.

예시:
문장: "김철수는 한국은행의 부총재입니다."
JSON: {"name": "김철수", "title": "한국은행 부총재"}

문장: "이영희 교수는 서울대학교 물리학과의 학과장입니다."
JSON: {"name": "이영희", "title": "서울대학교 물리학과 학과장"}

이제 다음 문장을 분석하세요:
문장: "박민준은 삼성전자 AI 연구소의 연구원입니다."
JSON:

모델 응답:

JSON: {"name": "박민준", "title": "삼성전자 AI 연구소 연구원"}

Few-Shot의 한계

복잡한 추론에서의 부족함

Min et al. (2022)과 이후 연구들이 보여주는 한계:

  1. 논리 추론: 복잡한 수학 문제는 Few-Shot으로 부족
  2. 해결책: Chain-of-Thought와 결합

  3. 다단계 처리: 여러 단계의 처리 필요 시

  4. 해결책: Prompt Chaining 사용

  5. 예시 의존성: 예시의 품질에 매우 의존적

  6. 해결책: 신중한 예시 선택 또는 자동 예시 선택

  7. 맥락 창 제약: 너무 많은 예시는 맥락 창 초과

  8. 해결책: 중요한 예시만 선택

💡 실전 팁

효과적인 Few-Shot 프롬프트

  1. 라벨 공간 확보: 모든 가능한 출력 클래스를 예시에 포함
  2. 형식 일관성: 모든 예시가 동일한 형식 사용
  3. 대표성: 예시가 실제 데이터 분포를 대표
  4. 명확성: 입출력 구분이 명확해야 함
  5. 순서: 가장 대표적인 예시를 먼저 배치

프롬프트 템플릿

[작업 설명]

예시:
입력: [예시 입력 1]
출력: [예시 출력 1]

입력: [예시 입력 2]
출력: [예시 출력 2]

입력: [예시 입력 3]
출력: [예시 출력 3]

이제 다음을 처리하세요:
입력: [실제 입력]

주의사항

  • 3-5개 정도의 예시가 최적 (더 많다고 좋은 것 아님)
  • 노이즈 있는 예시는 성능을 악화시킬 수 있음
  • 예시 순서가 성능에 영향을 미칠 수 있음

선택 기준: Few-Shot vs Zero-Shot

상황 Zero-Shot Few-Shot
작업이 명확함 좋음 불필요
특정 형식 필요 약함 우수
도메인 특화 약함 우수
높은 정확도 필요 약함 우수
빠른 응답 중요 좋음 약간 느림
토큰 절약 필요 좋음 더 많은 토큰 사용

📝 핵심 정리

  • Few-shot은 맥락 내 학습을 통해 모델이 예시의 패턴을 파악하고 적용
  • 라벨 공간, 형식 일관성, 분포 일치가 성공의 핵심
  • 3-5개의 대표적인 예시가 최적
  • 복잡한 추론이 필요하면 Chain-of-Thought와 결합 필요
  • 올바른 예시 선택은 모델 성능을 획기적으로 향상시킬 수 있음