8. Zero-Shot과 Few-Shot 프롬프팅

LLM 시대, LangChain(랭체인)으로 배우는 AI 소프트웨어 개발

by AI개발자
gaebalai-blog_ai-v3-1.jpg

(1) 프롬프트 엔지니어링의 중요성

프롬프트는 LLM이 생성하는 응답의 질에 큰 영향을 미칩니다. 사용하기 위해서는 적절한 프롬프트 설계가 필수적입니다. 예를 들어, GSM8K(Cobbe et al, 2021)라는 벤치마크에 포함된 다음의 수학문제를 LLM에 풀게하는 경우를 생각해 봅시다.

llm-langchain59-2.png

여기서는 이 문제를 머신러닝을 통해 영어에서 한국어로 번역하는 형태로 다룹니다. 어떤 프롬프트를 설계해야 할까요? 여기서는 나쁜 프롬프트와 좋은 프롬프트를 비교해 보겠습니다. 먼저 나쁜 프롬프트의 예를 다음과 같이 제시합니다.


나쁜 프롬프트의 예

llm-langchain59-3.png

이 프롬프트에서는 문제에 숫자로만 대답하라는 메시지를 표시합니다. 그러나, 이 명세는 정확한 대답의 도출을 방해할 수 있습니다. 이 문제에 대해 ChatGPT-4.5는 다음과 같은 답변을 생성할 수 있습니다.

llm-langchain59-4.png

원래는 5가 많이 나왔는데 최근 GPT-4.5까지 나오면서 4o도 올바른 대답인 7이 나옵니다. 참고하시기 바랍니다.


좋은 프롬프트의 예

llm-langchain59-5.png

이 프롬프트에서는 단순히 대답만 묻는 대신 단계별로 추론과정을 표시하도록 촉구합니다.

llm-langchain61.png

이러한 결과는 사람이 문제를 해결할 때의 상황과 유사하다고 할 수 있습니다. 이러한 현상은 Transformer의 작동원리를 생각할 때도 타당하다고 할 수 있습니다. 진행한 추론과정은 곧바로 모델 자체의 추론 과정에 반영됩니다.


한편, 여기의 좋은 프롬프트 예는 나중에 설명하는 제로샷 체인 오브 쏘트(Zero-shot chain-of-Thought, CoT) 프롬프팅의 하나의 사례입니다. 다양한 방법이 지금까지 제안되어 왔습니다.


프롬프트 엔지니어링의 기술은 사용자가 직접 프롬프트를 작성할 때 활용할 수 있는 것부터 LLM프레임워크 내부에서 자동화되어 사용되는 방법까지 다양하게 존재합니다. 소개한 CoT와 같은 방법은 최근에는 LLM자체를 미세조정(fine-tuning)함으로써 사용자가 명시적으로 CoT를 요구하지 않아도 같은 성능을 발휘하도록 발전하고 있습니다. 엔지니어링을 학습해 두면, LLM이 왜 그런 답을 내놓았는지 그 동작 원리를 이해하는데 큰 도움이 될 것입니다. 특히 미세조정만으로는 대응하기 어려운 사용자가 직접 프롬프트를 설계하여 원하는 응답을 안정적으로 얻을 수 있기 때문입니다.



(2) Zero-Shot 프롬프팅

Zero-Shot 프롬프팅(Brown et al, 2020)은 LLM의 높은 범용성과 언어이해능력을 활용하여 이전에 학습하지 않은 새로운 작업도 예시없이 바로 수행할 수 있도록 하는 방법입니다.

Zero-Shot 프롬프팅에서는 태스크(task, 작업)을 명확하게 기술한 프롬프트 설계가 매우 중요하며, 일반적입니다.


작업의 목적과 기대되는 출력결과

입력데이터의 형식과 특징

출력데이터의 형식과 특징

작업과 관련된 제약조건이나 주의사항


예를 들어, 영화리뷰의 감정을 분류하는 태스크에서는 다음과 같은 형태의 프롬프트를 사용할 수 있습니다.

llm-langchain61-1.png

이러한 방식으로 Zero-shot 프롬프트를 사용할 때는 작업의 내용을 명확하게 정의하고 모델이 명확한 지침에 따라 작업을 수행하도록 프롬프트를 구성하는 것이 핵심입니다. 없이도 주어진 지시사항을 올바르게 해석하고 기대하는 결과를 보여줍니다.


