पाठ 7 / 27
Sampling: Greedy, Top-k और Top-p
Truncation रणनीतियों से अगला token चुनें।
असंभावित पूँछ काट दें
पूरे वितरण से चुनने पर कभी-कभी बहुत असंभावित token आ जाता है और पाठ बिगड़ जाता है। Greedy हमेशा शीर्ष token लेता है (निश्चित पर दोहराव वाला)। Top-k सिर्फ़ k सबसे संभावित tokens रखता है। Top-p (nucleus) सबसे छोटा वह समूह रखता है जिसकी संभावनाओं का योग p हो। दोनों में बची संभावनाएँ फिर normalise होती हैं और token random चुना जाता है। ये settings और temperature मिलकर रचनात्मकता बनाम भरोसेमंदी तय करते हैं।
Top-k और top-p, चलाकर
मैंने यह सादा-Python (सिर्फ़ standard library) उदाहरण चलाया। k=3 वाला top-k cat, dog, fish रखता है। p=0.8 वाला top-p सिर्फ़ cat और dog रखता है क्योंकि 0.503 + 0.305, 0.8 पार कर देता है। Draws में निश्चित random seed है।
import math, random
def softmax(xs):
m = max(xs); e = [math.exp(x - m) for x in xs]; s = sum(e)
return [v / s for v in e]
words = ["cat", "dog", "fish", "bird", "rock", "tree"]
probs = softmax([3.0, 2.5, 1.5, 1.0, -1.0, -2.0])
def top_k(words, probs, k):
pairs = sorted(zip(words, probs), key=lambda p: -p[1])[:k]
z = sum(p for _, p in pairs)
return [(w, p / z) for w, p in pairs]
def top_p(words, probs, p):
pairs = sorted(zip(words, probs), key=lambda x: -x[1])
keep, total = [], 0.0
for w, pr in pairs:
keep.append((w, pr)); total += pr
if total >= p:
break
z = sum(pr for _, pr in keep)
return [(w, pr / z) for w, pr in keep]
print("full ", [(w, round(p, 3)) for w, p in zip(words, probs)])
print("top-k3", [(w, round(p, 3)) for w, p in top_k(words, probs, 3)])
print("top-p0.8", [(w, round(p, 3)) for w, p in top_p(words, probs, 0.8)])
random.seed(1)
kept = top_p(words, probs, 0.8)
draws = random.choices([w for w, _ in kept], [p for _, p in kept], k=10)
print(draws)
Output:
full [('cat', 0.503), ('dog', 0.305), ('fish', 0.112), ('bird', 0.068), ('rock', 0.009), ('tree', 0.003)]
top-k3 [('cat', 0.547), ('dog', 0.331), ('fish', 0.122)]
top-p0.8 [('cat', 0.622), ('dog', 0.378)]
['cat', 'dog', 'dog', 'cat', 'cat', 'cat', 'dog', 'dog', 'cat', 'cat']एक बार में एक sampling knob बदलें
Providers आम तौर पर temperature या top-p में से एक बदलने की सलाह देते हैं, दोनों नहीं, ताकि पता चले कि किस बदलाव से फ़र्क़ पड़ा।
त्वरित जाँच: Top-p sampling क्या रखता है?
- tokens का सबसे छोटा समूह जिसकी संभावनाओं का योग कम से कम p हो
- ठीक p tokens
- सिर्फ़ आख़िरी token
- हर token
Answer
tokens का सबसे छोटा समूह जिसकी संभावनाओं का योग कम से कम p हो — रखे गए समूह का आकार इस पर निर्भर है कि मॉडल कितना आश्वस्त है।