LLM에게 똑같은 질문을 두 번 하면 답이 조금씩 다르게 나옵니다. 고장이 난 것이 아니라 일부러 그렇게 설계된 것입니다. 그리고 API를 쓰면 이 '다양함'의 정도를 temperature, top_p 같은 옵션으로 직접 조절할 수 있습니다.
이번 글에서는 LLM이 다음 단어를 고르는 방식과, 답변의 성격을 바꾸는 주요 생성 옵션을 언제 어떻게 조절하면 좋은지 정리해 보겠습니다.
1. LLM은 다음 토큰을 어떻게 고르나요?
LLM은 다음에 올 토큰 하나를 바로 정하는 것이 아니라, 가능한 모든 토큰에 대해 확률을 계산합니다. 예를 들어 "오늘 점심은 김치" 다음에 올 토큰의 확률이 다음과 같다고 가정해 보겠습니다.
| 후보 토큰 | 확률 (예시) |
|---|---|
| 찌개 | 55% |
| 볶음밥 | 25% |
| 전 | 12% |
| 말이국수 | 6% |
| 기타 수많은 토큰 | 2% |
항상 가장 높은 확률의 토큰만 고르면(이를 그리디 디코딩이라고 합니다) 답이 늘 같고 안정적이지만, 글이 단조롭거나 같은 표현이 반복되기 쉽습니다. 그래서 보통은 확률에 따라 무작위로 뽑는(샘플링) 방식을 씁니다. 55% 확률로 '찌개', 25% 확률로 '볶음밥'이 나오는 식입니다. 같은 질문에 답이 매번 달라지는 이유가 바로 이것입니다.
2. Temperature: 답변의 대담함 조절
temperature는 확률 분포를 얼마나 뾰족하게 또는 평평하게 만들지 정하는 값입니다.
- 낮을수록 (예: 0~0.3): 높은 확률의 토큰이 더 강하게 선택됩니다. 답이 일관되고 예측 가능해집니다. 0에 가까우면 거의 항상 같은 답이 나옵니다.
- 높을수록 (예: 0.8 이상): 낮은 확률의 토큰도 뽑힐 기회가 늘어납니다. 표현이 다양하고 창의적이 되지만, 너무 높으면 엉뚱하거나 앞뒤가 맞지 않는 글이 나올 수 있습니다.
위 예시로 보면 temperature를 낮추면 '찌개'가 거의 항상 선택되고, 높이면 '말이국수'도 종종 나오게 됩니다.
3. 그 밖의 주요 생성 옵션
| 옵션 | 하는 일 |
|---|---|
| top_p (nucleus sampling) | 확률이 높은 순서로 누적 합이 p가 될 때까지의 후보만 남기고 그 안에서 뽑습니다. 0.9면 상위 90%에 해당하는 후보만 사용합니다. |
| top_k | 확률이 높은 상위 k개의 후보만 남깁니다. 지원하지 않는 API도 있습니다. |
| max tokens | 답변의 최대 토큰 수입니다. 너무 작게 잡으면 답이 중간에 잘립니다. |
| stop sequences | 지정한 문자열이 나오면 생성을 멈춥니다. 정해진 형식의 답을 받을 때 유용합니다. |
| seed | 일부 API에서 같은 값을 주면 결과를 최대한 비슷하게 재현합니다. 완전한 재현을 보장하지는 않습니다. |
temperature와 top_p는 비슷한 역할을 하므로, 공식 문서들도 보통 둘 중 하나만 조절하라고 권장합니다. 또 최신 추론 모델 중에는 이런 옵션을 고정하거나 일부만 허용하는 경우도 있으니 사용하는 모델의 문서를 확인하세요.
4. 작업별 추천 설정
| 작업 | temperature 방향 | 이유 |
|---|---|---|
| 데이터 추출, 분류, JSON 출력 | 낮게 | 매번 같은 기준으로 정확하게 나와야 함 |
| 코드 작성, 사실 기반 질의응답 | 낮게~중간 | 정확성이 우선 |
| 일반 대화, 요약 | 중간 (기본값) | 자연스러움과 안정성의 균형 |
| 아이디어 발상, 카피라이팅, 소설 | 높게 | 다양한 표현과 새로운 조합이 필요 |
정확한 숫자는 모델마다 체감이 다르니, 기본값에서 시작해 조금씩 바꿔 가며 결과를 비교해 보세요. 또 temperature를 0으로 낮춘다고 해서 답이 '정확해지는' 것은 아닙니다. 가장 그럴듯한 답이 일관되게 나올 뿐이므로, 사실 확인은 여전히 필요합니다.
정리
LLM은 다음 토큰의 확률을 계산한 뒤 그중에서 뽑기 때문에 같은 질문에도 답이 달라집니다. temperature는 이 뽑기의 대담함을 조절하는 값으로, 정확성이 중요한 작업은 낮게, 창의성이 필요한 작업은 높게 설정합니다. top_p, max tokens, stop sequences 같은 옵션도 함께 알아 두면 원하는 결과를 더 안정적으로 얻을 수 있습니다. 이번 글로 1단계 기초 편을 마치고, 다음 글부터는 RAG의 핵심인 임베딩을 시작으로 LLM의 원리를 한 단계 더 깊이 알아보겠습니다.
참고자료
- Holtzman et al., "The Curious Case of Neural Text Degeneration" (nucleus sampling, 2019): https://arxiv.org/abs/1904.09751
- OpenAI, API Reference (Chat Completions 파라미터): https://platform.openai.com/docs/api-reference/chat/create
- Anthropic, Messages API: https://docs.anthropic.com/en/api/messages
- Hugging Face, Generation strategies: https://huggingface.co/docs/transformers/generation_strategies
'AI > LLM 공부' 카테고리의 다른 글
| [LLM] LLM 공부 8편: 코사인 유사도와 벡터 인덱스 (0) | 2026.10.31 |
|---|---|
| [LLM] LLM 공부 7편: 임베딩의 개념과 활용 (0) | 2026.10.23 |
| [LLM] LLM 공부 5편: 컨텍스트 윈도우와 API 비용 (0) | 2026.10.23 |
| [LLM] LLM 공부 4편: 토큰과 토크나이저 쉽게 이해하기 (0) | 2026.10.23 |
| [LLM] LLM 공부 3편: 시스템 프롬프트와 구조화된 출력 (0) | 2026.10.23 |