Nucleus Sampling
뉴클리어스 샘플링(Top-p)이 AI 텍스트 생성을 위해 토큰을 선택하는 방식을 알아보고, 출력 다양성을 조절하기 위해 top-k, 그리디 디코딩, 온도(temperature)와 비교해 보세요.
누클레우스 샘플링은 상위 p 샘플링이라고도 하며, 인공지능 텍스트 생성 중에 다음 토큰을 선택하는 방법입니다. 항상 가장 확률이 높은 토큰을 선택하는 대신, 모델은 확률의 합이 선택된 임계값 이상이 되는 후보 목록을 구성한 후 해당 후보 목록에서 무작위로 샘플링합니다. 후보 목록은 예측마다 변경됩니다. 하나의 이어지는 내용이 명확할 때는 작아지고 여러 이어지는 내용이 타당할 때는 커집니다.
누클레우스 샘플링의 작동 방식#
언어 모델은 가능한 모든 다음 토큰에 확률을 할당합니다. 이러한 확률은 일반적으로 모델의 출력 점수에서 소프트맥스를 사용하여 계산되므로 값의 합이 1이 됩니다. 누클레우스 샘플링은 토큰을 확률이 높은 순서대로 정렬하고, 누적 확률이 임계값 p에 도달할 때까지 토큰을 포함하며, 나머지는 제외하고 포함된 토큰에서 샘플링합니다. 여기서 p는 개별 토큰의 확률이 아니라 확률 질량을 나타냅니다. PyTorch의 소프트맥스 문서에서는 확률 변환을 설명하고, IBM의 디코딩 가이드에서는 누적 컷오프를 설명합니다. (docs.pytorch.org)
가능한 다음 토큰 4개의 확률이 각각 0.50, 0.25, 0.15, 0.10이라고 가정해 보겠습니다. top_p=0.80을 사용하면 처음 두 개의 합이 0.75에 불과하므로 세 번째 토큰도 포함되어 후보 목록이 0.90이 됩니다. 네 번째 토큰은 제외됩니다. 그런 다음 모델은 처음 세 개의 토큰 중에서 정규화 후 확률에 비례하여 샘플링하며, 각 토큰에 동일한 기회를 부여하지 않습니다. 컷오프를 넘는 토큰이 후보 목록에 남아 있기 때문에 컷오프가 p을 초과할 수 있습니다. 상위 p에 대한 Google Cloud의 설명에서는 동일한 토큰 선택 규칙을 설명합니다. (cloud.google.com)
이러한 선택은 생성된 모든 토큰 후에 다시 발생합니다. 문장이 전개됨에 따라 모델은 새로운 분포를 계산하고 결과적으로 새로운 누클레우스를 계산합니다.
상위 p 대 상위 k, 그리디 디코딩 및 온도#
이러한 설정은 생성의 서로 다른 부분에 영향을 미칩니다.
- 상위 k 샘플링은 확률이 가장 높은 5개의 토큰과 같이 고정된 수의 후보를 유지합니다. 상위 p는 확률 임계값에 도달할 만큼의 후보를 유지하므로 후보 목록에 고정된 크기가 없습니다.
- 그리디 디코딩은 항상 확률이 가장 높은 단 하나의 토큰을 선택합니다. 예측 가능하지만 샘플링이 허용하는 변동성이 전혀 없습니다.
- 온도는 선택 전에 모델이 높은 확률의 토큰을 선호하는 정도를 변경합니다. 온도가 낮으면 주요 선택지에 확률이 집중되고, 온도가 높으면 확률이 더 넓게 분산됩니다. 대신 상위 p는 결과 분포에 누적 컷오프를 설정합니다.
구현 시 이러한 제어 기능을 결합할 수 있지만, 상호 작용으로 인해 결과를 해석하기가 더 어려워집니다. 실험할 때는 한 번에 하나의 설정만 변경하세요. OpenAI Chat Completions 매개변수 참고 자료에서는 top_p을 설명하고 둘 다 한꺼번에 조정하기보다는 해당 매개변수나 온도 중 하나를 조정할 것을 권장합니다. (platform.openai.com)
실무에서 중요한 이유#
고객 지원 챗봇에서 누클레우스 샘플링은 가능성 없는 모든 이어지는 내용을 끌어오지 않으면서 일상적인 답변의 자연스러운 여러 가지 표현을 허용할 수 있습니다. 예를 들어 반품 정책을 설명하는 어시스턴트는 프롬프트에 제공된 정책 세부 정보를 유지하면서 첫 문장을 다양하게 변경할 수 있습니다. 샘플링은 이러한 세부 정보를 확인하지 않습니다. 유창한 답변도 여전히 틀릴 수 있으므로 사실 확인과 적절한 근거 마련은 여전히 필요합니다.
이미지 캡셔닝에서 비전 언어 모델은 동일한 거리 풍경을 설명할 수 있는 여러 가지 합리적인 방법을 가질 수 있습니다. 상위 p는 낮은 확률의 토큰 선택을 필터링하면서 캡션의 문구를 다양하게 변경할 수 있습니다. 시각적 파이프라인은 먼저 Ultralytics YOLO26을 객체 검출에 사용한 다음, 검출된 객체를 캡션 생성기의 컨텍스트로 제공할 수 있습니다. YOLO의 검출 단계에서는 객체 라벨을 선택하기 위해 누클레우스 샘플링을 사용하지 않으며, 해당 설정은 다운스트림 언어 생성 단계에 적용됩니다. TensorFlow 이미지 캡셔닝 튜토리얼에서는 시각적 입력과 텍스트 디코더가 어떻게 조화를 이루는지 보여줍니다. (ibm.com)
문서화된 워크플로에서 상위 p 시도하기#
Ultralytics LLM 인터페이스는 호환되는 언어 모델 엔드포인트에 대한 요청 인수를 수락합니다. ultralytics[llm]을 설치하고 OPENAI_API_KEY를 설정한 후, 이 예제에서는 top_p=0.9과 함께 짧은 응답을 요청합니다.
from ultralytics import LLM
# Use an endpoint that supports the top_p request argument.
llm = LLM("gpt-4.1-mini", api="chat.completions")
prompt = "Describe a city bus in one friendly sentence."
response = llm(prompt, top_p=0.9)
message = response.choices[0].message
print(message.content)이 코드는 토큰 선택을 언어 모델 제공업체에 맡깁니다. 코드를 다시 실행하면 다른 문구가 생성될 수 있지만, top_p=0.9이 모든 응답이 다를 것이라는 보장은 아닙니다. 다른 곳에 동일한 설정을 적용하기 전에 선택한 모델이 지원하는 매개변수를 확인하세요.
유용한 설정 선택하기#
모델의 기본값으로 시작한 다음 대표적인 프롬프트에서 출력을 비교합니다. 응답이 가능성 없는 문구로 빠지면 top_p을 낮추고, 불필요하게 반복되는 경우 더 높은 값을 고려하세요. 다양성만이 아니라 작업에 따라 결과를 평가합니다. 고객 답변나 캡션의 경우 사실의 정확성과 중요한 세부 정보가 있는지 검토하세요. 더 좁은 후보 목록은 일부 비정상적인 이어지는 내용을 줄일 수 있지만, 근거 없는 진술을 사실로 만들 수는 없습니다. 정확한 출력 생세에 관한 IBM의 지침에서도 디코딩 선택을 근거가 있는 생성 워크플로의 한 부분으로만 다룹니다. (ibm.com)









