การแนะนำ
ผลิตภัณฑ์เสียงของเรามีข้อร้องเรียนสองประการที่เราไม่สามารถปรับยอดเป็นการภายในได้ จากลูกค้าองค์กรที่พูดภาษาอังกฤษ AI รู้สึกรวดเร็ว จากลูกค้าที่พูดภาษาจีนกลาง — และจากลูกค้าที่พูดภาษาเวียดนาม ตากาล็อก และฮินดีเพิ่มมากขึ้น — AI รู้สึกซบเซา ช่องว่างที่วัดตั้งแต่ต้นจนจบตั้งแต่ความเงียบของผู้โทรไปจนถึงพยางค์แรกของ AI คือ 260 มิลลิวินาทีสำหรับภาษาอังกฤษ และ 540 มิลลิวินาทีสำหรับภาษาจีนกลาง ตัวเลขทั้งสองอยู่ภายในงบประมาณเวลาในการตอบสนองที่เผยแพร่
มีเพียงคนเดียวเท่านั้นที่รู้สึกว่าเป็นที่ยอมรับทางโทรศัพท์
สัญชาตญาณของทีมวิศวกรที่เห็นช่องว่างด้านเวลาแฝงคือการบดขยี้โมเดล การอนุมานที่รวดเร็วยิ่งขึ้น รุ่นเล็กกว่า. การหาปริมาณที่ดีขึ้น เราทำทั้งหมดนั้น มันซื้อเวลาให้เราได้ 60 มิลลิวินาที ซึ่งไม่ได้ปิดอะไรเลย — ช่องว่างสัมพัทธ์ยังคงมีอยู่ และภาษาอังกฤษยังคงเร็วขึ้นสองเท่า
การแก้ไขที่แท้จริงมาจากข้อสังเกตที่ต่างออกไป: เรากำลังถือว่าเวลาแฝงเป็นปัญหาแบบจำลอง เมื่อจริงๆ แล้วเป็นปัญหาการกำหนดเส้นทาง
จริงๆ แล้วมิลลิวินาทีจะไปอยู่ที่ไหน
การแบ่งการตอบสนองภาษาจีนกลาง 540ms ออกเป็นส่วนๆ เป็นสิ่งแรกที่ชี้แจงปัญหา การบัญชีมีลักษณะประมาณนี้:
- การจับเสียงและการสิ้นสุด — 80ms
- โทเค็นแรกเป็นคำพูดเป็นข้อความ — 140ms
- เจตนา + ไปป์ไลน์การดึงข้อมูล — 90ms
- โมเดลขนาดใหญ่โทเค็นแรก (รุ่น) — 180ms
- ข้อความเป็นคำพูดเสียงแรก — 50ms
บนเส้นทางภาษาอังกฤษ ส่วนเดียวกันเข้ามาที่ 80 / 60 / 90 / 80 / 40 สองส่วนที่แตกต่างกันอย่างมากคือการสร้างคำพูดเป็นข้อความและการสร้างโมเดลขนาดใหญ่ STT ทำงานช้าลงในภาษาจีนกลาง เนื่องจากโมเดลอะคูสติกได้รับการฝึกฝนด้วยหน้าต่างบริบทที่ยาวขึ้น ซึ่งจำเป็นสำหรับการแก้ไขความกำกวมของโทนเสียง ซึ่งผลักดันโทเค็นแรกไป 80ms
การสร้างแบบจำลองช้าลงเนื่องจากโทเค็นสร้างโทเค็นต่ออักขระที่มีความหมายเทียบเท่าในภาษาจีนกลางมากกว่าในภาษาอังกฤษ
ไม่ใช่ข้อบกพร่องของแบบจำลอง ทั้งสองอย่างเป็นข้อแลกเปลี่ยนที่ทีมอิสระสะสมมาอย่างเงียบๆ โดยปรับให้เหมาะสมสำหรับตัวชี้วัดของตนเอง — STT เพื่อความแม่นยำ, LLM สำหรับคุณภาพการสร้าง ต้นทุนเวลาในการตอบสนองนั้นเป็นเรื่องจริง แต่ P&L ไม่ใช่ของใครเลย
การแก้ไขเส้นทางที่ซื้อ 200ms
เราหยุดกำหนดเส้นทางทุกภาษาผ่าน LLM เดียว แต่เราสร้างเลเยอร์การจำแนกแบบบางไว้ด้านหน้าเจเนอเรชันที่ตรวจจับสามสิ่งในเวลาต่ำกว่า 8 มิลลิวินาที ได้แก่ ภาษาของคำพูดที่เข้ามา คลาสเจตนาในการสนทนา และคำขอเป็นหนึ่งในรูปแบบความถี่สูงประมาณ 40 รูปแบบที่เราระบุโดยการจัดกลุ่มกลุ่มการโทร 2 ล้านรายการหรือไม่
เมื่อตัวแยกประเภทระบุรูปแบบความถี่สูงในภาษาที่ไม่ใช่ภาษาอังกฤษ เราจะกำหนดเส้นทางการสร้างไปยังโมเดลเฉพาะด้านภาษาที่เล็กกว่าซึ่งจัดการรูปแบบนั้นโดยตรง โมเดลขนาดเล็กได้รับการกลั่นกรองจากความสำเร็จหลายล้านครั้งของรูปแบบเดียวกัน ดังนั้นคุณภาพของมันในเส้นทางเฉพาะเหล่านั้นจึงอยู่ภายในเสียงรบกวนของโมเดลขนาดใหญ่ — แต่เวลาแฝงของโทเค็นแรกนั้นอยู่ที่ประมาณหนึ่งในสาม
เมื่อ Classifier เห็น Tail Intent — สิ่งใดก็ตามที่ไม่อยู่ใน 40 รูปแบบ — คำขอจะตกไปที่โมเดลขนาดใหญ่เหมือนเมื่อก่อน เวลาแฝงที่ลดลงส่วนใหญ่มาจากข้อเท็จจริงที่ว่ารูปแบบความถี่สูงนั้น อีกด้วย รูปแบบที่คิดเป็นประมาณ 78% ของปริมาณการโทร กรณีส่วนท้ายจ่ายเวลาแฝงเดิม แต่ก็พบได้ยาก
ลักษณนามที่ไม่มีใครเห็นว่ากำลังมา
ตัวแยกประเภทแบบบางเป็นส่วนหนึ่งของโครงการที่ไม่มีใครตั้งงบประมาณไว้ การสร้างจะใช้เวลานานกว่าการสร้างระบบกำหนดเส้นทางเอง เนื่องจากโหมดความล้มเหลวนั้นละเอียดอ่อน ตัวแยกประเภทที่ส่งคำขอ 1% ผิดไปยังโมเดลขนาดเล็กที่ไม่สามารถจัดการคำขอเหล่านั้นได้ จะทำให้เกิดภาพหลอน ไม่ใช่แค่การตอบสนองที่ลดลงเท่านั้น
สามสิ่งที่ทำให้ลักษณนามทำงานได้ ประการแรก ได้รับการฝึกอบรมเกี่ยวกับปริมาณการใช้งานจริง ไม่ใช่ข้อมูลสังเคราะห์ ประการที่สอง มันส่งคืนคะแนนความเชื่อมั่นที่เราเตอร์สามารถเกณฑ์ได้ — อะไรก็ตามที่ความเชื่อมั่นต่ำกว่า 0.91 จะตกเป็นของรุ่นใหญ่โดยอัตโนมัติ
ประการที่สาม เราปรับใช้แบบเงาเป็นเวลาหกสัปดาห์กับไปป์ไลน์ที่มีอยู่ โดยที่โมเดลขนาดใหญ่จะให้ความจริงภาคพื้นดิน ก่อนที่การรับส่งข้อมูลใดๆ จะถูกส่งไปยังโมเดลขนาดเล็กจริงๆ
การใช้งานเงาพบข้อผิดพลาดสี่ประเภทที่ชุดทดสอบออฟไลน์พลาดไป สองข้อมูลนั้นแก้ไขได้ง่ายในข้อมูลการฝึกอบรม กฎการกำหนดเส้นทางโดยเจตนาที่จำเป็นสองข้อ — สิ่งใดก็ตามที่เกี่ยวข้องกับการยืนยันตัวตน การชำระเงิน หรือการยกเลิกนัดหมายมักจะไปที่โมเดลใหญ่เสมอ โดยไม่คำนึงถึงความเชื่อมั่นของตัวแยกประเภท เนื่องจากต้นทุนของภาพหลอนบนเส้นทางเหล่านั้นสูงกว่าเวลาแฝงที่ชนะ
ด้าน TTS ของปัญหา
ในขณะที่การเปลี่ยนแปลง LLM และ STT อยู่ระหว่างการตรวจสอบ ทีมงานคู่ขนานกำลังดำเนินการเกี่ยวกับเอาต์พุตเสียงพูด เสียงครั้งแรก TTS 50 มิลลิวินาทีในภาษาอังกฤษนั้นไม่มีใครเทียบได้อย่างมีประสิทธิภาพ ช่องว่าง 70ms-90ms ในภาษาที่ไม่ใช่ภาษาอังกฤษส่วนใหญ่ได้รับแรงหนุนจากโมเดลเสียงที่เล็กลง การแคชที่ก้าวร้าวน้อยกว่า และกลุ่ม GPU ที่ใช้ร่วมกันเพียงกลุ่มเดียวที่จัดลำดับความสำคัญของภาษาอังกฤษภายใต้ภาระงาน
เราแบ่งโครงสร้างพื้นฐาน TTS เป็นกลุ่มภาษาที่ตรึงไว้ ขณะนี้ Mandarin TTS ทำงานบนพูลของตัวเองโดยมีกฎการปรับขนาดของตัวเองบนฮาร์ดแวร์ใกล้กับภูมิภาคที่การรับส่งข้อมูลภาษาจีนกลางส่วนใหญ่ของเราเกิดขึ้น เวลาแฝงลดลงจาก 70-90ms เป็น 45ms ภายในสองสัปดาห์หลังจากการตัด
สิ่งนี้ไม่ฉลาดเลย มันเป็นงานด้านโครงสร้างพื้นฐานที่ไม่มีใครใส่ใจที่จะทำ เพราะการปรับปรุงเล็กน้อยในภาษาเดียวไม่ได้ให้เหตุผลเลย
บทเรียน — และเรากำลังเขียนมันไว้เป็นการภายใน — คือ "เราไม่ได้ลงทุนในสิ่งนี้เพราะไม่มีเมตริกที่ต้องเผชิญหน้าผู้ใช้รายเดียวที่พิสูจน์ได้" เป็นการตัดสินใจประเภทหนึ่งที่ทำให้เกิดช่องว่าง 280 มิลลิวินาทีระหว่างสองภาษาในช่วงสี่ปี
การวัดความเท่าเทียมกัน ไม่ใช่ค่าเฉลี่ย
การเปลี่ยนแปลงเล็กๆ น้อยๆ อย่างหนึ่งที่เราทำภายในคือวิธีรายงานแดชบอร์ดเวลาแฝงของทีม เราเคยติดตาม p50 และ p95 ของเวลาในการตอบสนองตั้งแต่ต้นทางถึงปลายทาง โดยเฉลี่ยในทุกภาษา เทียบกับ SLO เดียว แดชบอร์ดดูเป็นสีเขียวเกือบตลอดเวลา
แดชบอร์ดใหม่รายงาน p50 และ p95 ต่อภาษา ต่อต้านก ความเท่าเทียมกัน SLO — ช่องว่างระหว่างภาษาที่รองรับที่ช้าที่สุดและเร็วที่สุดนั้นมีงบประมาณของตัวเอง ซึ่งบังคับใช้แยกต่างหาก เรากำหนดงบประมาณความเท่าเทียมกันที่ 60ms เมื่อช่องว่างเกินงบประมาณ การโทรจะถูกเพจ
แดชบอร์ดพาริตี้ทำสิ่งที่คนทั่วไปไม่สามารถทำได้: ทำให้การถดถอยในภาษาที่ช้าที่สุดมองเห็นได้ในเวลาเร่งด่วนเช่นเดียวกับการถดถอยในภาษาที่เร็วที่สุด เมื่อคุณเฉลี่ยใน 32 ภาษา การถดถอย 200 มิลลิวินาทีในภาษาเวียดนามจะขยับค่าเฉลี่ย 6 มิลลิวินาที เมื่อคุณวัดความเท่าเทียมกัน ระบบจะย้ายแดชบอร์ดไป 200 มิลลิวินาที
อะไรที่ยังช้าอยู่.
หลังจากงานการกำหนดเส้นทาง พูล TTS และแดชบอร์ดพาริตี ภาษาที่แย่ที่สุดของเรา (กวางตุ้ง เนื่องจากคอร์ปัสโมเดลอะคูสติกที่สนับสนุนมีขนาดเล็กกว่า) อยู่ที่ 320 มิลลิวินาที ภาษาอังกฤษอยู่ที่ 220ms ช่องว่าง 100 มิลลิวินาทีที่เหลือนั้นเป็นของจริง และเรารู้โดยประมาณว่ามันอยู่ที่ไหน — โมเดลเสียง STT กวางตุ้งนั้นเก่ากว่าและยังไม่ได้ใช้สถาปัตยกรรมใหม่ และเราจะฝึกใหม่ในไตรมาสที่ 3
แต่ "ภาษาที่ช้าที่สุดคือ 100ms ตามหลังเร็วที่สุด" เป็นการสนทนาที่แตกต่างจาก "ภาษาที่ช้าที่สุดคือ 280ms หลังเร็วที่สุด" แบบแรกคือการถดถอยที่ทราบกันดีและมีการวางแผนแก้ไขรายไตรมาส อย่างหลังคือเหตุการณ์ฉุกเฉินด้านประสบการณ์ของลูกค้าซึ่งเราไม่รู้ว่ามี
สิ่งที่เราจะทำแตกต่างออกไปในครั้งต่อไป
สามสิ่งตามลำดับความสำคัญ หากเราสร้างสแต็กเวลาแฝงใหม่ตั้งแต่ต้นด้วยสิ่งที่เรารู้ตอนนี้
- สร้างลักษณนาม-เราเตอร์ก่อน จากนั้นจึงสร้างโมเดล เลเยอร์การกำหนดเส้นทางกลายเป็นส่วนที่มีการใช้ประโยชน์สูงสุด การปฏิบัติต่อสิ่งนี้ในฐานะ "เราจะเพิ่มในภายหลังหากเราต้องการ" กลายเป็นว่าเราใช้ชีวิตอยู่กับเวลาแฝงของโมเดลเดียวนานกว่าที่เราต้องการถึง 18 เดือน
- ตั้งค่า Parity SLO ก่อนภาษา SLO สิ่งล่อใจคือการกำหนดเป้าหมายต่อภาษาและปล่อยให้ความเท่าเทียมกันเกิดขึ้น ความเท่าเทียมกันไม่เกิดขึ้น มันค่อยๆ แตกต่างไปในทิศทางของภาษาหลักของทีม
- จัดสรรโครงสร้างพื้นฐานสำหรับแต่ละภาษาเสมือนว่าแต่ละภาษาเป็นผลิตภัณฑ์ที่แยกจากกัน Mandarin TTS สมควรได้รับกลุ่ม GPU ของตัวเองตั้งแต่วันแรก ไม่ใช่จากวันที่เราวัดช่องว่างเวลาแฝง
สิ่งเหล่านี้ไม่ใช่การวิจัยเชิงนวนิยาย ไม่จำเป็นต้องมีกระดาษ โดยจำเป็นต้องถือว่าความเท่าเทียมกันของเวลาในการตอบสนองเป็นความมุ่งมั่นของผลิตภัณฑ์ จากนั้นจึงให้เงินทุนแก่โครงสร้างพื้นฐานที่ไม่สวยงามเพื่อสนับสนุนความมุ่งมั่นดังกล่าว เรามีความเท่าเทียมกันที่เราต้องการตอนนี้ เราไม่มีมันมาสี่ปีแล้ว