Prompt 기초편-프롬프트 정의, LLM 하이퍼파라미터, 구성요소

mingTato
6 min readApr 28, 2024

--

저는 최근 LLM 모델을 이용해 챗 봇을 개발하고 있습니다. 개발을 할때, 사용하는 LLM 모델도 중요하지만, 모델을 100퍼센트 활용하려면 상황에 맞게 프롬프트를 잘 설계 해주어야합니다.

이번 글에서는 프롬프트의 정의, LLM의 하이퍼 파라미터, 프롬프트의 구성요소에 대해서 정리하겠습니다.

프롬프트란?

최근에 생성형 AI가 발전함에 따라, 컴퓨터는 사람이 평소에 사용하는 ‘자연어’를 인식할 수 있게 되었고 현재 프롬프트(prompt) 라는 말은 생성형 모델에게 어떤 행동을 해야 하는지 자연어로 설명하고 사람이 원하는 결과물을 출력할 수 있도록 하는 방식을 뜻합니다.

프롬프트를 사용할 땐, API를 사용하거나 직접 대규모언어모델(LLM)과 상호 작용을 할 수 있습니다. 몇 가지 파라미터를 설정해준다면, 같은 프롬프트를 사용해도 여러 가지 다른 결과를 얻을 수 있습니다.

방금 말했 듯, LLM의 결과는 얼마나 ‘랜덤’할 지와 같이, 모델의 다양한 부분을 조종하는 설정 하이퍼 파라미터의 영향을 받습니다. 이 하이퍼 파라미터들은 더 창의적이고 다양성 있고 흥미로운 답변을 내도록 조정할 수 있습니다. 다음 단락에서는 설정 하이퍼 파라미터들을 알아볼 것이고, 어떻게 결과에 영향을 주는지 알아볼 것입니다.

LLM 하이퍼파라미터

1. Temperature

Temperature는 답변의 창의성과 무작위성을 조절하는 설정 하이퍼 파라미터입니다.

temperature 값이 낮을수록 항상 가장 확률이 높은 토큰(말 뭉치의 최소 단위)이 선택되기 때문에 더 결정론적이고 보수적인 답변 결과를 도출합니다. temperature 값을 높였을 때 모델이 선택하는 토큰의 무작위성이 증가하여 보다 다양하고 창조적인 답변 결과를 생성합니다.

예를 들어 temperature를 0.05로 설정하면, 보다 사실에 근거한 정확한 답변을 제공하고, 1로 설정하면, 0.05 보다 창의적인 결과물을 생성해줍니다.

사실을 기반으로 하는 질의응답과 같은 작업에는 낮은 temperature 값을 사용하여 보다 사실적이고 간결한 응답을 얻는 것이 좋고, 시를 생성하는 등 다른 창의적인 작업의 경우에는 temperature 값을 높이는 것이 도움이 될 수 있습니다.

2. Top p

핵 샘플링으로 알려진 Top p는 모델의 랜덤성을 조절하는 또 하나의 하이퍼 파라미터입니다.

Top p를 사용하면 모델이 응답을 생성하는 결정성을 제어할 수 있습니다. 정확하고 사실적인 답변을 원한다면 이를 낮게 유지합니다. 더 다양한 반응을 원한다면 더 높은 값으로 증가시킵니다.

Top p는 확률의 한계를 설정하고 그 누적 확률을 초과하는 토큰만을 선택합니다. 모델은 이 토큰들을 이용해서 랜덤한 답변을 생성합니다. 이 방법은 기존의 전체 단어를 샘플링 하는 기존의 방법보다 더 다양성 있고 흥미로운 결과를 생성합니다. 예를 들어, 만약 0.9의 top p를 설정한다면 모델은 90%의 확률을 달성하는 가장 가능성 높은 단어들로만 답변을 생성할 것입니다.

참고로 일반적인 경우 둘 중 하나만 변경하는 것을 권장합니다.

3. Max Length

max length를 조정하여 모델이 생성하는 토큰의 수를 관리할 수 있습니다. max length를 지정하면 길거나 관련 없는 응답을 방지하고 제어 비용을 관리하는데 도움이 될 수 있습니다.

4. Stop Sequences

