공부 기록장

LLM과 프롬프트 엔지니어링(Prompt Engineering) 본문

카카오테크 부트캠프/강의

LLM과 프롬프트 엔지니어링(Prompt Engineering)

빛나무 2024. 7. 26. 16:01

LLM

LM(Language Model) 이란?

통계학 이론과 딥러닝을 활용하여 연속되는 단어의 집합으로 이루어진 문장 시퀀스의 각 단어에 확률을 할당해주는 확률 모델 (자연어의 확률 분포)

 

LLM(Large Language Model)이란?

방대한 양의 데이터를 기반으로 사전 학습된 초대형 딥러닝 모델

 

 

Prompt Engineering

Prompt 란?

특정 작업을 수행하도록 LLM에 요청하는 자연어 텍스트

 

Prompt Engineering이란?

생성형 인공지능 솔루션을 안내하여 원하는 결과를 생성하는 프로세스

 

AI에게 질문을 잘 하는 법

: 구체적이고 명확하게 지시

: 명령의 배경을 함께 설명

: 원하는 결과에 대해 예시로 설명

: 단계별 가이드 제시

: 제약사항 설명

: 결과의 작성 형식을 구체적으로 명시

: 스스로 생각하며 일할 수 있도록 지시

 

텍스트 생성 및 추론 기법

① Few-Shot

: 모델이 적은 수의 예시(몇 개의 샘플)만 보고도 새로운 작업을 수행할 수 있도록 하는 기법

"문장을 요약해 주세요."라는 작업에 몇 개의 요약된 문장 예시를 함께 제공해 모델의 새로운 문장 요약에 도움

 

② Chain of Thought(CoT)

: 복잡한 문제를 단계별로 해결 과정을 설명하도록 유도하는 기법으로, 모델의 중간 추론 단계를 명시적으로 생성

⇒ Few-shot이 주로 사용되는데, zero-shot도 사용된다.

⇒ Zero-shot의 가장 유명한 프롬프트 : "Let's think step by step."

 

③ Self-Consistency(SC)

: Chain of Thought를 확장시킨 개념

: 여러 번의 추론 과정을 통해 많이 나온 답을 선택함으로서 일관된 답을 찾는 기법

: 여러 개의 CoT 결과를 Voting하는 기법

 

④ Tree of Thoughts(ToT)

: 문제를 해결하기 위해 다양한 가능성의 트리를 탐색하는 기법

: 각 노드는 가능한 생각이나 추론 단계를 나타내며, 최적의 경로를 찾아감

  1. 생각의 분해(트리의 레벨, depth)
    • 세부 질문을 통해 답변을 얻어내는 과정
  2. 생각 만들기(노드 생성)
    • 논의 주제와 이전 내용을 바탕으로 생각(의견) 생성
  3. 생각 평가(가지 치기)
    • 총점을 기준으로 원하는 갯수만 남기고 제거

 

⑤ ReAct (Reasoning + Acting, 추론 + 행동)

: 모델이 추론과 행동을 결합하여 문제를 해결하는 기법

: 프롬프트에서는 <추론 → 행동   관찰>이 보통 한 세트로 동작하며, 문제가 해결될 때까지 반복

 

프롬프트 엔지니어링 기법

① Batch Prompting

: 여러 개의 프롬프트를 한 번에 모델에 입력하여 동시에 여러 결과를 얻는 기법

: 빠른 속도로 일관된 답변을 얻을 수 있지만, 복잡한 프롬프트의 경우에는 프롬프트 작성 난도가 높아져 모든 답변에 오류가 생길 수 있음

 

② Prompt Chaining

: 한 프롬프트의 출력을 다음 프롬프트의 입력으로 사용하는 기법

: 단계별로 복잡한 작업을 수행하거나, 여러 단계를 거쳐 최종 결과를 도출할 때 유용함

 

③ Prompt Injection

: 프롬프트에 추가적인 정보를 삽입하여 모델의 출력을 조정하는 기법

: 프롬프트 조작을 통해 편향되거나 악의적인 결과를 생성하려는 공격으로 사용될 수 있음

 

 

LLM의 하이퍼 파라미터

Temperature (온도) **

: 창의성 결정 변수로 범위는 0~2

: 출력 자연어의 확률을 보정하는 변수

: 낮을수록 딱딱하고 단조롭고 일관적인 답변 / 높을수록 새롭고 창의적이고 매번 원하는 답변

 

Top_p **

: 창의성 결정 변수로, 누적 확률을 제한하고 이를 기준으로 샘플링을 수행 

: 매우 낮은 확률을 가진 단어들이 선택되는 것을 방지하면서도, 일정 수준의 다양성 유지

 

Maximum_length

: 대화의 크기(형태소 단위), 모델에 따라 다름

 

Frequency Penalty

: 동일 단어의 등장 빈도에 따라 패널티를 부여해 단조로움 회피 수행

 

Presence Penalty

: 동일 단어의 존재에 따라 패널티를 부여해 다양한 화제 제공

 

 

LLM의 Seed

확률 모델인 LLM의 확률 샘플링 결과를 일관성 있게 만들기 위해 Seed 설정

Seed 설정을 통해 동일한 결과가 생성될 확률이 크게 증가

but, LLM의 매개 변수는 매우 다양하고, 확률 샘플링을 일관적이게 만드는 것이지 결과는 결국 확률이다

 

 

생성형 AI 모델 활용 Tip

페르소나 부여

LLM에 역할을 부여하는 명령을 내려, 모델의 확률 계산에 영향을 주기

 

구분 기호 사용

맥락, 명령, 질문 등이 같이 주어질 경우, 모델이 맥락 파악에 어려움을 겪을 수 있음

구분 기호를 통해 해당 내용이 어떤 맥락인지 명확히 파악하도록 지시

 

제약사항 및 형식 지정

LLM의 확률 계산에 미리 제약 및 형식 설정

 

구체적이고 명확한 지시

: 자연어는 동의어, 반의어, 역설적 표현이 많기 때문에, 최대한 구체적으로 프롬프트를 제시해야 확률 계산 결과에 오류를 줄일 수 있다

 

 

RAG

RAG(Retrieval-Augmented Generation, 검색 증강 생성)이란?

검색과 생성을 결합한 모델로, 먼저 정보를 검색한 후 이를 바탕으로 텍스트를 생성하는 기법

 

기존 LLM의 생성 능력과 외부 지식 베이스(예: 위키피디아)의 정보를 결합함으로써, 보다 정확하고 사실에 기반한 답변을 제공

⇒ 모델의 출력 결과에 대한 증거 제시를 통해 설명 가능성과 신뢰성↑

 

 

정리

LLM은 자비스가 아니다

: 학습된 자연어 안에서 유사한 패턴을 확률에 기반하여 출력하는 만능이 아닌 언어 모델

: 논리적 이해를 하지 못하고 수리 등의 분야에서는 성능을 기대하기 어려움

 

프롬프트 엔지니어링에 Silver Bullet은 없다

: 프롬프트의 역사는 매우 짧고 아직 연구 중이다

: 모델의 아키텍처 변화, 학습 데이터의 변화 등에 따라 프롬프트 엔지니어링은 변화할 수 있다

: 절대적인 방법은 존재하지 않고, 많은 시도를 통해 서비스에 적합한 결과를 내는 프롬프트와 타협해야 함

: 높은 퍼포먼스를 위한 지식 공유 필요

 


 

참고 자료

https://tech.goorm.io/ko/author/jhin/