Ana içeriğe atla

HumanEval: LLM Kod Üretme Yeteneklerini Değerlendirmek için Bir Karşılaştırma Ölçütü

Hugging Face Evaluate kütüphanesiyle LLM’inizi kod üretme yetenekleri açısından nasıl değerlendireceğinizi öğrenin.
Güncel 3 Eki 2026  · 9 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

HumanEval, OpenAI tarafından geliştirilen ve büyük dil modellerinin (LLM’ler) kod üretme görevlerindeki performansını değerlendiren bir karşılaştırma veri kümesidir. Yapay zekâ modellerinin kodu anlama ve üretme yeteneklerini değerlendirmede önemli bir araç haline gelmiştir.

Bu eğitimde HumanEval ve pass@k metriğini öğreneceğiz. Ayrıca, codeparrot-small modelinin 164 problem üzerindeki kod üretme yeteneklerini değerlendireceğiz. 

HumanEval değerlendirme sürecinde veri kümesini, modeli ve gerekli metrikleri yüklemek için Hugging Face ekosistemini kullanacağız. LLM dünyasına ve neler başarabileceklerine görece yeniyseniz, Geniş Dil Modelleri Geliştirme kursumuza göz atın.

HumanEval özellik görseli

Görsel: Yazar

HumanEval nedir?

HumanEval, özellikle büyük dil modelleri için tasarlanmış bir değerlendirme veri kümesi olarak OpenAI tarafından geliştirilmiştir. Modellerin dili kavrama, akıl yürütme ve algoritmalar ile basit matematikle ilgili problemleri çözme yeteneklerine odaklanarak, LLM’lerin kod üretme görevlerinde değerlendirilmesi için başvuru niteliğinde bir karşılaştırma sağlar. 

Veri kümesi, her biri bir fonksiyon imzası, docstring, gövde ve ortalama 7,7 test olmak üzere birkaç birim testi içeren, el yazımı 164 programlama probleminden oluşur.

Aşağıdaki örnekte, insan değerlendirme deposunu klonlayacak, gerekli Python paketlerini kuracak ve ardından örnek veri kümesi üzerinde işlevsel doğruluk değerlendirmesini çalıştıracağız. 

$ git clone https://github.com/kingabzpro/human-eval
$ pip install -e human-eval
$ evaluate_functional_correctness data/example_samples.jsonl --problem_file=data/example_problem.jsonl

Sonucu pass@k, özelde de pass@1 cinsinden aldık. Bu metrik, modelin ilk denemede yüzde 50 başarı oranını gösterir. Bir sonraki bölümde bu metriği ayrıntılı olarak öğreneceğiz.

Reading samples...
6it [00:00, 2465.79it/s]
Running test suites...
100%|█████████████████████████████████████████████| 6/6 [00:03<00:00,  1.97it/s]
Writing results to data/example_samples.jsonl_results.jsonl...
100%|██████████████████████████████████████████| 6/6 [00:00<00:00, 12035.31it/s]
{'pass@1': 0.4999999999999999}

Bilgiye dayalı kararlar almak için temel metrikler, metodolojiler ve en iyi uygulamalarla LLM’leri nasıl değerlendireceğinizi öğrenmek üzere LLM Değerlendirme: Metrikler, Metodolojiler, En İyi Uygulamalar blog yazısını okuyun.

Yapay Zeka Uygulamaları Geliştirin

OpenAI API'sını kullanarak AI uygulamaları oluşturmayı öğrenin.
Ücretsiz Olarak Beceri Geliştirmeye Başlayın

Pass@k Metriğini Anlamak

HumanEval, geleneksel eşleşme tabanlı metriklerden farklıdır. "İşlevsel doğruluk" adı verilen daha pratik bir yaklaşım kullanır. Bu yaklaşım, bir problem için üretilen en iyi k kod örneğinden en az birinin birim testlerini geçme olasılığını değerlendirmek üzere pass@k metriğinden yararlanır. 

