บทวิเคราะห์: เมื่อเกณฑ์มาตรฐานสาธารณะไม่อาจทำนายคุณภาพในการใช้งานจริงได้อีกต่อไป — วิธีสร้างชุดประเมินที่ทำได้
ตลอดสองปีที่ผ่านมา คะแนนบนตารางจัดอันดับกับความน่าเชื่อถือของระบบที่นำไปใช้งานจริงยิ่งสวนทางกัน นี่คือแนวทางที่ใช้ได้ผลในการสร้างชุดประเมินส่วนตัวขนาดเล็ก เรียบง่าย และไม่น่าตื่นเต้น แต่บอกได้จริงว่าคุณควรนำระบบออกใช้งานหรือไม่
คำตอบโดยย่อ
เหตุใดโมเดลที่ได้คะแนนเกณฑ์มาตรฐานสูงจึงยังล้มเหลวในการใช้งานจริง และทีมต่าง ๆ ควรประเมินโมเดลด้วยตนเองอย่างไร
เกณฑ์มาตรฐานสาธารณะวัดงานที่มีขอบเขตแคบ ตายตัว และเผยแพร่อย่างแพร่หลาย อีกทั้งยังปนเปื้อนอยู่ในข้อมูลฝึกสอนมากขึ้นเรื่อย ๆ และถูกใช้เป็นเป้าหมายในการปรับโมเดลโดยตรง แต่คุณภาพในการใช้งานจริงขึ้นอยู่กับพรอมป์ของคุณ เอกสารของคุณ สคีมาของเครื่องมือ และระดับความผิดพลาดที่คุณยอมรับได้ ซึ่งไม่มีตารางจัดอันดับใดวัดได้ คำตอบที่ใช้ได้จริงคือชุดประเมินส่วนตัวที่ประกอบด้วยกรณีจริง 50 ถึง 300 กรณี พร้อมบันทึกพฤติกรรมที่คาดหวัง นำมาทดสอบทุกครั้งที่เปลี่ยนโมเดลหรือพรอมป์ โดยให้คะแนนด้วยการตรวจสอบแบบตรงตัวเมื่อทำได้ และใช้โมเดลผู้ตัดสินตามเกณฑ์การให้คะแนนเมื่อทำไม่ได้
ประเด็นสำคัญ
- กระดานผู้นำตอบคำถามว่า 'โมเดลใดแข็งแกร่งกว่ากันโดยรวม' แต่การตัดสินใจใช้งานจริงต้องการคำตอบว่า 'โมเดลใดทำงานของฉันได้ดีกว่ากัน บนข้อมูลของฉัน ภายใต้เงื่อนไขของฉัน' ทั้งสองเป็นคำถามคนละข้อกัน และมีเพียงข้อเดียวเท่านั้นที่คนอื่นตอบแทนคุณได้
- กรณีทดสอบ 50 กรณีที่คัดเลือกอย่างเหมาะสมจากทราฟฟิกจริงของคุณเอง มีประสิทธิภาพเหนือกว่าเกณฑ์มาตรฐานสาธารณะใด ๆ ในการคาดการณ์ว่าการเปลี่ยนแปลงนั้นปลอดภัยพอที่จะนำขึ้นใช้งานจริงหรือไม่
- แบ่งชุดประเมินตามผลกระทบของความล้มเหลว ไม่ใช่ตามหัวข้อ กรณีที่คำตอบผิดก่อให้เกิดความเสียหายสูงควรมีด่านตรวจเฉพาะของตนเอง
- ใช้การตรวจสอบแบบกำหนดผลลัพธ์แน่นอนก่อน แล้วจึงใช้โมเดลเป็นผู้ตัดสิน สิ่งใดที่ตรวจยืนยันได้ด้วยโค้ดไม่ควรมอบหมายให้ผู้ตัดสินเป็นผู้ประเมิน
- ชุดประเมินเป็นทรัพยากรที่ต้องปรับปรุงอย่างต่อเนื่อง ทุกเหตุขัดข้องในระบบใช้งานจริงควรลงท้ายด้วยการเพิ่มกรณีทดสอบใหม่เข้าไป
มีความผิดหวังแบบหนึ่งที่ทีมงานส่วนใหญ่ซึ่งใช้งานโมเดลภาษาในระบบจริงต่างเคยเจอมาแล้ว โมเดลใหม่เปิดตัวพร้อมตัวเลขที่ดีขึ้นในทุกกราฟ ทีมงานจึงสลับมาใช้ทันที แต่ผ่านไปไม่ถึงสัปดาห์ ตั๋วแจ้งปัญหาก็เพิ่มขึ้น ผู้ใช้งานภายในรายงานว่าบทสรุปแย่ลง และในที่สุดก็มีใครสักคนย้อนกลับไปใช้โมเดลเดิมอย่างเงียบๆ
ไม่มีอะไรถูกปลอมแปลง คะแนนเบนช์มาร์กเป็นของจริง และโมเดลใหม่ก็น่าจะแข็งแกร่งกว่าจริงๆ ในภาพรวม ความผิดพลาดอยู่ที่การตีความ กระดานผู้นำตอบคำถามที่ไม่มีการใช้งานจริงใดเคยถามเลย
สิ่งที่เบนช์มาร์กวัดได้จริง
เบนช์มาร์กสาธารณะมีคุณสมบัติร่วมกันชุดหนึ่งที่เป็นประโยชน์ต่องานวิจัยแต่ไม่เป็นประโยชน์ต่อการตัดสินใจ
คุณสมบัติแรกคือ หยุดนิ่ง เบนช์มาร์กที่เปลี่ยนแปลงตลอดเวลาไม่สามารถนำมาเปรียบเทียบข้ามช่วงเวลาได้ โจทย์จึงต้องคงที่ นั่นหมายความว่าคำถามชุดเดิมถูกนำไปตอบซ้ำในงานวิจัย บทความ และคลังโค้ดนับพันชิ้น ซึ่งทำให้มันปรากฏอยู่บนอินเทอร์เน็ตแบบเปิด และในที่สุดก็หลุดเข้าไปอยู่ในชุดข้อมูลฝึกโมเดล นี่คือภาวะปนเปื้อน และไม่ใช่ข้อกล่าวหาเรื่องการทุจริตแต่อย่างใด มันเป็นผลลัพธ์ปกติของการเผยแพร่แบบทดสอบแล้วนำอินเทอร์เน็ตไปฝึกโมเดลต่อ ผลที่ตามมาคือคะแนนไต่ระดับสูงขึ้นเร็วกว่าความสามารถจริงที่เพิ่มขึ้น
คุณสมบัติที่สองคือ แคบ ความรู้แบบปรนัย คณิตศาสตร์ระดับแข่งขัน โจทย์เขียนโค้ดแบบแยกเดี่ยว และการให้เหตุผลสั้นๆ ล้วนเป็นการทดสอบที่มีความชอบธรรม แต่ความสัมพันธ์ระหว่างสิ่งเหล่านี้กับ "การรับมืออีเมลสนับสนุนลูกค้าที่เขียนวรรคตอนมั่วโดยไม่กุนโยบายการคืนเงินขึ้นมาเอง" นั้นอ่อนมาก และไม่เคยมีใครอ้างเป็นอย่างอื่น
คุณสมบัติที่สามคือ ถูกทำให้เป็นเป้าหมาย เมื่อตัวเลขหนึ่งกลายเป็นคำย่อของคำว่า "ความก้าวหน้า" ในวงการ มันจะเข้าไปอยู่ในทุกลูปของการฝึกและการประเมินในฐานะเป้าหมาย และกฎของกู๊ดฮาร์ตก็จะทำหน้าที่ที่เหลือ สิ่งนี้ไม่จำเป็นต้องมีใครโกงเลย เพียงแค่ทุกคนใส่ใจกับมันก็พอ
และคุณสมบัติสุดท้ายคือ เบนช์มาร์ก ตัดทอนเงื่อนไขที่ตัดสินคุณภาพในการใช้งานจริง ออกไปทั้งหมด ไม่ว่าจะเป็นงบเวลาแฝงที่คุณรับได้ ความยาวบริบท สคีมาของเครื่องมือ คุณภาพการค้นคืนข้อมูล พรอมป์ที่คุณใช้ รูปแบบผลลัพธ์ที่ต้องการ และความร้ายแรงของข้อผิดพลาดแต่ละชนิดสำหรับธุรกิจของคุณ
กระดานผู้นำแบบอิงความพึงพอใจของมนุษย์แก้ปัญหาบางส่วนเหล่านี้ได้ แต่ก็สร้างความเบี่ยงเบนของตัวเองขึ้นมาแทน มันรวมคะแนนจากประชากรกลุ่มหนึ่งที่งานของพวกเขาไม่ใช่งานของคุณ และให้รางวัลกับคุณสมบัติที่ดูดีเมื่อเทียบเคียงกันแบบผิวเผิน เช่น โครงสร้างที่ลื่นไหล น้ำเสียงมั่นใจ ความยาวที่เอื้อเฟื้อ หากผลิตภัณฑ์ของคุณต้องการพฤติกรรมที่กระชับ ตรงไปตรงมา และปฏิเสธเมื่อไม่แน่ใจ อันดับแบบอิงความพึงพอใจอาจชี้นำคุณไปผิดทางโดยสิ้นเชิง
ทางเลือกที่เล็กกว่าที่คนส่วนใหญ่คิด
เหตุผลที่ทีมงานไม่สร้างชุดประเมินของตัวเองคือพวกเขาจินตนาการว่ามันต้องเป็นโครงการใหญ่โต แต่ความจริงไม่ใช่เลย ชุดประเมินที่ใช้งานได้จริงมักมีขนาดเพียง 50 ถึง 300 กรณี และเวอร์ชันแรกสามารถประกอบขึ้นได้ภายในวันเดียว
ขั้นตอนแรก: ดึงกรณีจากทราฟฟิกจริง ไม่ใช่ตัวอย่างที่แต่งขึ้นเอง ให้ดึงจากบันทึกการใช้งาน ข้อความจริงจากผู้ใช้ เอกสารจริง ลำดับการเรียกเครื่องมือจริง กรณีที่แต่งขึ้นเองมักมีจุดบอดเดียวกับคนที่แต่งมันขึ้นมา
ขั้นตอนที่สอง: จัดกลุ่มตามผลกระทบ ไม่ใช่ตามหัวข้อ สัญชาตญาณมักบอกให้จัดกลุ่มตามเนื้อหา แต่แกนที่มีประโยชน์จริงคือต้นทุนของคำตอบที่ผิด:
- ผิดแบบเงียบ — ฟังดูสมเหตุสมผล มั่นใจ แต่ผิด นี่คือกลุ่มที่มีต้นทุนสูงที่สุด และควรเก็บตัวอย่างมากเป็นพิเศษ
- ควรปฏิเสธแต่ไม่ปฏิเสธ — โมเดลตอบคำถามทั้งที่พฤติกรรมที่ถูกต้องคือการปฏิเสธหรือส่งต่อให้มนุษย์
- รูปแบบผิดเพี้ยน — เนื้อหาถูกต้องแต่รูปแบบทำให้ตัวแยกวิเคราะห์ที่อยู่ปลายทางพัง
- เชิงความสวยงาม — น้ำเสียง ความยาว ลำดับการนำเสนอ เป็นเรื่องจริงแต่ต้นทุนต่ำ
โมเดลที่ดีขึ้นในกรณีเชิงความสวยงามแต่แย่ลงในกรณีผิดแบบเงียบ จะมีคะแนนเฉลี่ยดีขึ้นแต่เป็นผลิตภัณฑ์ที่แย่ลง มีเพียงชุดประเมินแบบแบ่งกลุ่มเท่านั้นที่จะเผยความจริงนี้ออกมาได้
ขั้นตอนที่สาม: บันทึกพฤติกรรมที่คาดหวัง ไม่ใช่ข้อความคำตอบที่คาดหวัง สำหรับกรณีส่วนใหญ่ ป้ายกำกับที่ถูกต้องคือชุดของเงื่อนไขตรวจสอบ เช่น ต้องอ้างอิงเอกสารที่ 3 ต้องไม่กล่าวถึงราคา ต้องคืนค่า JSON ที่ถูกต้องพร้อมฟิลด์เหล่านี้ ต้องปฏิเสธ เงื่อนไขแบบนี้ทนทานต่อการเปลี่ยนถ้อยคำ ในขณะที่คำตอบตายตัวไม่ทนทาน
ขั้นตอนที่สี่: รันการตรวจสอบแบบกำหนดผลลัพธ์แน่นอนก่อน ความถูกต้องของสคีมา ฟิลด์ที่จำเป็น ข้อความต้องห้าม ค่าคลาดเคลื่อนที่ยอมรับได้ทางตัวเลข การมีการอ้างอิง เวลาแฝง ต้นทุนโทเค็น ชั้นนี้มีต้นทุนต่ำ แม่นยำ และจับความถดถอยในระบบจริงได้เป็นสัดส่วนที่น่าประหลาดใจ สิ่งใดก็ตามที่คำสั่ง assert ตัดสินได้ ไม่ควรถูกส่งไปให้ผู้ตัดสินที่เป็นโมเดลเลย
ขั้นตอนที่ห้า: ใช้โมเดลเป็นผู้ตัดสินเฉพาะส่วนที่เหลือ ความสอดคล้องกับต้นฉบับ น้ำเสียง ความครบถ้วน หรือคำอธิบายนั้นตอบโจทย์คำถามจริงหรือไม่ ผู้ตัดสินต้องมีเกณฑ์การให้คะแนนที่เขียนไว้เป็นลายลักษณ์อักษรพร้อมมาตรฐานที่ชัดเจน มีคำตอบอ้างอิงในกรณีที่มี และสลับลำดับแบบสุ่มเมื่อเปรียบเทียบผลลัพธ์สองชุด ควรรายงานความสอดคล้องระหว่างผู้ตัดสินกับมนุษย์จากตัวอย่างชุดหนึ่ง หากความสอดคล้องต่ำ ปัญหาอยู่ที่เกณฑ์การให้คะแนน ไม่ใช่ที่ตัวผู้ตัดสิน
อ่านผลลัพธ์โดยไม่หลอกตัวเอง
รูปแบบความผิดพลาดสองแบบเป็นสาเหตุของการตัดสินใจที่ผิดพลาดส่วนใหญ่จากข้อมูลการประเมิน
แบบแรกคือ มองว่าความต่างเล็กน้อยเป็นความต่างที่มีนัยสำคัญ ด้วยกรณีทดสอบ 100 กรณี การเปลี่ยนแปลงจาก 82% เป็น 85% ยังอยู่ในขอบเขตของความคลาดเคลื่อนแบบสุ่ม ทางออกคือรายงานช่วงความเชื่อมั่น หรือรันชุดทดสอบซ้ำหลายครั้งแล้วดูความแปรปรวน หรือไม่ก็อดใจไม่ประกาศผู้ชนะไปก่อน แค่การเปลี่ยนค่า sampling temperature ก็สามารถขยับชุดทดสอบขนาดเล็กได้หลายจุดแล้ว
แบบที่สองคือ หาค่าเฉลี่ยจนกลบสิ่งที่คุณสนใจจริงๆ อัตราผ่านโดยรวมซ่อนรูปร่างของความล้มเหลวเอาไว้ ผลลัพธ์ที่มีประโยชน์จากการรันชุดประเมินไม่ใช่ตัวเลขเดียว แต่คือตาราง: อัตราผ่านแยกตามกลุ่ม บวกกับรายการผลต่างว่ากรณีใดเปลี่ยนจากผ่านเป็นไม่ผ่านบ้าง กรณีที่เปลี่ยนจากผ่านเป็นไม่ผ่านคือสัญญาณทั้งหมดที่มี ต้องอ่านมันให้ละเอียด
ที่มาของชุดประเมินเมื่อเวลาผ่านไป
เวอร์ชันแรกมาจากบันทึกการใช้งาน ส่วนเวอร์ชันที่ยั่งยืนมาจาก เหตุการณ์ที่เกิดขึ้นจริง ความล้มเหลวในระบบจริงทุกครั้งที่ไปถึงมือมนุษย์ควรจบลงด้วยการเพิ่มกรณีนั้นเข้าไปในชุดประเมิน พร้อมบันทึกพฤติกรรมที่คาดหวังไว้ด้วย วิธีนี้เปลี่ยนภาระงานสนับสนุนให้กลายเป็นความครอบคลุมในการทดสอบความถดถอย และเป็นกลไกที่ทำให้ชุดประเมินเฉพาะเจาะจงกับผลิตภัณฑ์ของคุณ แทนที่จะเป็นเพียงตัวชี้วัดคุณภาพแบบทั่วไป
วินัยแบบเดียวกันนี้ใช้ได้กับระบบที่อิงการค้นคืนข้อมูล ซึ่งต้องมีอีกชั้นหนึ่งเพิ่มเข้ามา คือประเมินการค้นคืนแยกจากการสร้างคำตอบ หากคำตอบผิดเพราะไม่เคยค้นคืนเอกสารที่ถูกต้องมาได้ตั้งแต่แรก การสลับโมเดลเท่าไรก็แก้ปัญหาไม่ได้ และคะแนนแบบวัดผลรวมทั้งระบบก็จะยังคงบอกคุณผิดๆ ว่าปัญหาอยู่ที่ตัวโมเดล
สิ่งที่เบนช์มาร์กยังคงมีประโยชน์อยู่
ทั้งหมดนี้ไม่ได้ทำให้การประเมินสาธารณะไร้ค่าแต่อย่างใด และปฏิกิริยาที่จะปัดกระดานผู้นำทิ้งไปทั้งหมดก็เป็นความผิดพลาดในตัวมันเองเช่นกัน
เบนช์มาร์กเป็น ตัวกรองเบื้องต้น ที่สมเหตุสมผล หากคุณต้องเลือกโมเดลสามตัวจากยี่สิบตัวมาทดสอบอย่างจริงจัง คะแนนที่เผยแพร่ บวกความยาวบริบท บวกราคา จะช่วยเลือกสามตัวที่พอมีเหตุผลรองรับได้ มันยังเป็น เส้นแนวโน้มระดับวงการ ที่มีประโยชน์ การเคลื่อนไหวของโมเดลแบบเปิดน้ำหนักเมื่อเทียบกับโมเดลระดับแนวหน้าในช่วงสองปีที่ผ่านมาเป็นสัญญาณจริงที่ยากจะมองเห็นด้วยวิธีอื่น และเบนช์มาร์กจำนวนหนึ่งโดยเฉพาะเบนช์มาร์กระดับเอเจนต์และระดับคลังโค้ดที่ต้านทานการท่องจำได้ด้วยการต้องการผลลัพธ์ที่ถูกรันจริง ก็ยังให้ข้อมูลที่มีความหมายจริงเกี่ยวกับการเปลี่ยนแปลงความสามารถ
กฎที่แคบแต่คุ้มค่าที่จะพูดให้ชัดคือ ใช้เบนช์มาร์กสาธารณะเพื่อตัดสินใจว่าจะทดสอบอะไร และใช้ชุดประเมินของตัวเองเพื่อตัดสินใจว่าจะปล่อยอะไรออกไปใช้งานจริง ทีมที่สลับหน้าที่สองอย่างนี้กลับกันมักต้องเสียเวลาไปมากในการอธิบายให้ผู้ใช้ฟังว่าทำไมการอัปเกรดถึงทำให้ทุกอย่างแย่ลง
คำถามที่พบบ่อย
- เกณฑ์มาตรฐานสาธารณะไร้ประโยชน์หรือไม่
- ไม่ เกณฑ์เหล่านี้มีประโยชน์สำหรับการคัดกรองเบื้องต้น เช่น การตัดสินใจว่าโมเดลสามตัวใดควรค่าแก่การทดสอบ และสำหรับติดตามพัฒนาการของวงการในระยะยาว แต่จะหมดประโยชน์ทันทีเมื่อถูกนำมาใช้แทนการทดสอบกับงานจริงของคุณเอง
- การปนเปื้อนของเกณฑ์มาตรฐานคืออะไร
- คือการที่โจทย์ทดสอบหรือข้อมูลที่เกือบซ้ำกับโจทย์เหล่านั้นปรากฏอยู่ในข้อมูลฝึกของโมเดล เนื่องจากเกณฑ์มาตรฐานสาธารณะส่วนใหญ่อยู่บนเว็บแบบเปิด เหตุการณ์นี้จึงเกิดขึ้นเป็นปกติและทำให้คะแนนสูงเกินจริง โดยประสิทธิภาพดังกล่าวไม่สามารถถ่ายทอดไปสู่งานที่โมเดลไม่เคยพบมาก่อนได้
- กรณีทดสอบสำหรับการประเมินควรมีจำนวนเท่าใดจึงจะเพียงพอ
- จำนวน 50 กรณีเพียงพอสำหรับตรวจจับการถดถอยครั้งใหญ่และสามารถจัดทำได้ภายในช่วงบ่ายเดียว ส่วนจำนวนหลักร้อยที่แบ่งชั้นตามสถานการณ์เพียงพอสำหรับตรวจจับความเปลี่ยนแปลงด้านคุณภาพที่เล็กกว่า ซึ่งมีความสำคัญเมื่อต้องเปรียบเทียบโมเดลที่ใกล้เคียงกัน หากเกินประมาณหนึ่งพันกรณี ต้นทุนในการดูแลป้ายกำกับมักสูงเกินกว่าสัญญาณเพิ่มเติมที่ได้รับ
- การใช้โมเดลหนึ่งให้คะแนนผลลัพธ์ของอีกโมเดลหนึ่งเชื่อถือได้หรือไม่
- เชื่อถือได้เพียงพอสำหรับการเปรียบเทียบเชิงสัมพัทธ์ เมื่อเกณฑ์การให้คะแนนมีความเฉพาะเจาะจง ผู้ตัดสินได้เห็นคำตอบอ้างอิง และมีการควบคุมอคติจากตำแหน่งและความยืดยาวของคำตอบ แต่ไม่อาจเชื่อถือได้ในฐานะคะแนนคุณภาพแบบสัมบูรณ์ และไม่ควรใช้ประเมินสิ่งที่ตรวจสอบได้ด้วยยูนิตเทสต์
- ควรรันการประเมินบ่อยเพียงใด
- ควรรันทุกครั้งที่มีการเปลี่ยนพรอมป์ เปลี่ยนเวอร์ชันโมเดล หรือเปลี่ยนสคีมาของเครื่องมือ รวมทั้งรันตามกำหนดเวลากับระบบใช้งานจริง เพื่อตรวจจับการเปลี่ยนแปลงของข้อมูล ไม่ใช่ของโมเดล