पाठ 22 / 29
सफलता दरें, pass@k और विचरण
इस तथ्य का ध्यान रखें कि agent runs हर प्रयास में बदलते हैं।
एक run क़िस्सा है
Agent runs अनिश्चित हैं: वही कार्य एक प्रयास में सफल और दूसरे में विफल हो सकता है। इसलिए एक प्रयास कम बताता है। प्रति कार्य कई प्रयासों पर सफलता दर मापें। pass@k इसका उत्तर देता है "यदि मैं agent को k बार कोशिश करने दूँ तो कम से कम एक प्रयास सफल होने की संभावना क्या है?" यह k के साथ तेज़ी से बढ़ता है (30% एकल-प्रयास दर पाँच कोशिशों में लगभग 87% तक पहुँच सकती है) पर तभी मदद करता है जब अच्छा प्रयास चुनने का भरोसेमंद तरीक़ा हो, जैसे tests या समीक्षा; सत्यापक के बिना ज़्यादा प्रयास का अर्थ बस जाँचने को ज़्यादा उम्मीदवार। विचरण भी रिपोर्ट करें (tool कितना सुसंगत है), क्योंकि जो tool 60% बार अप्रत्याशित रूप से सफल होता है वह उस tool से कम उपयोगी हो सकता है जो 50% बार ऐसे सफल हो जिसका आप पूर्वानुमान और जाँच कर सकें।
pass@k अनुमानक, चलाकर
मैंने यह सादे Python 3 (सिर्फ़ standard library) से चलाया, अस्थायी folder में बनाए throwaway project के साथ। 20 प्रयासों में से 6 पास (30%) के साथ कम-से-कम-एक-सफलता का निष्पक्ष अनुमान k=1 के लिए 0.300, k=3 के लिए 0.681, k=5 के लिए 0.871 और k=10 के लिए 0.995 है। सूत्र 1 - C(n-c, k) / C(n, k) है।
from math import comb
def pass_at_k(n, c, k):
"""Unbiased estimate of P(at least one of k samples passes), from n attempts with c passes."""
if n - c < k: return 1.0
return 1.0 - comb(n - c, k) / comb(n, k)
n, c = 20, 6 # 20 attempts at a task, 6 produced a passing patch
for k in (1, 3, 5, 10):
print(f"pass@{k} = {pass_at_k(n, c, k):.3f}")
print("single-attempt success rate c/n =", c / n)
Output:
pass@1 = 0.300 pass@3 = 0.681 pass@5 = 0.871 pass@10 = 0.995 single-attempt success rate c/n = 0.3
त्वरित जाँच: व्यवहार में ऊँचा pass@k वास्तव में कब मदद करता है?
- सिर्फ़ छोटे कार्यों के लिए
- हमेशा, सत्यापन चाहे जो हो
- कभी नहीं
- जब पास होने वाला प्रयास चुनने के लिए tests जैसा भरोसेमंद सत्यापक हो
Answer
जब पास होने वाला प्रयास चुनने के लिए tests जैसा भरोसेमंद सत्यापक हो — कई प्रयासों को अच्छा वाला पहचानने का तरीक़ा चाहिए।