Quality Gate
ทุกการแปลจะผ่านด่านการตรวจสอบ (validation gate) ที่กำหนดไว้ก่อนที่จะถูกเขียนลงดิสก์ Quality Gate จะดักจับรูปแบบความล้มเหลวที่พบบ่อยของการแปลด้วยเครื่อง (machine translation) — จะไม่มีการใช้ค่าเริ่มต้นแบบเงียบๆ (silent fallbacks) และจะไม่มีข้อมูลขยะถูกเขียนลงในไฟล์ locale ของคุณ
การตรวจสอบความถูกต้อง
| การตรวจสอบ | สิ่งที่ดักจับได้ | ป้ายกำกับ Gate |
|---|---|---|
| ว่างเปล่า/ช่องว่าง | โมเดลส่งคืนสตริงว่างหรือช่องว่าง | [GATE] empty |
| สะท้อนต้นฉบับ | โมเดลส่งคืนข้อความภาษาอังกฤษต้นฉบับ | [GATE] source-echo |
| วนลูปข้อมูลหลอน | รูปแบบไตรแกรม (trigram) ที่ซ้ำกัน (เช่น "Qo' Qo' Qo'") | [GATE] hallucination |
| ความยาวเกินจริง | ผลลัพธ์ยาวกว่าต้นฉบับอย่างมีนัยสำคัญ | [GATE] length |
| ความถูกต้องของตัวอักษร | ระบบตัวอักษร (script) ไม่ถูกต้องสำหรับ locale ปลายทาง | [GATE] script |
| หมวดหมู่พหูพจน์ ICU | ขาดรูปแบบพหูพจน์ที่จำเป็นสำหรับ locale นั้น | [GATE] icu-plural |
ว่างเปล่า/ช่องว่าง
ปฏิเสธการแปลที่เป็นสตริงว่าง มีเพียงช่องว่าง หรือ null การตรวจสอบนี้จะดักจับโมเดลที่ไม่ส่งคืนค่าใดๆ สำหรับคีย์ที่ยาก
สะท้อนต้นฉบับ
ตรวจจับเมื่อโมเดลส่งคืนข้อความต้นฉบับภาษาอังกฤษแทนที่จะแปล มักพบได้บ่อยในสตริงสั้นๆ และ prompt ที่ระบุรายละเอียดไม่เพียงพอ
วนลูปข้อมูลหลอน
วิเคราะห์รูปแบบไตรแกรม (3 ตัวอักษร) ในผลลัพธ์ หากมีไตรแกรมใดซ้ำกันมากกว่าจำนวนเกณฑ์ที่กำหนดเมื่อเทียบกับความยาวของผลลัพธ์ การแปลนั้นจะถูกปฏิเสธ การตรวจสอบนี้จะดักจับผลลัพธ์ที่เสื่อมสภาพ เช่น "Qo' Qo' Qo' Qo' Qo'"
ความยาวเกินจริง
ปฏิเสธการแปลที่ความยาวของผลลัพธ์เกิน maxLengthRatio × source length (ค่าเริ่มต้น: 4 เท่า) การตรวจสอบนี้จะดักจับอาการหลอนของโมเดลที่สร้างข้อความยาวเหยียดสำหรับอินพุตสั้นๆ
สามารถกำหนดค่าได้ผ่าน maxLengthRatio ใน config ของคุณ
ความถูกต้องของตัวอักษร
สำหรับ locale ที่มีการกำหนดค่าฟิลด์ script (เช่น "script": "cans" สำหรับ Plains Cree Syllabics) จะตรวจสอบว่าผลลัพธ์มีตัวอักษรที่ไม่ใช่ ASCII ซึ่งเหมาะสมกับระบบตัวอักษรปลายทาง ผลลัพธ์ที่มีเฉพาะอักษรละตินสำหรับ locale ภาษาอาหรับ, CJK หรือ Syllabics จะถูกปฏิเสธ
จะเกิดอะไรขึ้นเมื่อล้มเหลว
- การแปลที่ล้มเหลวจะถูกบันทึกลงใน stderr พร้อมคำนำหน้า
[GATE], ชื่อคีย์, เหตุผล และตัวอย่างของค่าที่ได้ - คีย์นั้นจะ ไม่ ถูกเขียนลงในไฟล์ locale
- กระบวนการลองใหม่แบบลดหลั่นจะเริ่มทำงาน (ดูด้านล่าง)
[GATE] hero.title: source-echo — "Welcome to our platform"
[GATE] nav.about: hallucination — "À À À À À À À À"
กระบวนการลองใหม่แบบลดหลั่น
เมื่อ batch ล้มเหลว (ข้อผิดพลาดในการแยกวิเคราะห์ JSON หรือถูกปฏิเสธโดย Quality Gate) rosetta จะลองใหม่ด้วยขนาด batch ที่เล็กลงเรื่อยๆ:
Full batch (80 keys) → parse error
└→ Half batch (40 keys) → 2 failures
└→ Individual keys (1 each) → isolates the 2 problem keys
จำนวนครั้งสูงสุดในการลองใหม่ถูกจำกัดโดย maxRetries (ค่าเริ่มต้น: 3, สามารถกำหนดค่าได้ในแต่ละภาษา) สิ่งนี้ช่วยป้องกันการใช้โทเค็นมากเกินไปกับคีย์ที่ล้มเหลวอย่างต่อเนื่อง
หลังจากลองใหม่จนครบกำหนด คีย์ที่มีปัญหาจะถูกบันทึกและข้ามไป คีย์เหล่านี้จะถูกนำมาลองใหม่อีกครั้งในการรัน sync ครั้งถัดไป
การแคช Prompt
ข้อความระบบ (ระดับภาษา, กฎไวยากรณ์, บันทึกรูปแบบ) จะถูกแยกออกจากข้อความผู้ใช้ (คีย์ที่ต้องการแปล) การแยกส่วนนี้เป็นความตั้งใจ:
- ข้อความระบบจะ เหมือนกันในทุก batch สำหรับ locale ที่กำหนด
- ผู้ให้บริการอย่าง Anthropic และ Google จะแคชข้อความระบบที่ซ้ำกัน
- ผลลัพธ์: batch แรกจะจ่ายค่าโทเค็นเต็มจำนวน ส่วน batch ถัดๆ ไปจะจ่ายเฉพาะส่วนของข้อความผู้ใช้เท่านั้น
สิ่งนี้สามารถลดต้นทุนโทเค็นได้อย่างมากสำหรับโปรเจกต์ที่มีหลาย batch
การตรวจสอบความถูกต้องของ ICU MessageFormat
คำสั่ง integrity จะตรวจสอบรูปแบบพหูพจน์ของ ICU MessageFormat เทียบกับกฎพหูพจน์ของ CLDR หากไฟล์ต้นฉบับของคุณใช้ไวยากรณ์ ICU เช่น:
"items": "{count, plural, one {# item} other {# items}}"
Rosetta จะตรวจสอบว่าเวอร์ชันที่แปลแล้วมีหมวดหมู่พหูพจน์ที่จำเป็นทั้งหมดสำหรับ locale ปลายทาง ตัวอย่างเช่น ภาษาอาหรับต้องการหกหมวดหมู่ (zero, one, two, few, many, other) — ไม่ใช่แค่ one และ other
รัน i18n-rosetta integrity เพื่อตรวจสอบความสมบูรณ์ของพหูพจน์ในทุก locale
การบังคับใช้คำศัพท์
สำหรับคู่ภาษาที่ได้รับการฝึกสอนด้วยพจนานุกรม rosetta จะดำเนินการตรวจสอบคำศัพท์หลังการแปล หลังจากผ่าน Quality Gate แล้ว ระบบจะตรวจสอบว่า LLM ได้ใช้คำศัพท์ในพจนานุกรมที่กำหนดไว้จริงหรือไม่
[TERM] en→fr: 2 term violation(s)
• hero.title: "dashboard" → expected "tableau de bord" but got "panneau de contrôle"
การละเมิดคำศัพท์ถือเป็น คำเตือน ไม่ใช่ข้อผิดพลาดที่บล็อกการทำงาน การแปลจะยังคงถูกเขียนลงดิสก์ นี่เป็นความตั้งใจ — LLM อาจมีเหตุผลที่สมควรในการเลือกใช้คำอื่น (บริบท, ไวยากรณ์) และการบล็อกเนื่องจากคำศัพท์ไม่ตรงกันอาจส่งผลเสียมากกว่าผลดี
หากต้องการแก้ไขการละเมิด ให้อัปเดตพจนานุกรมการฝึกสอน หรือแก้ไขไฟล์ locale ด้วยตนเอง
ดูเพิ่มเติม
- การทำงานของ Sync — ตำแหน่งของ Quality Gate ในไปป์ไลน์
- วิธีการแปล — วิธีการที่ส่งข้อมูลเข้าสู่ Gate
- ตัวแปลงระบบตัวอักษร — การแปลงระบบตัวอักษรหลังผ่าน Gate
- ข้อมูลการฝึกสอน — การปรับปรุงคุณภาพการแปลตั้งแต่ต้นทาง
- หน่วยความจำการแปล — การแคชคำแปลที่ผ่านการตรวจสอบแล้ว
- ข้อมูลอ้างอิง CLI — sync — แฟล็กของ sync รวมถึงพฤติกรรมการลองใหม่
- ข้อมูลอ้างอิง CLI — integrity — การตรวจสอบพหูพจน์ ICU