프롬프트 엔지니어링
ChatGPT 및 거대언어모델의 추론 능력 향상을 위한 프롬프트 엔지니어링 방법론 및 연구
https://www.dbpia.co.kr/journal/articleDetail?nodeId=NODE11674572
DBpia
논문, 학술저널 검색 플랫폼 서비스
www.dbpia.co.kr
프롬프트: 사용자의 input 그 자체.
프롬프트 엔지니어링에 따라 거대언어의 답변 양상이 달라진다.
추론: 새로운 정보를 생성하거나 이해하는 사고과정
→ 인간이 가진 사고 능력을 최대한 유사하게 구현하는 인공지능의 본래 목표에 부합
1) 추론을 가능하게 한 문맥내 학습에 대한 이해
2) 프롬프트 엔지니어링의 개념
3) 추론 유형 및 벤치마크 데이터
4) 프롬프트 엔지니어링 기법
5) 발전과정과 기법들 간의 연관성
프롬프트 엔지니어링 기법 개요
- 퓨샷: 예제 추가
- 지식 생성: 추론을 위해 필요한 지식을 생성하는 단계 추가
- CoT: 추론단계를 답변에 추가함. 답변을 생성할 때 추론 과정을 단계적으로 표현하도록 함. 답변에 보여줌
- 자기 일관성: CoT의 다양한 답변을 생성함. 이중 일관성이 높은 답변을 선택함.
- 제로샷 CoT: 추론 과정예제를 언어모델이 생성하게 함. "추론 과정을 보여달라"는 지시 없이 답변을 받음
- Auto CoT: 퓨샷 + 제로샷 CoT
- 액티브: 자기일관성 + 제로샷 CoT. 답변의 불확실성이 높은 예제는 사람이 만든 예제로 교체함.
- ToT: 트리 형태의 단계적 자기 일관성 + 상태 평가를 통한 휴리스틱 탐색. 트리 형태로 사고를 생성
거대 언어 모델의 사용 이유
1. 성능(정확도 향상). 모델의 크기가 커질수록 문맥 내 학습 정확도가 증가함.
2. 한번에 입력 가능한 텍스트의 크기가 크면 성능이 향상함
- 거대언어는 프롬프트를 보고 답변을 생성한다.
- 입력 텍스트를 토큰으로 변환하여 처리. 모델이 클수록 처리할 수 있는 토큰 수가 많아진다.
- 이때 입력가능한 텍스트의 크기가 작으면 정보의 손실이 발생해서 제대로 답변을 생성하지 못할 수 있다.
문맥내 학습의 이유
이미 우리가 사용하는 거대언어모델은 사전학습이 충분히 진행된 상태이다.
그러나 우리가 원하는 목표 작업에 대해선 학습이 이루어지지 않았기에, 흔히 말하는 파인튜닝 작업이 필요하다.
파인튜닝 작업 또한 추가적인 비용과 많은 데이터가 필요하다는 제약이 존재한다.
따라서 프롬프트 내에 예제를 포함해 모델이 학습하도록 유도하는 문맥 내 학습의 중요성이 부각되었다.
문맥내 학습: 입력 시퀀스에서 반복되는 서브 작업들에 대해 학습하여 유사한 서브작업을 수행할 수 있음
제로샷 / 원샷 / 퓨샷 러닝
문맥내 학습 장점
1. 학습을 위해 많은 데이터셋을 필요로 하지 않음
2. 학습되지 않은 새로운 데이터셋 활용 가능
3. 하나의 거대언어모델에 모든 작업을 수행할 수 있음
단점
1. 가중치를 변경하지 않아, 영구적으로 학습이 유지되지 않는다.
2. 프롬프트는 한정되어 있는데 문맥내 학습을 추가하는 것이기에 주어진 입력의 크기를 많이 소모함.
3. 파인튜닝에 비해 성능이 떨어질 수 있음
프롬프트 구성 요소
빈칸 메우기 프롬프트: 프롬프트 중간에 빈칸을 넣고 언어모델이 빈칸을 채우도록 함
접두 프롬프트: 빈칸 없이 서술하고, 언어모델이 프롬프트에 이어서 답변하도록 하는 방식. 빈칸이 맨 끝이라고 보면 됨
- 지시: 언어모델의 역할 지정
- 질문: 응답 요구
- 문맥: 이해, 학습시키기 위해 사용되는 예제, 추가 설명
- 입력: 요약, 번역, 질문, 수식 등등 원하는 작업 수행 가능
- 예제: 입력 출력의 쌍
- 답변: 주어진 입력에 대한 처리결과를 나타냄
언어모델 답변의 다양화
온도 샘플링: 0~1 사이의 값을 지정함.
- 온도를 높이면 후보 집합 토큰 간 확률 격차가 줄어듦 → 확률이 낮은 토큰이 선택될 가능성이 높아져 다양한 답변을 볼 수 있음.
- 온도를 낮추면 후보 집합 토큰 간 확률 격차가 커짐 → 같은 답변만 나올 가능성이 높아짐.
Top-k: 토큰으로 선택될 후보 집합의 수를 확률이 높은 상위 k개로 제한함.
- 1로 하면? 확률이 가장 높은 한 개만 후보 집합에 포함됨. 항상 동일한 토큰이 선택됨.
- 10으로 하면? 확률이 높은 열 개의 토큰이 후보 집합이 되어 답변이 다양해짐.
- 후보 집합의 토큰 간의 단어 편차가 클 경우 전혀 어울리지 않는 토큰이 선택될 가능성이 존재함.
뉴클리언스 샘플링( Top-p 샘플링 ): Top-K 샘플링을 보완하기 위함. 후보집합에 있는 토큰의 누적확률을 p이하로 제한함
- p가 0.5이면 확률이 높은 상위 토큰부터 확률을 누적해서 0.5를 채움.
- 비교적 안전한 샘플링 기법임.
추론 성능 벤치마크
- 산술 추론: 자연어로 이루어진 수학문제 풀기
- 상식 추론: 일반적인 상식 질문을 이해하고 대답하기
- 기호 추론: 논리적 규칙이나 기호(부호, 표지 등등)를 이용하여 문제를 해결.
- 마지막 문자 연결, 코인 뒤집기
프롬프트 엔지니어링 발전 과정
퓨샷 프롬프팅: 문맥내 학습이 이루어지도록 퓨샷 프롬프트를 작성하는 작업.
여러 예제를 통해 패턴을 파악하여 프롬프트의 의도를 이해하고 올바른 답을 주도록 하는 목적을 가짐.
퓨샷 러닝이 데이터를 단순히 외우는 것이 아닌, 추론을 한다는 사실을 알게 됨.
모델이 학습된 예제를 바탕으로 새로운 질문에서 필요한 추론을 수행
지식 생성: 퓨샷 러닝을 이용해 문제 해결을 위한 지식을 생성, 지식과 문제를 거대언어모델에 입력하여 답변을 생성함.
예제 쌍을 입력에 다 넣고, 마지막 본 질문을 빈칸으로 함. (접두 프롬프트) → 예제를 기반으로 답변 생성 (→ 생성된 답변을 다시 입력해 본 질문에 대한 지식을 검증하거나 "맞는지 알려줘"와 같은 지시를 통해 답변을 평가 및 확장할 수 있음)
강화학습으로 인해 지식 생성 프롬프팅을 안해도 올바른 답을 제공함.
CoT: 답을 도출하는 추론 과정을 프롬프트에 추가. 모든 프롬프트 엔지니어링 연구에 활용.
단점: 사용자가 풀 수 없는 문제는 답을 구할 수 없음
자기 일관성: 여러 개의 답을 샘플링하고 가장 많은 답 (다수 투표 방식) or 일관성이 높은 답변 선택. (일관성 계산)
- 여러 개의 답변을 생성하는 방식) 온도 샘플링, top-k
제로샷 CoT: 문제 추론 과정, 해결 과정 입력하지 않고도 문제를 단계적으로 해결함.
1단계 프롬프트) 프롬프트 질문 & 추론 유도 트리거 문장 추가. → 모델이 추론 과정을 보여줌
2단계 프롬프트) 1단계 프롬프트 + 1단계 답변 내용 + 응답 트리거
- 이전 추론 과정을 검토하고, 최종 결론을 명확히 도출하도록 유도
Auto CoT: 자동화된 CoT. 군집 분석을 이용해 예제 집합을 유사한 그룹으로 나누어 생성함
1단계) 추론과정과 답이 없는 문제에 군집화를 적용해 의미적으로 유사한 군집으로 분리함
2단계) 군집에 있는 모든 문제에 추론 과정 생성, *휴리스틱 기준을 적용하여 군집을 대표하는 문제&추론과정&답변 선별
* 휴리스틱: 정보가 부족할 때 어림짐작하여 사용
60개의 토큰을 넘지 않고 5개의 추론 단계를 넘지 않는 기준 존재
액티브: 학습을 위한 문제 집합, 평가를 위한 문제집합으로 나눈 상태에서 4단계로 이루어짐
1단계) 학습용 문제 집합에 퓨샷/제로샷 CoT 프롬프트 적용하여 k개 추론 예제 생성.
2단계) 불일치 정도를 기반으로 불확실성을 수치화하고 불확실성이 높은 상위 n개 예제 추출. (자기 일관성 적용)
3단계) 추출된 n개의 불확실 예제를 사람이 직접 생성한 정확한 예제로 교체함.
4단계) 완성된 예제 집합을 사용하여 평가용 문제 집합에 대해 추론을 수행함. 자기일관성 적용하여 m개 답 중 가장 일관성이 높은 답 선택.
ToT: 사람의 느리고, 심사숙고하며 의식적인 의사결정 방식에서 착안됨. 복잡한 문제를 체계적으로 분해하여 논리적으로 해결함
다양한 사고(추론 과정)를 트리 형태로 생성하고, 각 단계에서 최적의 경로를 선택하며 최종 답변을 도출함
사고 분해) 주어진 문제를 유형에 따라 작은 사고의 단위로 분해함. 트리의 초기 구조 형성
사고 생성기) 현재 트리에서 다음 사고 단계를 생성함.
- 샘플: 현재까지의 트리 상태를 입력으로 한 CoT 프롬프트를 독립적으로 k번 반복하여 다양한 사고를 생성
- 제안: 제안 프롬프트를 사용해 k개 사고를 한 번에 생성함
상태 평가기) 휴리스틱을 이용해 현재 상태를 평가하여 최적 경로를 찾음
탐색 알고리즘) 너비 우선, 깊이 우선 탐색을 이용하여 트리를 탐색하고 최종 답변을 도출함.