การปรับเทียบโมเดลผู้ตัดสินกับมนุษย์
รวบรวมชุดข้อมูลอ้างอิงความจริงจากการตัดสินความชอบของมนุษย์ วัดความสอดคล้องระหว่างผู้ประเมินกับมนุษย์ด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- รูปแบบ LLM ในบทบาทผู้ตัดสิน
- การประเมินแบบรายรายการและแบบจับคู่
- การปรับเทียบโมเดลผู้ตัดสินกับมนุษย์
- การสร้างกระบวนการประเมินผลอย่างต่อเนื่อง