0Pricing
AI Engineering Academy · บทเรียน

การปรับเทียบโมเดลผู้ตัดสินกับมนุษย์

รวบรวมชุดข้อมูลอ้างอิงความจริงจากการตัดสินความชอบของมนุษย์ วัดความสอดคล้องระหว่างผู้ประเมินกับมนุษย์ด้วย Cohen's Kappa และปรับแต่งพรอมต์ของผู้ประเมินเพื่อลดอคติเชิงระบบ

การปรับเทียบโมเดลผู้ตัดสินกับมนุษย์ เป็นบทเรียน AI Engineering Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Engineering Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Engineering Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดการปรับเทียบจึงเป็นสิ่งที่ขาดไม่ได้

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

การสร้างชุดข้อมูลสำหรับการปรับเทียบ

สร้างชุดปรับเทียบที่มีคำตอบตัวอย่าง 100–500 รายการ ซึ่งผ่านการให้คะแนนโดยมนุษย์แล้ว ควรมีความหลากหลาย โดยรวมคำตอบคุณภาพสูง (คะแนน 5) คุณภาพปานกลาง (คะแนน 3) และคำตอบที่แย่อย่างชัดเจน (คะแนน 1) ให้ผู้ประเมินที่เป็นมนุษย์ 3–5 คนให้คะแนนแต่ละตัวอย่างอย่างเป็นอิสระ เพื่อวัดความสอดคล้องระหว่างผู้ประเมิน และคำนวณคะแนนความจริงอ้างอิงร่วมด้วยการหาค่าเฉลี่ยหรือฐานนิยม

# Calibration dataset structure:
# [
#   {
#     'question': 'What causes inflation?',
#     'response': '...',
#     'human_scores': [4, 4, 3, 5, 4],  # 5 raters
#     'human_consensus': 4,              # mean or mode
#     'rater_ids': ['r1', 'r2', 'r3', 'r4', 'r5']
#   },
#   ...
# ]

# Typical calibration set composition:
# 30% excellent responses (score 4-5)
# 40% adequate responses (score 2-4)
# 30% poor responses (score 1-2)
# Include adversarial / edge cases

การวัดความสอดคล้องระหว่างผู้ประเมิน

ก่อนจะเชื่อถือคะแนนจากมนุษย์ในฐานะค่าความจริงอ้างอิง ให้ตรวจสอบก่อนว่าผู้ประเมินที่เป็นมนุษย์เห็นตรงกัน แคปปาของ Cohenใช้วัดความสอดคล้องระหว่างผู้ประเมินสองคนโดยไม่นับความสอดคล้องที่เกิดจากความบังเอิญ ค่ามากกว่า 0.6 ถือว่ายอมรับได้ และค่ามากกว่า 0.8 ถือว่ายอดเยี่ยม สำหรับมาตรวัด 5 ระดับ ให้คำนวณแคปปาแบบมีน้ำหนัก (น้ำหนักเชิงเส้น) ความสอดคล้องระหว่างผู้ประเมินที่ต่ำหมายความว่างานนี้มีคำจำกัดความกำกวม ควรปรับปรุงแนวทางสำหรับผู้ประเมินก่อนใช้คะแนนเพื่อปรับเทียบผู้ประเมิน

from sklearn.metrics import cohen_kappa_score
import numpy as np

def measure_inter_rater_agreement(rater1_scores: list, rater2_scores: list) -> dict:
    kappa = cohen_kappa_score(rater1_scores, rater2_scores, weights='linear')
    exact_agreement = sum(a == b for a, b in zip(rater1_scores, rater2_scores)) / len(rater1_scores)
    adjacent_agreement = sum(abs(a - b) <= 1 for a, b in zip(rater1_scores, rater2_scores)) / len(rater1_scores)
    return {
        'weighted_kappa': round(kappa, 3),
        'exact_agreement': round(exact_agreement, 3),
        'adjacent_agreement': round(adjacent_agreement, 3),
        'acceptable': kappa >= 0.6
    }

การรันผู้ประเมินกับข้อมูลสำหรับการปรับเทียบ

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

async def run_judge_on_calibration(calibration_set: list) -> list:
    pairs = []
    for item in calibration_set:
        judge_result = await async_judge(item['question'], item['response'])
        pairs.append({
            'question': item['question'],
            'human': item['human_consensus'],
            'judge': judge_result.correctness,
            'judge_rationale': judge_result.rationale
        })
    return pairs

การคำนวณสหสัมพันธ์ระหว่างผู้ประเมินกับมนุษย์

