HumaneVal:通過PASS@k
評估代碼生成>本教程探索了HumaneVal,這是評估大語模型(LLM)代碼生成功能的OpenAI基準,重點介紹了pass@k
指標。我們將使用擁抱的面部生態系統來評估164個Python問題的codeparrot-small
模型。 這提供了一種實用的功能正確性評估,與傳統的文本相似度指標形成鮮明對比。
>由作者 圖像
理解通過@k
生成的代碼樣本中的一個概率正確解決了問題。 這比簡單的文本匹配更相關,反映了現實世界開發人員測試。 >
pass@k
其中:
n
c
k
k 樣品的概率不正確,然後從1中減去它以獲取至少一個正確的樣本的概率。 更高的分數表示更好的代碼生成性能。 排行榜經常使用和pass@k
。 pass@10
>
pass@100
人性化的評估,擁抱臉
本節使用擁抱面的
庫詳細介紹了評估過程。我們將使用較小的模型進行更快的評估。 evaluate
codeparrot-small
安裝必要的庫:
設置環境變量:
pip install evaluate
import os os.environ["HF_ALLOW_CODE_EVAL"] = "1" os.environ["TOKENIZERS_PARALLELISM"] = "false"2。加載數據集和公制:
>加載
>數據集和公制:openai_humaneval
code_eval
from datasets import load_dataset from evaluate import load human_eval = load_dataset("openai_humaneval")['test'] code_eval_metric = load("code_eval")
> 加載模型和令牌:
codeparrot/codeparrot-small
from transformers import AutoModelForCausalLM, AutoTokenizer import torch model_name = "codeparrot/codeparrot-small" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name) model.eval()
確保令牌具有>和
,請在必要時調整型號嵌入:
pad_token_id
eos_token_id
5。代碼生成:
if tokenizer.pad_token_id is None: tokenizer.pad_token_id = 0 if tokenizer.eos_token_id is None: tokenizer.eos_token_id = 2 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': ''}) if len(tokenizer) > model.config.vocab_size: model.resize_token_embeddings(len(tokenizer))</pad>
每個問題生成5個代碼示例(總共164個問題):
compute
和num_samples_per_problem = 5 test_cases = [] candidates = [] for problem in tqdm(human_eval, desc="Problems", unit="problem"): prompt = problem['prompt'] test_code = problem['test'] test_cases.append(test_code) problem_candidates = [] for _ in range(num_samples_per_problem): inputs = tokenizer(prompt, return_tensors="pt").to("cuda" if torch.cuda.is_available() else "cpu") 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) generated_code = generated_code[len(prompt):] problem_candidates.append(generated_code) candidates.append(problem_candidates):
>
pip install evaluate
>輸出將顯示pass@1
和pass@5
分數,以表明模型的性能。 請記住,由於代碼生成的隨機性,結果可能會有所不同。 將這些結果與更強大的模型(例如GPT-4)的結果進行比較,為codeparrot-small
>模型的功能提供了上下文。 進一步的分析可能涉及探索不同的超參數或使用更複雜的代碼生成技術。
以上是HumaneVal:評估LLM代碼生成功能的基準的詳細內容。更多資訊請關注PHP中文網其他相關文章!