이 프롬프트는 작업의 목적(영화 리뷰의 감정분류), 입력 데이터 형식(자연어 텍스트), 출력 실제로 ChatGPT-4.5에서 이 프롬프트를 제공했을 때의 결과 예는 다음과 같습니다.

llm-langchain61-2.png

이와 같이 주어진 리뷰는 명확하게 '긍정'으로 분류됩니다. Zero-Shot 프롬프팅의 주요 장점은 별도의 예시 없이 작업을 수행할 수 있다는 점입니다.

하지만, Zero-shot 프롬프팅은 모델의 일반적인 언어 이해 능력을 크게 의존하기 때문에 작업이 복잡하거나 특정 도메인의 전문지식이 요구되는 경우, 기대만큼의 성을을 얻지 못할 수도 있습니다. Few-Shot 프롬프트를 사용하여 성능을 향상시킬 수 있습니다.



(3) Few-Shot 프롬프트

Few-Shot 프롬프팅(Brown et al, 2020)은 모델이 작업을 수행할 때 소수의 예시 데이터를 제공하여 Zero-Shot 프롬프팅의 한계를 극복하기 위한 기법입니다. 맞게 조정하여 해당 작업에 특화된 성능을 효과적으로 끝어낼 수 있습니다.

Few-Shot 프롬프팅은 LLM의 문맥 내 학습(In-context Learning)이라는 능력을 활용합니다. 문맥 내 학습이란 LLM이 주어진 문맥에서 새로운 작업을 학습하는 능력을 의미합니다. Few-Shot 프롬프트에서 예제를 통해 LLM의 문맥을 제공하고 문맥 내 학습을 촉진하여 작업에 특화된 성능을 이끌어 냅니다.


위의 동일한 영화검토의 감정 분류 작업을 예로 하여, Few-Shot 프롬프트를 설명합니다. 이번에도 감정 분류 태스크에 리뷰를 긍정, 부정, 중립의 세가지로 분류할 것으로 기대하는 경우를 생각합니다. Few-shot 프롬프트에서는 다음과 같은 프롬프트를 사용하여 LLM을 이 작업에 적용할 수 있습니다.

llm-langchain61-3.png

여기서는 긍정, 부정, 중립의 예를 하나씩 제시합니다. 이러한 예시를 참고하여 LLM은 감정분류 작업에 적응할 수 있습니다. 이 프롬프트를 ChatGPT-4.5에 제공하는 결과를 다음과 같이 인용합니다.

llm-langchain61-4.png

예상대로 예시와 같이 "감정:" 뒤에 "긍정적"이라고 출력되고 있습니다. 이전 결과와 비교해 봅시다. Zero-Shot 프롬프팅에서는 문장에서의 감정을 설명하고 있는 반면에 Few-Shot 프롬프팅에서는 감정의 레벨만을 출력하고 있습니다. 이것은 주어진 예를 참고하여 감정을 분류하는 작업에 적응한 결과라고 할 수 있습니다.


Few-Shot 프롬프트에서는 예시 선택과 설계가 중요합니다. 예시는 태스크를 올바르게 표현하고 LLM이 학습하기에 충분한 정보를 포함하고 있어야 합니다. 또한 예시의 수와 다양성은 LLM의 성능에 영향을 미칠 수 있습니다.


일반적으로 예시 수가 많을수록 LLM작업에 대한 적응력이 향상됩니다. 다만, 예시의 수가 지나치게 많으면 과적합을 일으키고 미지의 데이터에 대한 일반화 성능이 저하될 가능성도 있습니다. 따라서 난이도와 복잡성에 따라 적절한 수의 예시를 선택하는 것이 중요합니다. 또한 예시의 다양성도 중요한 요소입니다. 예시가 특정 패턴에 편향되면 LLM은 그 패턴에 지나치게 적응하여 다른 패턴에 대한 성능이 저하될 수 있습니다. 따라서, 예시는 작업의 다양한 측면을 편차없이 커버해야 합니다.



©2024-2025 GAEBAL AI, Hand-crafted & made with Damon Jaewoo Kim.

GAEBAL AI 개발사: https://gaebalai.com

AI 강의 및 개발, 컨설팅 문의: https://talk.naver.com/ct/w5umt5


keyword
이전 08화7. 오차 역전파법