stop sequence는 모델의 토큰 생성을 중지하는 문자열입니다. stop sequences를 지정하는 것은 모델의 응답 길이 및 구조를 제어하는데 도움이 될 수 있습니다. 예를 들어, stop sequence로 “11”을 추가하여 항목이 10개를 초과하지 않는 리스트를 생성하도록 모델에 지시할 수 있습니다.

5. Frequency Penalty

frequency penalty는 해당 토큰이 응답 및 프롬프트에 등장한 빈도에 비례하여 다음에 등장할 토큰에 불이익을 적용합니다. 불이익이란, 자주 등장하는 토큰에 대하여 더 많은 페널티를 부여하는 것입니다. 불이익을 받게 되면 모델의 다음번 응답에서 단어(특정 토큰)의 반복을 방지합니다. frequency penalty가 높을수록 단어가 다시 등장할 가능성이 줄어듭니다.

6. Presence Penalty

presence penalty는 반복되는 토큰에 패널티를 적용하지만, frequency penalty와 달리 모든 토큰에 동일한 페널티가 적용됩니다. 다시 말해, 토큰이 2회 등장하는 토큰과 10회 등장하는 토큰이 동일한 페널티를 받습니다. 이 설정은 모델이 응답에서 구문을 너무 자주 반복하는 것을 방지할 수 있습니다. 다양하거나 창의적인 텍스트를 생성하기 위해서는 더 높은 presence penalty를 사용합니다. 혹은 모델이 집중력을 유지해야 할 경우(사실을 기반으로)에는 더 낮은 presence penalty를 사용해야합니다.

이것 또한 일반적인 경우 둘 중 하나만 변경하는 것을 권장하고 있습니다.

요약하자면, 설정 하이퍼 파라미터들은 모델이 어떻게 작동할 지를 정하는 중요한 요인입니다. 하이퍼 파라미터와 답변은 관계를 이해하면 특정 프로그램에 최적화해서 사용할 수 있습니다.

프롬프트 구성요소

프롬프트 엔지니어링을 접목한 여러 애플리케이션을 반복해서 사용하다 보면, 프롬프트에는 특정 구성 요소들이 있다는 것을 알 수 있습니다.

크게 프롬프트의 구성요소를 살펴보자면 4가지로 분류할 수 있습니다. 하지만 네 가지 요소가 모두 반드시 필수적인것은 아닙니다. 프롬프트의 구성은 작업과 상황에 따라 다릅니다.

1. Instruction (지시)

LLM 모델이 수행하기를 원하는 구체적인 목표, 특정 작업 또는 목표를 정의하는 내용을 의미합니다.

2. Context (문맥)

LLM이 해야 할 작업을 이해하는 데 필요한 배경 정보(외부 정보나 추가 문맥)를 제공합니다. 예를 들어 문제에 대한 간단한 설명이나 관련 정보의 요약을 제공할 수 있습니다.

3. Input Data (입력데이터)

응답 받고자 하는 것에 대한 입력 데이터를 의미합니다. 또는 질문이 될 수 있습니다. 예를 들어, 특정 문장을 주어지고 그 문장에 대한 감정 분류를 요청한다면 해당 문장이 입력데이터가 됩니다. 프롬프트 구성에 따라 입력데이터가 없을 수 도 있습니다. 일부 LLM 모델은 텍스트 뿐만 아니라 이미지 같은 데이터도 입력받을 수 있습니다.

4. Output Indicator (출력 표시기)

결과물의 유형 또는 출력 형식(format)을 지정할 수 있습니다. 마크다운, JSON 형태 등으로 요청할 수도 있습니다. 또한 특정 요구 사항에 맞춰 응답의 길이 또는 복잡성, 말투 등에 대한 다양한 제한을 걸 수도 있습니다

다시 한번 언급하지만, 위의 네 가지 구성 요소가 프롬프트에 모두 필요한 것은 아니며 형식은 어떤 작업인지에 따라 달라질 수 있습니다.

여기까지 프롬프트의 정의, LLM의 하이퍼 파라미터, 프롬프트의 구성요소에 대해 정리해봤습니다. 같은 LLM 모델이라도, 어떻게 프롬프트를 제작하냐에 따라 전혀 다른 결과를 얻을 수 있습니다.

이어지는 글에서는 프롬프트에 대한 더 구체적인 예시를 다루며, 일반적인 프롬프트 설계 팁이나 프롬프트를 통해 할 수 있는 작업을 다루도록 하겠습니다.

--

--