제로샷 프롬프팅은 원하는 답의 예시를 전혀 보여 주지 않고 지시만으로 모델에게 작업을 시키는 방법입니다. "이 문단을 스페인어로 번역해 줘"와 "이 이메일을 두 문장으로 요약해 줘"가 제로샷 프롬프트입니다. 사람들이 채팅 모델을 쓰는 기본 방식이고, 흔한 작업이라면 대개 이것으로 충분합니다.
제로샷의 뜻
머신러닝에서 "샷(shot)"은 풀이가 된 예시 하나를 뜻합니다. 이 용어는 채팅 모델보다 오래되었지만, 프롬프팅에서의 의미는 Brown 등의 2020년 논문 "Language Models are Few-Shot Learners"로 널리 알려졌습니다. 이 논문은 GPT-3를 세 가지 설정으로 테스트했습니다. 작업 설명에 시연을 0개, 1개, 또는 몇 개 넣었고, 어느 경우에도 모델을 다시 학습시키지 않았습니다. 그 모델에서는 대개 예시가 몇 개 있을 때가 없을 때보다 나았습니다.
그 이후 채팅 모델은 지시 따르기를 집중적으로 학습했고, 그래서 지금은 평범한 요청도 아주 잘 통합니다. 제로샷 프롬프트는 이 모델들이 학습한 상황 그대로입니다. 누군가 할 일을 말로 설명하고 그 일이 처리되기를 기대하는 상황입니다.
제로샷이 맥락이 없다는 뜻은 아닙니다. 좋은 제로샷 프롬프트도 독자를 밝히고, 입력을 붙여 넣고, 형식과 제약을 설명합니다. 빠지는 것은 완성된 출력 예시 하나뿐입니다.
잘 쓴 제로샷 프롬프트
아래 프롬프트는 출력 예시 없이, 출력에 대한 정확한 설명만으로 회의록에서 할 일을 뽑아냅니다. 요소를 꺼 보면서 어느 줄이 일을 하는지 확인해 보세요.
스프린트 싱크, 화요일
프리야가 금요일 전에 로그인 타임아웃 고칠 예정.
새 CI 서비스로 옮기는 것 논의, 결정 안 됨.
톰이 2.4 릴리스 노트 작성.
누군가 온보딩 문서 업데이트해야 함.
레나: 목요일까지 톰의 노트 리뷰할게요.프리야: 로그인 타임아웃 고치기 (금요일 전) 톰: 2.4 릴리스 노트 작성하기 미정: 온보딩 문서 업데이트하기 레나: 톰의 릴리스 노트 리뷰하기 (목요일까지)
형식 줄이 예시가 할 일을 대신합니다. 각 줄의 정확한 모양을 풀어 쓰므로 따라 할 예시가 필요 없습니다. 형식을 끄면 답변이 제멋대로 모양을 고르는데, 흔히 이름을 굵게 쓴 글머리 기호 목록이 나옵니다. 읽기에는 괜찮지만 업무 관리 도구에 깔끔하게 붙여 넣을 수는 없습니다. 제약 조건을 끄면 CI 논의가 할 일로 나타날 수 있습니다. 결정되지 않은 주제는 포함하지 않는다고 모델에게 알려 준 것이 없기 때문입니다.
제로샷으로 충분한 경우
모델이 여러분의 말만으로 모든 것을 추론할 수 있을 때 제로샷이 통합니다.
- 흔한 작업일 때. 요약, 번역, 설명, 문법 교정, 명확한 명세에 따른 함수 작성은 모두 모델이 학습에서 셀 수 없이 본 작업입니다.
- 출력을 정확히 설명할 수 있을 때. "항목 하나당 한 줄, 담당자 먼저"는 예시만큼 명확합니다. 프로그램이 읽을 형식을 설명하는 방법은 구조화된 출력을 참고하세요.
- 분류 이름이 말 그대로의 뜻일 때. 리뷰를 긍정과 부정으로 나누는 데는 보통 예시가 필요 없습니다. 이 라벨은 거의 모든 사람에게 같은 뜻이기 때문입니다.
대신 예시를 넣어야 하는 경우
말로 옮기기 어려운 것들이 있고, 제로샷 프롬프트가 빗나가기 시작하는 곳이 바로 여기입니다.
- 여러분만의 경계. 고객지원 팀이 "로그인이 안 돼요"를 버그가 아니라 계정 문제로 분류한다면 모델은 그걸 알 수 없습니다. 대부분의 사람이 택할 해석을 고를 것입니다.
- 사내 스타일. 팀의 커밋 메시지나 뉴스레터의 말투는 설명하기보다 보여 주기가 쉽습니다.
- 같은 식으로 계속 빗나갈 때. 지시를 두 번이나 고쳐 썼는데도 출력이 같은 방식으로 조금씩 빗나간다면, 고쳐 쓰기를 멈추고 올바른 답 두세 개를 보여 주세요.
이것이 few-shot 프롬프팅입니다. 제로샷으로 시작해서 돌아온 결과를 보고, 틀리는 특정 부분에만 예시를 더하는 습관이 합리적입니다.
제로샷 생각의 사슬
Kojima 등의 2022년 논문 "Large Language Models are Zero-Shot Reasoners"는 "Let's think step by step(단계별로 생각해 보자)"이라는 한 문장을 더하면, 예시가 전혀 없어도 대형 모델이 산수, 기호, 논리 문제를 눈에 띄게 더 잘 푼다는 것을 발견했습니다. 이 문구는 모델이 답 앞에 중간 단계를 쓰게 만들고, 모델이 쓴 각 단계는 다음 단계의 컨텍스트가 됩니다. 이들의 방법은 두 번의 호출을 썼습니다. 첫 번째 호출이 추론을 만들고, 두 번째 호출이 최종 답을 요청했습니다.
아래 블록에서 첫 번째 탭은 즉시 답하게 하고, 두 번째 탭은 모델에게 풀 여유를 줍니다.
12시 40분
첫 번째 답변은 기차가 만회한 10분을 빠뜨렸습니다. 모델이 처음 몇 토큰 안에 답을 정해야 할 때 생기는 종류의 실수입니다. 요즘 모델이라면 이 문제는 어느 쪽으로든 맞힐 수도 있지만, 문제의 단계가 많아질수록 차이가 커집니다. 두 번째 버전에는 장점이 하나 더 있습니다. 모든 단계가 보이므로 답이 어디서 틀렸는지 알 수 있습니다.
답하기 전에 내부적으로 추론하는 모델은 요청하지 않아도 이미 이 작업을 하므로, "단계별로 생각해 보자"는 답변을 길게 만드는 것 외에는 별로 더해 주는 것이 없습니다. few-shot 버전을 포함한 이 기법의 자세한 내용은 생각의 사슬(CoT) 프롬프팅에서 다룹니다.
제로샷과 few-shot 한눈에 비교
| 제로샷 | Few-shot | |
|---|---|---|
| 프롬프트에 들어가는 것 | 지시, 맥락, 입력 | 같은 것에 더해 입력과 답의 쌍 몇 개 |
| 잘 맞는 작업 | 출력을 설명하기 쉬운 흔한 작업 | 자체 분류 기준, 특이한 형식, 사내 스타일 |
| 비용 | 짧은 프롬프트 | 더 긴 프롬프트, 호출당 토큰 증가 |
| 흔한 실패 | 여러분의 해석이 아닌 가장 흔한 해석을 고른다 | 예시에 우연히 생긴 패턴까지 따라 한다 |
자주 묻는 질문
제로샷 프롬프팅이란 무엇인가요?
제로샷 프롬프팅은 출력 예시 없이 지시만으로 언어 모델에게 작업을 주는 것입니다. "이 이메일을 두 문장으로 요약해 줘"가 제로샷 프롬프트입니다. 최신 채팅 모델은 지시를 따르도록 학습되어 있어서 제로샷 프롬프트로도 일상적인 작업 대부분을 잘 처리합니다.
제로샷과 few-shot 프롬프팅은 어떻게 다른가요?
제로샷 프롬프트는 작업을 말로 설명합니다. Few-shot 프롬프트는 여기에 예시 몇 개, 즉 입력과 원하는 답의 쌍을 더해서 모델이 패턴을 따라 할 수 있게 합니다. 제로샷으로 시작하고, 설명보다 보여 주는 편이 쉬운 형식이나 구분을 출력이 계속 놓치면 few-shot으로 바꾸세요.
왜 제로샷이라고 부르나요?
머신러닝에서 "샷(shot)"은 풀이가 된 예시 하나를 뜻합니다. Brown 등의 2020년 GPT-3 논문 "Language Models are Few-Shot Learners"는 프롬프트에 작업 시연을 0개, 1개, 몇 개 넣고 모델을 테스트했고, 이때부터 제로샷, 원샷, few-shot이라는 이름이 프롬프팅의 표준 용어가 되었습니다.
제로샷 프롬프팅이 잘 안 통하는 경우는 언제인가요?
팀의 분류 기준이나 사내 스타일처럼 여러분만 아는 규칙에 달린 작업, 출력 형식이 특이한 작업, 모델이 너무 빨리 답해 버리는 여러 단계의 추론에서 어려움을 겪습니다. 앞의 두 가지는 예시로 해결되고, 세 번째는 단계별로 풀라고 요청하면 도움이 됩니다.
제로샷 생각의 사슬(zero-shot CoT)이란 무엇인가요?
답하기 전에 추론하라고 요청하는 제로샷 프롬프트입니다. 가장 유명한 방법은 "Let's think step by step(단계별로 생각해 보자)"을 덧붙이는 것입니다. Kojima 등은 2022년에 예시 없이 이 한 문장만으로 대형 모델의 산수와 논리 문제 성적이 좋아진다는 것을 보였습니다.