Metnin benzerliğinden işlevsel doğruluğa geçiş, bir modelin programlama zorluklarını çözme becerisinin daha anlamlı bir değerlendirmesini sağlar. Bu süreç, geliştiricilerin kodlarının doğruluğunu değerlendirmek için birim testleriyle test etmelerine benzer.

Aşağıda pass@k metriğinin hesaplanmasına ilişkin matematiksel formülü görebiliriz:

pass@k matematiksel formülü.

  • n: Üretilen örneklerin toplam sayısı.
  • c: n örnek içindeki doğru örneklerin sayısı.
  • k: Dikkate alınan örnek sayısı (en iyi k).

Pass@k metriği şu şekilde hesaplanır:

  • C(n-c, k): Hatalı örneklerden (n-c) k örnek seçmenin kaç yolu olduğunu hesaplar. Tüm seçilen k örneğin hatalı olduğu durumu temsil eder.
  • C(n,k)/C(n−c,k): Bu kesir, seçilen k örneğin tamamının hatalı olma olasılığını verir.
  • 1 - C(n−c,k)/C(n,k): Bu olasılığın 1’den çıkarılması, k örnekten en az birinin doğru olma olasılığını verir; bu da pass@k metriğidir.

Pass@k metriği, sınırlı sayıda denemede doğru bir çözüm üretme olasılığını yansıttığı için, kod üretme modellerinin pratik performansını değerlendirmede özellikle faydalıdır. 

Metrik, Papers with Code gibi lider tablolarının bulunduğu rekabetçi ortamlarda yaygın olarak kullanılır; burada modeller pass@10 ve pass@100 dahil pass@k puanlarına göre sıralanır. 

HumanEval, üretilen kodun sözdizimsel olarak doğru ve işlevsel olarak etkin olmasını sağlar.

Hugging Face Evaluate ile HumanEval Değerlendirmesi Yapma

Bu projede, OpenAI HumanEval veri kümesini yükleyecek ve codeparrot/codeparrot-small üzerinde işlevsel doğruluk değerlendirmesini çalıştıracağız. 

Dış döngü 164 (Problem sayısı) ve iç döngü 5 (tek bir problem için üretilen örnek sayısı) olacağı için, değerlendirme süresini hızlandırmak amacıyla daha küçük bir kod üretme modeli seçiyoruz.

1. Kurulum

Hugging Face’in Evaluate Python kütüphanesini kurarak başlayacağız. Evaluate, makine öğrenimi modellerini ve veri kümelerini tek satırlık kodla çeşitli alanlarda kolayca değerlendirmenizi sağlayan, yerel makinelerden dağıtık eğitim kurulumlarına kadar tutarlılık ve yeniden üretilebilirlik sunan güçlü bir kütüphanedir.

%%capture
%pip install evaluate

Ayrıca, model değerlendirmesini çalıştırmamıza imkân tanıyacak bir ortam değişkeni ayarlayın. 

import os
os.environ["HF_ALLOW_CODE_EVAL"] = "1"
os.environ["TOKENIZERS_PARALLELISM"] = "false"

2. Veri kümesini ve değerlendirme metriğini yükleme

openai_humaneval veri kümesini Hugging Face’ten yükleyeceğiz. Bu veri kümesi, Python’da 164 programlama problemi içerir ve yorumlarda ve docstring’lerde bulunan İngilizce doğal metni kapsar. 

Ayrıca, HumanEval karşılaştırmasını çalıştırmamıza olanak tanıyan code_eval değerlendirme metriğini de yükleyeceğiz.

from datasets import load_dataset
from evaluate import load
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
from tqdm import tqdm

# Load HumanEval dataset
human_eval = load_dataset("openai_humaneval")['test']

# Load code evaluation metric
code_eval_metric = load("code_eval")

3. Modeli ve belirteçleyiciyi yükleme 

CodeParrot modelini ve belirteçleyicisini Hugging Face Hub’dan yükleyin. CodeParrot, özellikle Python kodu üretmek üzere eğitilmiş, 110 milyon parametreli GPT-2 tabanlı bir modeldir.

