CRUXEval (Code Reasoning, Understanding, and eXecution Evaluation) là một chuẩn đánh giá cải tiến dựa trên HumanEval, bao gồm 800 hàm Python.
paper: CRUXEval: Một Chuẩn Đánh Giá Cho Lập Trình, Hiểu Biết và Thực Thi GitHub: cruxeval
Quy Trình Đánh Giá
Mỗi hàm đều có các cặp đầu vào-đầu ra tương ứng với hai nhiệm vụ: dự đoán đầu vào và dự đoán đầu ra.
- CRUXEval-O: Dự đoán đầu ra Đo lường khả năng thực thi mã.
- CRUXEval-I: Dự đoán đầu vào Đo lường khả năng suy luận và hiểu biết về mã.
Dữ Liệu
- Các đoạn mã đều đơn giản nhất có thể (tối đa 13 dòng).
- Sử dụng Code Llama 34B để tạo ra các hàm và đầu vào ban đầu, sau đó chọn lọc những hàm đơn giản.
- nhiệt độ T = 1
- Ví dụ prompt sinh hàm và đầu vào:
def chen_ki_tu(text):
danh_sach = list(text)
for i in range(1, len(danh_sach) - 1):
danh_sach.insert(i, '*')
return ''.join(danh_sach).center((len(danh_sach) - 1) * 2)
# Kiểm tra
assert chen_ki_tu('lynel') == ??
assert chen_ki_tu('nzoh') == ??
assert chen_ki_tu('u') == ??
assert chen_ki_tu('anfsoixz') == ??
assert chen_ki_tu('xzd') == ??
def them_vao_cuoi(nums):
so_luong = len(nums)
for i in range(-so_luong + 1, 0):
nums.append(nums[i])
return nums
# Kiểm tra
assert them_vao_cuoi([2, 6, 1, 3, 1]) == ??
assert them_vao_cuoi([7, 1, 2, 6, 0, 2]) == ??
assert them_vao_cuoi([4, 3, 2, 1, 2, -1, 4, 2]) == ??
assert them_vao_cuoi([0, 6, 2, -1, -2]) == ??
assert them_vao_cuoi([-6, -2, 1, -3, 0, 1]) == ??
Đánh Giá
Prompts Ít Lần Gợi Ý
chuoi_1 = """[NHIEM_VU]
str.split
[/NHIEM_VU]
[PYTHON]
def ham(text):
tu = text.split()
ket_qua = []
for i in range(len(tu)):
if i % 2 == 0:
ket_qua.append(tu[i][::-1])
else:
ket_qua.append(tu[i].upper())
return ' '.join(ket_qua)
[/PYTHON]
[KIEM_TRA]
assert ham("am7 fiDfd n") == ??
assert ham("bnasadl") == ??
assert ham("a j c n x X k") == ??
assert ham("98 bask2 asoijdf9") == ??
assert ham("") == ??
[/KIEM_TRA]"""
chuoi_2 = """[NHIEM_VU]
str.capitalize
[/NHIEM_VU]
[PYTHON]
def ham(text):
danh_sach = []
tu = text.split(' ')
for i in range(len(tu)):
if tu[i][0].isdigit():
return 'no'
if i % 2 == 0:
danh_sach.append(tu[i].capitalize())
else:
danh_sach.append(tu[i])
return ' '.join(danh_sach)
[/PYTHON]
[KIEM_TRA]
assert ham("20xk flkawhf") == ??
assert ham("lkw hj sfaibw fi 9") == ??
assert ham("abbot 2929 mbpu") == ??
assert ham("rotor zisxrs fh29nx") == ??
assert ham("pxk 5 bxD 9") == ??
[/KIEM_TRA]"""
Các Prompts CoT (Chain of Thought)
- Prompts suy luận đầu vào (Code Llama):
def tang_mot(x):
return x + 1
# Để tìm đầu vào sao cho khi thực hiện hàm sẽ đạt được đầu ra mong muốn:
# Chúng ta biết rằng f(??) == 17.
# Vì hàm trả về x + 1, nên ?? cần phải bằng 16 để đạt được 17.
# Do đó, câu lệnh gọi hàm để đạt đầu ra là:
[CAU_TRA_LOI]tang_mot(16)[/CAU_TRA_LOI]
{ham}
assert {ham}(??) == {dau_ra}