คำนวณสหสัมพันธ์เพียร์สันระหว่างคะแนนของผู้ประเมินกับคะแนนความเห็นพ้องของมนุษย์ วิธีนี้วัดความสอดคล้องเชิงเส้น โดยค่าสหสัมพันธ์ 1.0 หมายความว่าผู้ประเมินติดตามการจัดอันดับของมนุษย์ได้อย่างสมบูรณ์ นอกจากนี้ให้คำนวณค่าคลาดเคลื่อนสัมบูรณ์เฉลี่ย (MAE) เพื่อทำความเข้าใจช่องว่างของคะแนนโดยเฉลี่ย ค่าสหสัมพันธ์มากกว่า 0.7 และ MAE ต่ำกว่า 0.8 คะแนนบนมาตรวัด 5 ระดับ โดยทั่วไปบ่งชี้ว่าผู้ประเมินมีความน่าเชื่อถือเพียงพอสำหรับใช้ในระบบจริง

from scipy.stats import pearsonr, spearmanr
import numpy as np

def calibration_metrics(pairs: list) -> dict:
    humans = [p['human'] for p in pairs]
    judges = [p['judge'] for p in pairs]
    pearson_r, p_val = pearsonr(humans, judges)
    spearman_r, _ = spearmanr(humans, judges)
    mae = np.mean([abs(h - j) for h, j in zip(humans, judges)])
    return {
        'pearson_r': round(pearson_r, 3),
        'spearman_r': round(spearman_r, 3),
        'p_value': round(p_val, 5),
        'mae': round(mae, 3),
        'reliable': pearson_r >= 0.7 and mae <= 0.8
    }

การระบุอคติที่เกิดขึ้นอย่างเป็นระบบ

นอกเหนือจากสหสัมพันธ์ ให้ค้นหาอคติที่เกิดขึ้นอย่างเป็นระบบด้วยว่า ผู้ประเมินให้คะแนนสูงหรือต่ำเกินไปอย่างสม่ำเสมอหรือไม่ พล็อตคะแนนของผู้ประเมินเทียบกับคะแนนของมนุษย์ แล้วตรวจดูเส้นถดถอยว่าไม่ผ่านจุดกำเนิดหรือไม่ หากผู้ประเมินให้คะแนน 4 ในกรณีที่มนุษย์ให้คะแนน 3 โดยเฉลี่ย แสดงว่ามีอคติจากการให้คะแนนสูงเกินจริง แก้ไขได้ด้วยการปรับเกณฑ์ประเมิน หรือใช้การแปลงเชิงเส้นเพื่อปรับเทียบคะแนนดิบ

import numpy as np
from scipy import stats

def detect_score_bias(pairs: list) -> dict:
    humans = np.array([p['human'] for p in pairs])
    judges = np.array([p['judge'] for p in pairs])
    slope, intercept, r, p, se = stats.linregress(judges, humans)
    bias = np.mean(judges - humans)  # positive = judge over-scores
    return {
        'mean_bias': round(bias, 3),  # > 0 means judge inflates
        'calibration_slope': round(slope, 3),
        'calibration_intercept': round(intercept, 3),
        # Corrected score = slope * judge_score + intercept
        'correction_formula': f'human_score ≈ {slope:.2f} * judge + {intercept:.2f}'
    }

การใช้การแก้ไขจากการปรับเทียบ

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

def calibrate_score(raw_judge_score: float, slope: float, intercept: float,
                    min_score: int = 1, max_score: int = 5) -> float:
    corrected = slope * raw_judge_score + intercept
    return max(min_score, min(max_score, round(corrected, 1)))

# Example: if judge inflates by 0.5 points on average
# slope=0.85, intercept=0.3
# raw_score=4 -> corrected = 0.85*4 + 0.3 = 3.7

การค้นหารูปแบบข้อผิดพลาดที่เกิดขึ้นอย่างเป็นระบบ

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

from collections import defaultdict

def error_by_category(pairs: list) -> dict:
    by_cat = defaultdict(list)
    for p in pairs:
        error = abs(p['judge'] - p['human'])
        by_cat[p.get('category', 'unknown')].append(error)
    return {
        cat: {
            'mean_error': round(sum(errs)/len(errs), 2),
            'max_error': max(errs),
            'n': len(errs)
        }
        for cat, errs in by_cat.items()
    }

การปรับเทียบใหม่เมื่อข้อมูลเพิ่มขึ้น

การปรับเทียบไม่ใช่งานที่ทำเพียงครั้งเดียว เมื่อรวบรวมคะแนนจากมนุษย์ได้มากขึ้น และเมื่อการอัปเดตโมเดลเปลี่ยนพฤติกรรมของผู้ประเมิน ให้รันการปรับเทียบใหม่ทุกไตรมาส ติดตามค่าการปรับเทียบตามเวลา — หากสหสัมพันธ์เพียร์สันลดลงต่ำกว่า 0.7 ให้ตรวจสอบว่าการอัปเดตโมเดลเปลี่ยนการกระจายคะแนนของผู้ประเมินหรือไม่ ทำให้กระบวนการปรับเทียบเป็นอัตโนมัติ เพื่อให้การรันใหม่เป็นเพียงคำสั่งเดียวที่สร้างค่าสัมประสิทธิ์การแก้ไขที่อัปเดตแล้ว