# Specify the model name or path
model_name = "codeparrot/codeparrot-small"

# Load the model and tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
model.eval()

4. Belirteçleyiciyi düzeltme

pad_token_id ve pad_token_id değerlerini ayarlayın ve yeni belirteçler eklenmişse model gömmelerini yeniden boyutlandırın. 

# Set pad_token_id and pad_token_id if not already set
if tokenizer.pad_token_id is None:
    tokenizer.pad_token_id = 0  # Commonly used pad token ID
if tokenizer.eos_token_id is None:
    tokenizer.eos_token_id = 2  # Commonly used eos token ID for Llama

# Ensure the tokenizer has the pad and eos tokens
if tokenizer.pad_token is None:
    tokenizer.add_special_tokens({'pad_token': '<pad>'})
if tokenizer.eos_token is None:
    tokenizer.add_special_tokens({'eos_token': '</s>'})

# Resize model embeddings if new tokens were added
if len(tokenizer) > model.config.vocab_size:
    model.resize_token_embeddings(len(tokenizer))

5. Kod çözümü üretme

Büyünün gerçekleştiği ana bölüm burası. Değerlendirmek üzere toplam 164 problem için, problem başına beş örnekle HumanEval’ı çalıştıracağız. Dış döngü, veri kümesinden komutu ve testi çıkarır. Komutu kullanarak aynı problem için beş farklı örnek üretilir. 

Bu sürecin sonunda iki listemiz olacak: test_cases ve candidates.

  • Test Cases: Doğrudan veri kümesinden çıkarılır.
  • Candidates: Her problem için üretilen beş kod örneği.

Bu kurulum, üretilen çözümlerin test vakalarına karşı kapsamlı bir şekilde değerlendirilmesine ve karşılaştırılmasına olanak tanır.

# Set the number of candidates per problem
num_samples_per_problem = 5  # Adjust as needed for pass@k computation

# Lists to store test cases and predictions
test_cases = []
candidates = []

# Create a progress bar for the outer loop (problems)
print("Generating code solutions...")
for problem in tqdm(human_eval, desc="Problems", unit="problem"):
    prompt = problem['prompt']
    test_code = problem['test']
    # Store the test cases
    test_cases.append(test_code)

    # Generate multiple candidate solutions for each problem
    problem_candidates = []

    # Create a progress bar for the inner loop (samples per problem)
    for _ in range(num_samples_per_problem):
        # Encode the prompt and get attention mask
        inputs = tokenizer(prompt, return_tensors="pt").to(device)

        # Generate code with attention mask and proper token IDs
        with torch.no_grad():
            outputs = model.generate(
                input_ids=inputs['input_ids'],
                attention_mask=inputs['attention_mask'],
                max_length=512,
                do_sample=True,
                temperature=0.7,
                top_p=0.95,
                num_return_sequences=1,
                pad_token_id=tokenizer.pad_token_id,
                eos_token_id=tokenizer.eos_token_id,
            )
        generated_code = tokenizer.decode(outputs[0], skip_special_tokens=True)
        # Remove the prompt from the generated code
        generated_code = generated_code[len(prompt):]
        problem_candidates.append(generated_code)
    # Add the candidates for the current problem
    candidates.append(problem_candidates)

print("Code generation complete.")

Çıktı: 

Generating code solutions...

Problems: 100%|██████████| 164/164 [34:35<00:00, 12.66s/problem]

Code generation complete.

6. pass@k hesaplama

Şimdi, üretilen kod örneklerini başvuru test vakalarına karşı karşılaştırarak, pass@k değerlendirme metriğini kullanarak k’nin farklı değerleri (1 ve 5) için geçiş oranını hesaplayacak ve her k değeri için başarı oranını yüzde olarak çıktılacağız.

