สคริปต์การตรวจคะแนนรันบ็อกซ์

เราจะอธิบายวิธีการเขียนสคริปต์การตรวจคะแนนในแว็กซ์บ็อกซ์

โครงสร้างการตรวจคะแนนในแว็กซ์บ็อกซ์

การตรวจคะแนนในแว็กซ์บ็อกซ์เกิดจากการอัปโหลดไฟล์เป็นฐาน ผู้เรียนจะส่งไฟล์ที่เป็นผลงานของตนเป็นไฟล์ฐาน และสคริปต์ Python จะตรวจสอบผลงานดังกล่าว ขนาดของผลงานที่ผู้เรียนส่งจะถูกจำกัดไว้ที่ 50MB หลังจากที่ทำการบีบอัดไฟล์ทั้งหมดที่ส่งไว้ ผลคะแนนและผลงานจะถูกบันทึกในเซิร์ฟเวอร์เพื่อให้สามารถตรวจสอบได้ในภายหลัง

ไฟล์ที่แนะนำให้ส่ง

อาจารย์แนะนำให้ส่งไฟล์ได้ทุกประเภท แต่ขอความยืดหยุ่นให้ส่งไฟล์ในรูปแบบต่อไปนี้ สำหรับการเรียนรู้บทเรียนที่เน้นภาษา Python บางครั้งอาจจะใช้การอัพโหลดไฟล์ประเภทการซีเรียลไอเท็มเพื่อสร้างวัตถุที่ถูกจัดเก็บ อย่างไรก็ตาม การใช้การซีเรียลไอเท็มอาจทำให้เกิดความเสี่ยงเมื่อทำการรันโค้ดภายในการดำเนินการต่างๆของระบบ ดังนั้นอาจารย์ขอแนะนำให้ไม่ใช้การซีเรียลไอเท็ม (รายละเอียดเพิ่มเติม).

JSON

ฟอร์แมตไฟล์ที่ควรใช้สำหรับการส่งงานในทุกกรณีนอกจากการแข่งขัน

CSV

ฟอร์แมตไฟล์ที่แนะนำสำหรับการส่งผลการแข่งขัน ในกรณีอื่นๆโปรดอย่าใช้ไฟล์ CSV ทั้งสองไฟล์ของการส่งงานและไฟล์คำตอบ และแนะนำให้ใช้ไฟล์ JSON แทน

PNG

ใช้เมื่อต้องใช้ในการตรวจคะแนนผลลัพธ์ของกราฟหรือภาพที่เกิดจาก Matplotlib, seaborn เป็นต้น แนะนำให้ใช้การคำนวณความคล้ายคลึงในการตรวจสอบรูปภาพแทนการตรวจสอบผลลัพธ์ที่เหมือนกันอย่างแท้จริง

NumPy array (.npy)

ใช้เมื่อต้องการให้ฟังก์ชันตรวจคะแนนส่งคืน NumPy array โดยตรง

เขียนสคริปต์การตรวจคะแนน

เมื่อได้รับคำขอตรวจคะแนนแล้ว แว็กซ์บ็อกซ์จะเรียกใช้สคริปต์การตรวจคะแนนที่อยู่ภายในหน้าการสร้างและจัดการแว็กซ์บ็อกซ์ เพื่อตรวจสอบผลงานที่ส่งมาพร้อมกับคำขอ ผลงานเหล่านี้สามารถเข้าถึงได้จากพื้นที่เก็บข้อมูล /mnt/elice/userfile ผู้เรียนไม่สามารถเข้าถึงได้

ไฟล์ที่อยู่ในไฟล์ zip ได้รับการใช้งานกับสคริปต์ตรวจคะแนนและสามารถเพิ่มข้อมูลที่จำเป็นสำหรับการทำคะแนนได้ ตัวอย่างเช่น หากต้องการทำการคะแนนโดยการเปรียบเทียบกับไฟล์อ้างอิง สามารถเพิ่มไฟล์ดังกล่าวลงในไฟล์ zip ได้ ไฟล์ที่อยู่ในไฟล์ zip สามารถเข้าถึงได้จาก /mnt/elice/grader เฉพาะสคริปต์การตรวจคะแนน แต่ผู้เรียนไม่สามารถเข้าถึงไฟล์เหล่านี้ได้

  • สำหรับคะแนน คุณสามารถพิมพ์คะแนนลงในไฟล์ /var/run/elice/grade_score โดยใช้รูปแบบ UTF-8 ให้เป็นอย่างชัดเจน เราสนับสนุนทั้งคะแนนที่เป็นจำนวนเต็มและทศนิยม

  • สำหรับข้อความ คุณสามารถพิมพ์ข้อความลงในไฟล์ /var/run/elice/grade_message โดยใช้รูปแบบ UTF-8 เพื่อส่งข้อความคำตอบไปยังผู้เรียน

ตัวอย่างสคริปต์การตรวจคะแนนที่ง่ายที่สุดดังนี้

import json
from scipy.spatial.distance import cosine

score = None
message = ""

try:
    with open("/mnt/elice/grader/reference.json", "r") as f:
        reference = json.load(f)
    with open("/mnt/elice/userfile/result.json", "r") as f:
        user_result = json.load(f)

    similarity = cosine(
        reference,
        user_result['submission']
    )

    score = similarity
    if similarity < 0.1:
        score = "100"
        message = "good job!"
    elif user_result < 0.5:
        score = score = 100 * (1 - (similarity - 0.1) / 0.4)
        score = f"{score:.3f}"
        message = "well done"
    else:
        score = "0"
        message = "try again"

except FileNotFoundError:
    score = "0"
    message = "missing required files"

except Exception:
    score = "0"
    message = "something goes wrong :("

finally:
    if score is not None:
        with open("/var/run/elice/grade_score", "w") as f:
            f.write(str(score))

    with open("/var/run/elice/grade_message", "w") as f:
        f.write(message)

การเรียกใช้สคริปต์การตรวจคะแนน

หลังจากสร้างสคริปต์การตรวจคะแนนเสร็จแล้ว คุณสามารถเรียกใช้เพื่อทำการตรวจสอบได้ด้วยคำสั่งต่อไปนี้ในเทอร์มินัลในแว็กซ์บ็อกซ์

elice_grade result.json code.ipynb

สำหรับการเรียนรู้ที่ใช้ JupyterLab คุณควรเพิ่มคำสั่งดังกล่าวลงในเอกสารการเรียนรู้เพื่อให้ผู้เรียนสามารถทำคำสั่งได้ง่าย สำหรับการเรียนรู้ที่ใช้ Orange3 และ VSCode จะมีการให้บริการส่วนตรงสำหรับการทำสคริปต์การตรวจคะแนน

ตัวอย่างการตรวจคะแนนที่ซับซ้อน

  • คุณสามารถรับหลายไฟล์ในครั้งเดียวและทำการตรวจคะแนนโดยให้คิดร่วมกันตามน้ำหนักของแต่ละข้อได้

  • เช่นสำหรับการเรียนรู้ที่เกี่ยวกับการสร้างกราฟหรือรูปภาพ คุณสามารถรับไฟล์รูปภาพหรือไบนารีและทำการตรวจคะแนนได้

  • สำหรับโมเดลการเรียนรู้ที่เรียบง่ายคุณสามารถรับโมเดลที่ส่งมาและทำการตรวจคะแนนจากผลลัพธ์ของโมเดลได้

    • ควรระมัดระวังเนื่องจากงานตรวจคะแนนจะใช้เฉพาะ CPU เท่านั้นไม่ขึ้นกับการรันของผู้เรียน

Last updated