def run_calibration_pipeline(calibration_data: list) -> dict:
    # 1. Measure human inter-rater agreement
    ira = measure_inter_rater_agreement(
        [d['rater_1'] for d in calibration_data],
        [d['rater_2'] for d in calibration_data]
    )
    # 2. Run judge on all items
    pairs = run_judge_on_calibration(calibration_data)
    # 3. Compute correlation metrics
    metrics = calibration_metrics(pairs)
    # 4. Detect bias
    bias = detect_score_bias(pairs)
    return {'ira': ira, 'metrics': metrics, 'bias': bias}

การจัดทำเอกสารการตั้งค่าผู้ประเมิน

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

# judge_config.yaml
# judge_model: gpt-4o-2025-01-01
# judge_prompt_version: v3.2
# calibration_date: 2026-05-15
# calibration_set_size: 312
# calibration_metrics:
#   pearson_r: 0.81
#   spearman_r: 0.79
#   mae: 0.54
# bias_correction:
#   slope: 0.88
#   intercept: 0.45
# next_recalibration: 2026-08-15

พรอมป์ผู้ประเมินเฉพาะมิติ

พรอมป์ผู้ประเมินเดียวที่ให้คะแนนหลายมิติพร้อมกันมักทำให้คะแนนมีความสัมพันธ์กัน เช่น ผู้ประเมินให้คะแนนความถูกต้องสูงเพราะให้คะแนนความชัดเจนสูง โดยยึดติดกับความประทับใจแรก พรอมป์เฉพาะมิติจะประเมินแต่ละเกณฑ์อย่างเป็นอิสระในการเรียก API แยกกัน วิธีนี้มีค่าใช้จ่ายสูงกว่า แต่ให้คะแนนที่น่าเชื่อถือกว่าและเป็นการวัดที่เป็นอิสระจริง ควรใช้พรอมป์แยกกันสำหรับมิติที่คาดว่าคะแนนจะเปลี่ยนแปลงอย่างเป็นอิสระต่อกัน

async def multi_dimension_judge(question: str, answer: str) -> dict:
    # Run each dimension as a separate judge call
    correctness, helpfulness, clarity = await asyncio.gather(
        judge_single_dimension(question, answer, 'correctness'),
        judge_single_dimension(question, answer, 'helpfulness'),
        judge_single_dimension(question, answer, 'clarity')
    )
    return {
        'correctness': correctness,
        'helpfulness': helpfulness,
        'clarity': clarity,
        'composite': 0.5 * correctness + 0.3 * helpfulness + 0.2 * clarity
    }

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจเกี่ยวกับการปรับเทียบโมเดลผู้ประเมินที่เป็น LLM กับคะแนนจากมนุษย์

สรุปบทเรียน

ในบทเรียนนี้ คุณได้เรียนรู้ว่า ชุดข้อมูลปรับเทียบที่มีคะแนนความเห็นพ้องของมนุษย์ให้ค่าความจริงอ้างอิงสำหรับวัดความน่าเชื่อถือของผู้ประเมิน สหสัมพันธ์เพียร์สันและ MAEช่วยวัดว่าผู้ประเมินติดตามการตัดสินของมนุษย์ได้ดีเพียงใด และการแก้ไขอคติเชิงเส้นช่วยปรับแก้การให้คะแนนสูงหรือต่ำเกินไปอย่างเป็นระบบ บทถัดไป เราจะสร้างกระบวนการประเมินอย่างต่อเนื่องที่ผสานรวมกับ CI/CD

คำถามที่พบบ่อย

บทเรียน “การปรับเทียบโมเดลผู้ตัดสินกับมนุษย์” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การปรับเทียบโมเดลผู้ตัดสินกับมนุษย์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Engineering Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Engineering Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การปรับเทียบโมเดลผู้ตัดสินกับมนุษย์”

รวบรวมชุดข้อมูลอ้างอิงความจริงจากการตัดสินความชอบของมนุษย์ วัดความสอดคล้องระหว่างผู้ประเมินกับมนุษย์ด้วย Cohen's Kappa และปรับแต่งพรอมต์ของผู้ประเมินเพื่อลดอคติเชิงระบบ คุณปฏิบัติ AI Engineering Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Engineering Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Engineering Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การปรับเทียบโมเดลผู้ตัดสินกับมนุษย์” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน AI Engineering Academy นี้ได้ไหม

ได้ บทเรียน AI Engineering Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. รูปแบบ LLM ในบทบาทผู้ตัดสิน
  2. การประเมินแบบรายรายการและแบบจับคู่
  3. การปรับเทียบโมเดลผู้ตัดสินกับมนุษย์
  4. การสร้างกระบวนการประเมินผลอย่างต่อเนื่อง
← กลับไปที่ AI Engineering Academy