ข้ามไปยังเนื้อหาหลัก

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 จะถูกปฏิเสธ

จะเกิดอะไรขึ้นเมื่อล้มเหลว

  1. การแปลที่ล้มเหลวจะถูกบันทึกลงใน stderr พร้อมคำนำหน้า [GATE], ชื่อคีย์, เหตุผล และตัวอย่างของค่าที่ได้
  2. คีย์นั้นจะ ไม่ ถูกเขียนลงในไฟล์ locale
  3. กระบวนการลองใหม่แบบลดหลั่นจะเริ่มทำงาน (ดูด้านล่าง)
[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 ด้วยตนเอง


ดูเพิ่มเติม