[generative-ai] 프롬프트 엔지니어링
자연어 처리 패러다임의 변화
- 초기 (~2017): 특징(Feature) 공학 중요.
- 사전 학습과 미세 조정 (2017~2019): BERT, GPT-1/2. 대량의 데이터로 사전 학습(Pre-training) 후 특수 목적에 맞게 미세 조정(Fine-tuning).
- 프롬프트 방식 (~현재): GPT-3 이후. 미세 조정 없이 적절한 **프롬프트(제시문)**만으로 다양한 과제를 해결.
- 배경: 모델이 너무 거대해져서(LLM) 매번 미세 조정하기에는 비용이 너무 많이 듦.
들쭉날쭉한 미개척지 (Jagged Frontier)
- 개념: 펜실베니아 대학 이선 몰릭(Ethan Mollick) 교수가 제안.
- AI의 성능 경계가 불균일하여, 사람이 생각하기에 비슷한 난이도의 과제라도 AI는 어떤 건 아주 잘하고 어떤 건 못함.
- 난이도 불일치 (Difficulty Concordance): 사람에게 쉬운 것이 AI에게 어렵고(예: 빨래 개기 - 모라벡의 역설), 사람에게 어려운 것이 AI에게 쉬울 수 있음(예: 체스, 코딩).
- 따라서 "이건 당연히 하겠지" 또는 "이건 당연히 못하겠지"라고 쉽게 가정하면 안 됨. 직접 시도해봐야 함.
프롬프트의 구성 요소
- 지시 (Directive): 핵심 의도, 명령. (예: "번역해라", "요약해라")
- 예시 (Examples): Few-shot Learning. 예시를 주면 의도를 파악하기 쉬움.
- 출력 형식 (Output Formatting): JSON, CSV, Markdown 등 기계가 처리하기 쉬운 형식 지정.
- 스타일 (Style): 말투, 어조 지정. (예: "유치원생에게 설명하듯이")
- 역할 (Role): 페르소나 부여. (예: "너는 친절한 베테랑 영어 교사야.")
- 추가 정보 (Additional Information): 컨텍스트.
프롬프팅 기법
- Zero-shot: 예시 없이 바로 지시.
- Few-shot: 몇 가지 예시를 제공.
- CoT (Chain of Thought): "단계별로 생각해보자"라고 유도하여 추론 능력을 향상.
- Decomposition: 복잡한 문제를 작은 단위로 쪼개기.
LLM은 프롬프트를 "이해"하는가?
- 연구 결과(2021)에 따르면, LLM이 프롬프트의 '의미'를 인간처럼 완벽히 이해하는 것은 아닐 수 있음.
- 지시적(Instructive) 내용보다 타겟 단어(Target Words)의 선택이 성능에 훨씬 큰 영향을 미침.
- 예: 긍정/부정을 분류할 때 "True/False"로 답하게 하는 것보다 "Good/Bad"나 "Cat/Dog" 같이 의미 없는 단어라도 모델이 선호하는 단어 조합이 있을 수 있음.
프롬프트의 민감도
- 프롬프트에 대한 민감도: 프롬프트의 변화가 결과 성능에 미치는 영향
- 민감도가 낮아질 수록 프롬프트 엔지니어링의 필요도 낮아짐(말만 통하면 결과가 비슷하므로)
- 모델이 커질 수록(왼쪽), 예시를 많이 들 수록(오른쪽) 프롬프트에 대한 민감도가 낮아짐
- 일시적으로 작동하는 특이한 기법(예: 아이스크림을 사주겠다고 하기 등)을 쓰는 것보다 성능이 좋은 모델을 사용하고, 프롬프트를 정확하게 쓰고, 예시를 충분히 드는 것이 중요