# Compute pass@k
k_values = [1, 5]
print("Evaluating generated code...")
pass_at_k, results = code_eval_metric.compute(
    references=test_cases,
    predictions=candidates,
    k=k_values,
    num_workers=4,  # Adjust based on your system
    timeout=10.0,   # Adjust the timeout as needed
)

# Print the results
for k in k_values:
    print(f"Pass@{k}: {pass_at_k[f'pass@{k}'] * 100:.2f}%")

Sonuçlar, en iyi adayı dikkate aldığımızda (Pass@1) üretilen kod örneklerinin %27,07’sinin değerlendirme ölçütlerini geçtiğini, en iyi beş adayı dikkate aldığımızda ise (Pass@5) %65,85’inin geçtiğini gösteriyor. Python kodu üretmek için daha küçük bir dil modeli kullandığımız düşünülürse, bu performans iyi kabul edilebilir. 

Bununla birlikte, Pass@1 oranı %90,2 olan GPT-4o ile karşılaştırıldığında sonuçlar yetersiz görünmektedir.

Evaluating generated code...
Pass@1: 27.07%
Pass@5: 65.85%

Yukarıdaki kodu çalıştırırken sorun yaşıyorsanız, lütfen DeepEval ile HumanEval Kaggle defterine bakın. 

Ayrıca, MLflow ile LLM’leri Değerlendirme eğitimini takip ederek LLM değerlendirmelerinizi nasıl kolaylaştıracağınızı öğrenebilirsiniz.

Sonuç

HumanEval veri kümesi nispeten basittir ve gerçek dünya programlama zorluklarını yalnızca kısmen temsil edebilir. Ayrıca, modellerin benzer veri kümeleri üzerinde eğitilmiş olabileceği ve bunun özellikle HumanEval üzerinde performansı artırabileceği için aşırı uyumla (overfitting) ilgili endişeler de bulunmaktadır. 

Bu nedenle, kod üretme yetenekleri için büyük dil modellerini (LLM’ler) değerlendirirken MBPP (Mostly Basic Python Problems), ClassEval, DevQualityEval ve diğerleri gibi birden çok performans metriğini dikkate almak önemlidir.

AI Fundamentals beceri yolunu tamamlayın ve ChatGPT, geniş dil modelleri, üretken yapay zekâ ve daha fazlası gibi popüler yapay zekâ konularında uygulanabilir bilgi edinin.


Abid Ali Awan's photo
Author
Abid Ali Awan
LinkedIn
Twitter

Sertifikalı bir veri bilimcisi olarak, yenilikçi makine öğrenimi uygulamaları oluşturmak için en son teknolojileri kullanmaya büyük ilgi duyuyorum. Konuşma tanıma, veri analizi ve raporlama, MLOps, konuşma yapay zekası ve NLP alanlarında güçlü bir geçmişe sahip olarak, gerçek bir etki yaratabilecek akıllı sistemler geliştirme becerilerimi geliştirdim. Teknik uzmanlığımın yanı sıra, karmaşık kavramları açık ve özlü bir dille ifade etme yeteneğine sahip, becerikli bir iletişimciyim. Sonuç olarak, veri bilimi konusunda aranan bir blog yazarı oldum ve giderek büyüyen veri profesyonelleri topluluğuyla görüşlerimi ve deneyimlerimi paylaşıyorum. Şu anda, içerik oluşturma ve düzenlemeye odaklanıyorum. Büyük dil modelleriyle çalışarak, hem işletmelerin hem de bireylerin verilerinden en iyi şekilde yararlanmalarına yardımcı olabilecek güçlü ve ilgi çekici içerikler geliştiriyorum.

Konular
Yapay Zeka
Büyük Dil Modelleri

En İyi Yapay Zekâ Kursları

Program

Büyük Dil Modelleri Geliştirme

16 sa
PyTorch ve Hugging Face ile en yeni derin öğrenme ve NLP tekniklerini kullanarak büyük dil modelleri (LLM'ler) geliştirmeyi öğrenin.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Devamını GörDevamını Gör