Đánh Giá Khả Năng Lập Trình: CRUXEval

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}

Thẻ: python MachineLearning CodeEvaluation

Đăng vào ngày 6 tháng 6 lúc 23:40