Top-k Örnekleme
Seçimi en olası k belirteçle sınırlamanın çıktı çeşitliliğine etkisi.
Top-k Örnekleme, CoddyKit'te ücretsiz bir AI Prompt Engineering dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Prompt Engineering öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Prompt Engineering kursu toplamda 4 dersten oluşur.
Top-k Örneklemesi Nedir
Top-k örneklemesi, modeli her adımda olasılığı en yüksek k belirteçten örnekleme yapmakla sınırlar. Top-k kümesinin dışındaki tüm belirteçlere sıfır olasılık atanır ve bunlar seçilemez.
k=1, açgözlü çözümlemedir (yalnızca olasılığı en yüksek tek belirteç). k=50, yaratıcı üretim için tipik bir aralıktır. k, kelime dağarcığındaki belirteç sayısına eşit olduğunda sınırsız örneklemeye eşdeğerdir.
Top-k Algoritması
Algoritma top-p'den daha basittir:
- Tam kelime dağarcığı üzerindeki softmax olasılıklarını hesaplayın
- Belirteçleri azalan olasılık sırasına göre sıralayın
- Yalnızca en yüksek k belirteci tutun; diğerlerinin tümünü 0 yapın
- Top-k olasılıklarını toplamları 1 olacak şekilde yeniden normalleştirin
- Yeniden normalleştirilmiş dağılımdan örnekleme yapın
import numpy as np
def softmax(logits, temperature=1.0):
scaled = logits / temperature
e = np.exp(scaled - np.max(scaled))
return e / e.sum()
def top_k_sample(logits, k=50, temperature=1.0):
probs = softmax(logits, temperature)
# Find top-k indices
top_k_indices = np.argsort(probs)[::-1][:k]
top_k_probs = probs[top_k_indices]
# Renormalize
top_k_probs = top_k_probs / top_k_probs.sum()
# Sample
chosen = np.random.choice(top_k_indices, p=top_k_probs)
return chosen
# With a 10-token vocabulary:
logits = np.random.randn(10)
print('Chosen token:', top_k_sample(logits, k=3))k=1: Açgözlü Çözümleme
k=1 olduğunda aday kümesinde yalnızca olasılığı en yüksek tek belirteç bulunur. Boyutu 1 olan bir kümeden örnekleme yapmak belirlenimcidir; model her zaman bu belirteci seçer. Bu, açgözlü çözümlemeyle (sıcaklık=0) aynıdır.
logits = np.array([3.0, 2.0, 1.0, 0.5, -1.0])
# k=1: greedy
top_1 = top_k_sample(logits, k=1)
print(f'k=1 always picks: {np.argmax(logits)}') # index 0, the highest logit
print(f'top_k_sample result: {top_1}') # always 0
# Multiple runs
for _ in range(5):
print(top_k_sample(logits, k=1), end=' ')
# Output: 0 0 0 0 0 — perfectly deterministicTipik Yaratıcı Aralık: k=50
k=50, yaratıcı metin üretiminde yaygın bir varsayılandır. Her adımda 50 belirteç arasında keşif yapılmasına olanak tanırken modelin güveninin çok düşük olduğu belirteçleri seçmesini önler.
50.000 belirteçlik bir kelime dağarcığında k=50, modelin her adımda yalnızca belirteçlerin en yüksek %0,1'ini dikkate aldığı anlamına gelir. Bu önemli bir sınırlamadır; kelime dağarcığının çoğu dışlanır.
import openai
client = openai.OpenAI(api_key='sk-...')
# Note: OpenAI API does not expose top_k directly in chat completions.
# Top-k is primarily a parameter in Hugging Face Transformers and Anthropic's API.
# Hugging Face example:
from transformers import pipeline
generator = pipeline('text-generation', model='gpt2')
output = generator(
'Once upon a time',
max_new_tokens=100,
do_sample=True,
top_k=50,
temperature=1.0
)
print(output[0]['generated_text'])Anthropic Claude API'sinde Top-k
Anthropic'in Claude API'si, top_k değerini doğrudan bir parametre olarak sunar. Bu, sabit kelime dağarcığı kesmesinin Claude çıktıları üzerindeki etkisini denemeyi kolaylaştırır.
import anthropic
claude = anthropic.Anthropic(api_key='sk-ant-...')
# top_k limits the number of tokens considered
message = claude.messages.create(
model='claude-opus-4-5',
max_tokens=256,
temperature=1.0,
top_k=50, # sample from top 50 most probable tokens
messages=[{
'role': 'user',
'content': 'Write a short poem about debugging code.'
}]
)
print(message.content[0].text)Sabit k Sorunu
Top-k'nin temel sınırlaması şudur: k sabittir ve o adımdaki model güveninden bağımsızdır.
Model çok emin olduğunda (bir belirtecin olasılığı %95 olduğunda) k=50, büyük ölçüde ilgisiz 49 belirteci yine de içerir. Model çok emin olmadığında (50 belirtecin her birinin olasılığı yaklaşık %2 olduğunda) k=50 aslında uygun olabilir.
Sorun şudur: bağlama bağlı olarak k=50 aynı anda hem fazla sınırlayıcı hem de fazla serbest olabilir. Top-p bunu dinamik çekirdek boyutlandırmasıyla ele alır.
# Illustrating the fixed-k problem
logits_confident = np.array([5.0] + [0.1] * 9) # model is very sure
logits_uncertain = np.array([1.0] * 10) # model has no idea
probs_conf = softmax(logits_confident)
probs_unc = softmax(logits_uncertain)
print('Confident — top 3 tokens cover:', np.sort(probs_conf)[::-1][:3].sum().round(3))
# ~0.998 — k=50 is extremely wasteful, includes near-zero probability tokens
print('Uncertain — top 3 tokens cover:', np.sort(probs_unc)[::-1][:3].sum().round(3))
# ~0.30 — k=50 may actually be needed to cover a reasonable nucleusDağılım Kuyruklarında Top-k
Top-k ve top-p en belirgin biçimde dağılım kuyruklarında farklılaşır:
- Top-k=50 ile 50. belirtecin olasılığı %0,001 olabilir (son derece düşük olasılıklı olsa da hâlâ aday kümesindedir)
- Top-p=0.9 ile %90'lık çekirdeğin dışındaki tüm belirteçler dışlanır; top-k içinde yer alacak belirteçler de buna dahildir
Top-p, kuyruk davranışını daha ilkeli bir biçimde ele alır: olasılığı sıralamadaki konumuna göre değil, düşük olasılıklı olup olmadığına göre dışlar.
# Tail behavior comparison
import numpy as np
# Highly skewed distribution (one dominant token)
skewed_logits = np.array([4.0, 2.0, 1.5, 1.0, 0.5,
0.1, 0.0, -0.1, -0.5, -1.0])
probs = softmax(skewed_logits)
print('Probability of tokens 6-9 (tail):')
for i in range(6, 10):
print(f' Token {i}: {probs[i]:.4%}')
# These tokens are very unlikely but are included in top-k=10
# Top-p=0.9 would exclude them entirelyTop-k ve Top-p'yi Birlikte Kullanma
Bazı uygulamalar hem top-k hem de top-p uygular: önce top-k ile küme daraltılır, ardından bu küme içinde top-p çekirdek örneklemesi uygulanır. Böylece top-k ile kelime dağarcığının boyutuna kesin bir üst sınır getirilirken top-p ile olasılığa dayalı filtreleme de uygulanır.
def top_k_top_p_sample(logits, k=50, p=0.9, temperature=1.0):
probs = softmax(logits, temperature)
# First apply top-k
top_k_indices = np.argsort(probs)[::-1][:k]
top_k_probs = probs[top_k_indices]
# Then apply top-p within top-k
sorted_k = np.sort(top_k_probs)[::-1]
cumulative = np.cumsum(sorted_k)
nucleus_size = np.searchsorted(cumulative, p) + 1
final_indices = top_k_indices[:nucleus_size]
final_probs = top_k_probs[:nucleus_size]
final_probs = final_probs / final_probs.sum()
return np.random.choice(final_indices, p=final_probs)Top-p Yerine Top-k Ne Zaman Tercih Edilir
Top-p'nin teorik avantajlarına rağmen top-k bazı durumlarda tercih edilir:
- Sınırlı kelime dağarcığı gerektiren görevler: modelin yalnızca sabit bir kümeden çıktı üretmesi gerektiğinde (ör. çoktan seçmeli A/B/C/D), küçük bir top-k (4) bunu doğrudan zorunlu kılar
- Yeniden üretilebilirlik: top-k'nin davranışını anlamak daha kolaydır — 'her zaman tam olarak 50 belirteci değerlendir'
- Donanım için optimize edilmiş uygulamalar: bazı çıkarım motorları top-k'yi top-p'den daha verimli uygular
# Constrained output with top-k=4
# For a multiple choice task (A, B, C, D)
# If A/B/C/D tokens have indices 32, 33, 34, 35
# top-k=4 with those as the top-4 logits forces selection from those 4 only
multiple_choice_prompt = (
'Answer with only A, B, C, or D.\n'
'What is the capital of France?\n'
'A) Berlin\n'
'B) Paris\n'
'C) Rome\n'
'D) Madrid\n'
'Answer:'
)
# With temperature=0, top_k=1: always picks the highest logit tokenPratik Top-k Kılavuzu
Top-k ne zaman kullanılmalı ve hangi değerler seçilmeli:
- k=1: açgözlü / bilgiye dayalı görevler
- k=5–20: odaklı yaratıcı görevler, minimum çeşitlilik
- k=40–100: çoğu dil modelinde standart yaratıcı aralık
- k=500+: çok açık uçlu keşif (nadiren gereklidir; bunun yerine top-p kullanın)
Modern LLM API'lerinin çoğunda tercih edilen parametre top-p'dir. Kesin bir kelime dağarcığı üst sınırına ihtiyaç duyduğunuzda veya API top-p'yi değil de top-k'yi sunduğunda top-k kullanın.
TOP_K_GUIDELINES = {
'factual_qa': 1, # greedy
'code_generation': 10, # near-greedy, correct syntax
'summarization': 20, # slightly varied but focused
'chat': 50, # natural variation
'creative_writing': 100, # wider vocabulary exploration
'poetry': 200, # unusual word choices encouraged
}
def call_with_top_k(task, prompt, model='claude-opus-4-5'):
k = TOP_K_GUIDELINES.get(task, 50)
claude = anthropic.Anthropic(api_key='sk-ant-...')
return claude.messages.create(
model=model,
max_tokens=512,
top_k=k,
messages=[{'role': 'user', 'content': prompt}]
)Top-k ve Sıcaklık Birlikte
Top-k ve sıcaklık sıralı olarak uygulanır: önce sıcaklık logit dağılımını yeniden şekillendirir, ardından top-k dağılımı olasılığı en yüksek k belirteçle sınırlar. Her ikisini birlikte kullanmak Hugging Face dönüştürücü işlem hatlarında yaygındır.
Yaygın birleşim: temperature=0.9 (orta düzey çeşitlilik) + top_k=50 (kelime dağarcığı için katı üst sınır). Bu, yalnızca yüksek sıcaklığın oluşturduğu düzlüğün ve kuyruktan örnekleme sorununun ikisinden de kaçınır.
from transformers import pipeline
generator = pipeline('text-generation', model='gpt2')
# Combined top-k + temperature
output = generator(
'The future of AI is',
max_new_tokens=80,
do_sample=True,
top_k=50,
temperature=0.9
)
print(output[0]['generated_text'])
# Compare: top-k=1 (greedy)
greedy_output = generator(
'The future of AI is',
max_new_tokens=80,
do_sample=False # greedy, equivalent to top_k=1
)
print(greedy_output[0]['generated_text'])Bilgi Kontrolü
Top-k örneklemesinde k=1 ayarlanırsa model hangi davranışı sergiler?
Özet: Top-k Örneklemesi
Top-k örneklemesi, örnekleme yapmadan önce kelime dağarcığını olasılığı en yüksek k belirtece indirger:
- k=1: açgözlü çözümleme — belirlenimci davranır ve her zaman en üstteki belirteci seçer
- k=50: tipik yaratıcı aralık — çeşitlilik ve tutarlılık arasında denge sağlar
- Temel sınırlama: k, modelin güveninden bağımsız olarak sabittir — fazla izin verici veya fazla kısıtlayıcı olabilir
- Top-p ile karşılaştırma: top-p'nin dinamik çekirdeği güven düzeyine uyum sağlar; top-k bunu yapmaz
Katı bir kelime dağarcığı sınırına ihtiyacınız olduğunda top-k kullanın. Çoğu üretim uygulamasında top-p'yi tercih edin. Sonraki ders: özel kullanım durumunuz için parametreleri seçme.
Sıkça Sorulan Sorular
“Top-k Örnekleme” dersi ücretsiz mi?
Evet — “Top-k Örnekleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Prompt Engineering kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Prompt Engineering kursu toplamda 4 dersten oluşur.
“Top-k Örnekleme” dersinde ne öğreneceğim?
Seçimi en olası k belirteçle sınırlamanın çıktı çeşitliliğine etkisi. AI Prompt Engineering ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
AI Prompt Engineering öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AI Prompt Engineering, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Top-k Örnekleme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu AI Prompt Engineering dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AI Prompt Engineering dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- LLM'lerde Sıcaklık Nedir
- Top-p Çekirdek Örnekleme
- Top-k Örnekleme
- Kullanım Alanınız İçin Parametreleri Seçme