고급 생성 파라미터(Advanced Generation Parameters)

고급 생성 파라미터(Advanced Generation Parameters)

Cohere 모델이 생성하는 출력의 종류를 제어하는 고급 파라미터들에 대해 설명하는 문서예요.

출처: 문서

본문

Cohere 모델이 생성할 출력의 종류에 영향을 주는 몇 가지 추가 모델 파라미터가 있어요. 여기에는 top-p, top-k, frequency_penalty, presence_penalty 파라미터가 포함됩니다.

Top-p와 Top-k

출력 토큰을 선택하는 방법은 언어 모델로 텍스트를 성공적으로 생성하는 데 중요한 부분이에요. 출력 토큰을 선택하는 방법(디코딩 전략이라고도 함)은 여러 가지가 있으며, 대표적인 두 가지가 top-k 샘플링과 top-p 샘플링입니다.

모델 입력이 The name of that country is the이라는 프롬프트인 예시를 살펴볼게요.

model.

이 경우 출력 토큰인 United는 처리의 마지막 단계에서 선택됐어요 — 언어 모델이 입력을 처리하고 어휘의 모든 토큰에 대한 가능도(likelihood) 점수를 계산한 뒤입니다. 이 점수는 토큰이 문장의 다음 토큰이 될 가능성(모델이 학습한 모든 텍스트 기반)을 나타내요.

output.

1. 최상위 토큰 선택: 탐욕 디코딩(greedy decoding)

이 예시에서 우리는 가장 높은 가능도를 가진 토큰인 United를 선택한 것을 볼 수 있어요.

drawbacks.

탐욕 디코딩은 합리적인 전략이지만 몇 가지 단점이 있어요. 예를 들어 출력이 반복 루프에 갇힐 수 있습니다. 스마트폰 자동 완성 제안을 생각해 보세요. 가장 높게 제안된 단어만 계속 고르다 보면 반복되는 문장으로 변질될 수 있어요.

2. 상위 토큰들 중에서 선택: top-k

또 다른 일반적으로 사용되는 전략은 상위 3개 토큰의 후보 목록(shortlist)에서 샘플링하는 것이에요. 이 접근 방식은 다른 고득점 토큰들이 선택될 기회를 갖게 해줍니다. 이 샘플링으로 도입된 무작위성은 많은 시나리오에서 생성 품질을 높이는 데 도움이 돼요.

scores.

더 넓게 보면, 상위 3개 토큰을 선택한다는 것은 k=3을 쓰면서 top-k 파라미터를 3으로 설정하는 것과 같아요 (기본값은 0). top-k 파라미터를 바꾸면 모델이 각 토큰을 출력할 때 샘플링하는 후보 목록의 크기가 설정됩니다. top-k를 1로 설정하면 탐욕 디코딩이 됩니다.

setting.

k가 0으로 설정되면 모델은 k 샘플링을 비활성화하고 대신 p를 사용한다는 점에 유의하세요.

3. 확률 합이 15%가 되는 상위 토큰들 중에서 선택: top-p

최적의 top-k 값을 고르는 어려움은 토큰 후보 목록의 크기를 동적으로 설정하는 인기 있는 디코딩 전략의 길을 열어줘요. Nucleus Sampling이라고 불리는 이 방법은 가능도 합이 특정 값을 초과하지 않는 상위 토큰들을 선택해 후보 목록을 만듭니다. top-p 값이 0.15(기본값은 0.75)인 장난감 예시는 다음과 같아요:

threshold.

Top-p는 보통 높은 값(p=0.75, 최대값은 0.99)으로 설정되며, 샘플링될 수 있는 낮은 확률 토큰의 긴 꼬리(long tail)를 제한하는 목적이 있어요. top-k와 top-p를 함께 사용할 수도 있습니다. k와 p가 모두 활성화되면 p는 k 이후에 동작해요. 동작 방식을 보여주는 코드 스니펫은 다음과 같습니다:

PYTHON

import cohere
co = cohere.ClientV2(api_key=<API_KEY>)
response = co.chat(
    model="command-a-03-2025",
    messages=[{"role": "user", "content": "hello world!"}],
    k=100,
    p=0.75
)
print(response)

빈도 및 존재 패널티(Frequency and Presence Penalties)

이 맥락에서 논의할 가치가 있는 마지막 파라미터 집합은 frequency_penalty와 presence_penalty인데, 둘 다 로짓(logits, 정규화되지 않은 로그 확률)에 작용해 주어진 토큰이 출력에 나타나는 빈도에 영향을 줍니다.

빈도 패널티(frequency penalty)는 앞선 텍스트(프롬프트 포함)에 이미 나타난 토큰에 패널티를 부과하며, 그 토큰이 나타난 횟수에 따라 규모가 조정돼요. 그래서 이미 10번 나타난 토큰은 한 번만 나타난 토큰보다 더 높은 패널티(즉 나타날 확률이 더 감소)를 받습니다.

반면 존재 패널티(presence penalty)는 빈도와 관계없이 패널티를 적용해요. 토큰이 이전에 한 번이라도 나타나면 패널티를 받게 됩니다.

이 설정들은 출력에서 반복을 없애고 싶을 때 유용해요.

더 알아보기 (Learn more)