이번 포스트에서는 ChatGPT API를 통해 모델을 사용하고 최적화 할 때 파라미터를 어떻게 조절 할 수 있는지에 대해 알아보자.
ChatGPT API 기본 활용 방법
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)
ChatGPT API의 기본 파라미터 이해하기
‘model’
ChatGPT를 호출하고 사용할 언어 모델을 지정한다.(활용 가능한 모델은 아래 포스팅에서 확인할 수 있다.)
‘messages’
ChatGPT API를 사용하면서 가장 핵심적인 부분으로 GPT에 전달할 내용을 입력하는 부분이다.
리스트의 형태로 입력하며, [{"role":"user", "content": "prompt"}]
의 형태로 사용한다.
"role"
은 질문 시 ‘messages’ 개체에 역할을 부여하는 것을 의미하며,"user", "system", "assistant"
의 역할을 지정할 수 있다.
"system"
: “시스템”의 역할은 ChatGPT가 채팅 대화 메시지 내에서 어떤 성격을 가져야 하는지 나타낸다.{"role": "system", "content": "You are a helpful assistant."}
"user"
: “사용자”의 역할은 ChatGPT에게 보내는 메시지의 실제 최종 사용자를 나타낸다.{"role": "user", "content": "Who won the world series in 2020?"}
"assistant"
: “보조자”의 역할은 대화의 연속성을 유지하기 위해 현재 요청에서 모델의 이전 응답을 설정하는 데 사용한다.{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."}
"content"
는 각 역할에게 전달하는 프롬프트(prompt, 내용)를 입력한다
고급 파라미터로 ChatGPT 세부 조정하기
‘max_tokens’
ChatGPT 모델이 생성하는 답변의 길이(최대 토큰 수)를 제한한다. API 사용은 토큰 수에 따라 요금이 부과되므로 ‘max_tokens’ 파라미터 튜닝을 통해 답변의 길이를 조절할 수 있다.
- 길이 제한:
max_tokens
를 50으로 설정하면 모델 응답은 최대 50 토큰까지만 반환한다. - 자원 효율성: 긴 응답을 필요로 하지 않는 경우,
max_tokens
를 낮게 설정하여 API 호출의 비용을 절약하고 응답 시간을 줄일 수 있다. - 응답의 완전성: 너무 낮은
max_tokens
값으로 설정하면 응답이 중간에 잘릴 수 있다. 이는 완전한 문장이 아닌, 문맥이 끊긴 응답을 가져올 수 있으므로 주의가 필요하다.
‘temperature’
모델의 출력 결정에 대한 확률성(랜덤성)을 제어한다. temperature
값은 0 ~ 2 사이의 값을 가지며, 지정하지 않았을 경우(Default)에는 1의 값으로 설정 된다.
ChatGPT의 응답 스타일과 다양성을 제어하는 데 중요한 역할을 하며, 사용자의 요구와 응용 프로그램의 목적에 따라 적절한 값을 선택하여 최적의 결과를 얻을 수 있다.
- 확률성 제어:
temperature
값이 높을수록 모델은 다양하고 창의적인 답변을 생성하는 경향이 있다. 반면, 낮은 값은 더 예측 가능하고 일관된 경향의 응답을 생성한다. - 창의적인 제안 필요: 브레인스토밍이나 아이디어 생성과 같은 작업에서 높은
temperature
값을 사용하여 다양한 제안을 얻을 수 있다. - 정확한 정보 제공: 특정 정보나 지시를 제공하는 경우, 낮은
temperature
값을 사용하여 모델로부터 더 정확하고 일관된 응답을 얻을 수 있다.
‘top_p’
모델의 출력 토큰 선택 과정에서 확률 분포를 제어하는 파라미터로서, 이를 Nucleus Sampling(핵 샘플링)이라고도 부른다. top_p
값은 0 ~ 1 사이의 값을 가지며, 지정하지 않았을 경우(Default)에는 1의 값으로 설정된다.top_p
는 temperature
와 함께 ChatGPT의 응답의 다양성을 제어하는 데 중요한 역할을 하며 사용자의 요구와 응용 프로그램의 목적에 따라 적절한 값을 선택하여 최적의 결과를 얻을 수 있다.
- 확률 분포 제어:
top_p
는 주어진 확률 값p
내에서 토큰을 선택한다. 예를 들어,top_p
가 0.9인 경우, 모델은 확률 분포 상에서 상위 90%의 토큰(거의 모든 분포내에서)을 고려하여 출력을 생성한다. - 일관된 응답:
top_p
값을 상대적으로 낮게 설정하여 모델의 출력을 좁은 확률 분포 내에서 선택하게 만들어 일관된 응답을 얻을 수 있다. - 다양한 응답: 더 다양한 응답 스타일을 원하는 경우,
top_p
값을 높게 설정하여 확률 분포를 넓게 만들 수 있다. temperature
와top_p
는 함께 조절될 수 있으나, 모델의 출력 스타일과 다양성을 효과적으로 제어하기 위해temperature
와top_p
두 파라미터를 함께 변경하지 않는 것이 좋다.
‘presence_penalty’
주어진 입력에 대한 모델의 응답에서 특정 토큰의 존재 확률을 조절하는 데 사용된다.
단어가 이미 답변 텍스트에 나타난 경우 해당 단어가 나타날 확률(가능성)을 제어한다.presence_penalty
값은 -2 ~ 2 사이의 값을 가지며, 지정하지 않았을 경우(Default)에는 0의 값으로 설정된다.
사용자의 요구와 응용 프로그램의 목적에 따라 적절한 값을 선택하여 최적의 결과를 얻을 수 있다.
- 토큰 존재 확률 조절:
presence_penalty
의 값이 양수인 경우, 새로운 토큰이 이전 텍스트에 존재 여부에 따라 새 토큰에 불이익을 주어 모델이 새로운 주제에 관해 이야기할 가능성을 높인다. 반대로 값이 음수인 경우, 토큰의 존재 패널티가 줄어들게 된다. - 응답 다양성 조절: 이 파라미터는 모델의 응답에서 특정 토큰의 출현 빈도를 높이거나 낮추는 데 사용될 수 있다. 이를 통해 응답의 다양성을 더욱 조절할 수 있다.
presence_penalty
는 응답의 특정 토큰 출현에 대한 확률을 직접적으로 조절하는 것이 아니라, 모델의 내부 동작 방식에 영향을 줌으로써 간접적으로 조절한다. 따라서 항상 원하는 결과를 보장하는 것은 아니다.
‘frequency_penalty’
토큰의 일반적인 출현 빈도에 따라 모델 응답의 확률을 조절한다.
모델이 동일한 단어를 반복적으로 생성하지 않도록 제어한다.frequency_penalty
값은 -2 ~ 2 사이의 값을 가지며, 지정하지 않았을 경우(Default)에는 0의 값으로 설정된다.
- 토큰 출현 빈도 조절:
frequency_penalty
값에 따라 모델은 일반적으로 자주 나오는 토큰의 사용을 선호하거나 피하게 된다.
– 양수 값: 자주 나오는 토큰의 사용을 감소시킨다.
– 음수 값: 자주 나오는 토큰의 사용을 증가시킨다. frequency_penalty
는 모델의 내부 동작 방식에 영향을 주기 때문에, 원하는 결과를 정확하게 보장하지는 않는다. 따라서 실험적으로 여러 값을 시도하여 최적의 값을 찾는 것이 좋다.
‘n’
입력 메시지에 대해 생성할 채팅 답변의 수를 설정한다.n
값은 지정하지 않았을 경우(Default)에는 1의 값으로 설정된다.
‘stop’
모델의 출력을 특정 문자나 문자열에 도달했을 때 답변을 중단하게 하는 기능이다.stop = ['.', 'END', '\n', 'end of text']
와 같이 문자열 리스트로 설정할 수 있다.
- 단일 문장 응답: 사용자가 질문에 대한 간결한 답변을 원하는 경우,
stop
파라미터를['.']
로 설정하여 모델이 문장 하나만 출력하도록 할 수 있다. - 특정 형식의 응답: 예를 들어, 모델로부터 리스트 형식의 응답을 원할 때
stop
파라미터를['\n']
으로 설정하여 각 항목을 줄바꿈으로 구분하도록 할 수 있다. stop
파라미터를 사용할 때는 해당 문자나 문자열이 응답 내에서 자주 나타날 수 있으므로, 응답이 너무 짧아지지 않도록 주의해야 한다.stop
파라미터와max_tokens
파라미터를 함께 사용하는 경우, 두 파라미터 중 하나가 먼저 조건을 만족하면 출력이 중단된다.
모든 파라미터를 사용하여 코딩하기
이와 같은 파라미터들을 사용하려면 아래와 같이 API 호출 코드를 작성하면 된다.
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "your prompt"}],
max_tokens = 5000,
temperature = 1,
top_p = 1,
presence_penalty = 0,
frequency_penalty = 0,
n = 1,
stop = ['.', 'END', '\n', 'end of text']
)
이렇게 ChatGPT의 다양한 파라미터에 대해 알아보았다. 이 파라미터들을 통해 ChatGPT의 응답 스타일과 품질을 세밀하게 조절할 수 있으며, 각 파라미터는 특정 상황과 요구 사항에 따라 다르게 활용될 수 있으므로, 응용 프로그램에 가장 적합한 설정을 찾기 위해 다양한 값을 실험해 보는 것을 권장한다.