Perkenalan
Produk suara kami memiliki dua keluhan yang tidak dapat kami selesaikan secara internal. Dari pelanggan perusahaan berbahasa Inggris, AI terasa cepat. Dari pelanggan berbahasa Mandarin – dan semakin banyak dari pelanggan berbahasa Vietnam, Tagalog, dan Hindi – AI terasa lamban. Kesenjangan, yang diukur secara menyeluruh mulai dari diamnya penelepon hingga suku kata pertama AI, adalah 260 md untuk bahasa Inggris dan 540 md untuk bahasa Mandarin. Kedua angka tersebut berada dalam anggaran latensi yang dipublikasikan.
Hanya satu dari mereka yang merasa diterima melalui panggilan telepon.
Naluri tim teknik mana pun yang melihat kesenjangan latensi adalah mengerjakan modelnya. Inferensi lebih cepat. Modelnya lebih kecil. Kuantisasi yang lebih baik. Kami melakukan semua itu. Ini memberi kami waktu 60ms secara keseluruhan, yang tidak menyelesaikan apa pun — kesenjangan relatif masih ada, dan bahasa Inggris tetap dua kali lebih cepat.
Perbaikan sebenarnya datang dari pengamatan yang berbeda: kami memperlakukan latensi sebagai masalah model padahal sebenarnya itu adalah masalah perutean.
Kemana perginya milidetik sebenarnya
Membagi respons Mandarin 540ms menjadi beberapa segmen adalah hal pertama yang memperjelas masalah. Akuntansinya kira-kira seperti ini:
- Pengambilan audio dan titik akhir — 80 md
- Token pertama ucapan-ke-teks — 140 md
- Maksud + alur pengambilan — 90 md
- Token pertama model besar (generasi) — 180 md
- Audio pertama text-to-speech — 50 md
Di jalur Inggris, segmen yang sama masuk pada 80/60/90/80/40. Dua segmen yang berbeda secara dramatis adalah generasi ucapan-ke-teks dan model besar. STT lebih lambat dalam bahasa Mandarin karena model akustik telah dilatih dengan jendela konteks yang lebih panjang — diperlukan untuk disambiguasi nada — yang mendorong token pertama sebesar 80 md.
Pembuatan model lebih lambat karena tokeniser menghasilkan lebih banyak token per karakter yang memiliki arti setara dalam bahasa Mandarin dibandingkan dalam bahasa Inggris.
Juga bukan cacat model. Keduanya merupakan trade-off yang diam-diam diakumulasikan oleh tim independen yang mengoptimalkan metrik mereka sendiri — STT untuk akurasi, LLM untuk kualitas pembangkitan. Biaya latensi memang nyata, tetapi itu bukan P&L siapa pun.
Perbaikan perutean yang membeli 200 ms
Kami berhenti merutekan semua bahasa melalui satu LLM. Sebagai gantinya, kami membuat lapisan klasifikasi tipis di depan pembuatan yang mendeteksi, dalam waktu kurang dari 8 md, tiga hal: bahasa ucapan yang masuk, kelas maksud percakapan, dan apakah permintaan tersebut merupakan salah satu dari sekitar 40 pola frekuensi tinggi yang kami identifikasi dengan mengelompokkan 2 juta segmen panggilan.
Saat pengklasifikasi mengidentifikasi pola frekuensi tinggi dalam bahasa non-Inggris, kami mengarahkan generasi tersebut ke model khusus bahasa yang lebih kecil yang menangani pola tersebut secara langsung. Model yang lebih kecil telah disaring pada jutaan penyelesaian pola yang sama, sehingga kualitasnya pada jalur spesifik tersebut berada dalam jangkauan model besar — namun latensi token pertamanya kira-kira sepertiga.
Saat pengklasifikasi melihat maksud ekor — apa pun yang tidak ada dalam 40 pola — permintaan akan masuk ke model besar, sama seperti sebelumnya. Sebagian besar penurunan latensi berasal dari fakta bahwa pola frekuensi tinggi memang demikian Juga pola yang menyumbang ~78% volume panggilan. Kasus ekor membayar latensi asli, namun jarang terjadi.
Pengklasifikasi yang tidak dilihat oleh siapa pun
Pengklasifikasi tipis adalah bagian dari proyek yang tidak dianggarkan oleh siapa pun. Membangunnya membutuhkan waktu lebih lama daripada membangun sistem perutean itu sendiri, karena mode kegagalannya tidak kentara. Pengklasifikasi yang salah mengarahkan 1% permintaan ke model kecil yang tidak menanganinya akan menghasilkan halusinasi, bukan hanya respons yang menurun.
Ada tiga hal yang membuat pengklasifikasi berfungsi. Pertama, ia dilatih tentang lalu lintas produksi nyata, bukan data sintetis. Kedua, ia mengembalikan skor kepercayaan yang dapat di ambang batas oleh router — nilai kepercayaan apa pun yang berada di bawah 0,91 akan otomatis masuk ke model besar.
Ketiga, kami melakukan shadow-deployment selama enam minggu pada pipeline yang ada, dengan model besar memberikan kebenaran dasar, sebelum lalu lintas apa pun benar-benar dialihkan ke model kecil.
Penerapan bayangan menemukan empat kelas kesalahan yang terlewatkan oleh set pengujian offline. Dua di antaranya mudah diperbaiki dalam data pelatihan. Dua aturan perutean yang disengaja dan diwajibkan — apa pun yang menyangkut verifikasi identitas, pembayaran, atau pembatalan janji temu selalu masuk ke model besar terlepas dari kepercayaan pengklasifikasi, karena biaya halusinasi pada jalur tersebut lebih tinggi daripada kemenangan latensi.
Sisi masalah TTS
Sementara perubahan LLM dan STT sedang melalui peninjauan, tim paralel sedang mengerjakan keluaran pidato. Audio pertama TTS 50ms dalam bahasa Inggris secara efektif tidak ada duanya; kesenjangan 70ms-90ms pada sebagian besar bahasa non-Inggris didorong oleh model suara yang lebih kecil, caching yang kurang agresif, dan satu kumpulan GPU bersama yang memprioritaskan bahasa Inggris saat dimuat.
Kami membagi infrastruktur TTS ke dalam kumpulan bahasa yang disematkan. Mandarin TTS kini berjalan di kumpulannya sendiri, dengan aturan penskalaannya sendiri, pada perangkat keras yang dekat dengan wilayah tempat sebagian besar lalu lintas Mandarin kami berasal. Latensi turun dari 70-90 md menjadi 45 md dalam waktu dua minggu setelah peralihan.
Semua ini tidak cerdas; ini adalah pekerjaan infrastruktur yang tidak pernah dilakukan oleh siapa pun karena perbaikan kecil dalam satu bahasa saja tidak dapat membenarkan hal tersebut.
Pelajarannya — dan sekarang kami menuliskannya secara internal — adalah bahwa "kami tidak berinvestasi dalam hal ini karena tidak ada satu pun metrik yang dilihat oleh pengguna yang dapat membenarkan hal ini" adalah jenis keputusan yang memperparah kesenjangan 280 ms antara dua bahasa selama empat tahun.
Mengukur paritas, bukan rata-rata
Satu perubahan kecil namun penting yang kami lakukan secara internal adalah cara laporan dasbor latensi tim. Kami biasa melacak latensi end-to-end p50 dan p95, yang dirata-ratakan di semua bahasa, terhadap satu SLO. Dasbornya hampir selalu tampak hijau.
Dasbor baru melaporkan p50 dan p95 per bahasa melawan a keseimbangan SLO — kesenjangan antara bahasa yang didukung paling lambat dan tercepat memiliki anggarannya sendiri, diberlakukan secara terpisah. Kami menetapkan anggaran paritas pada 60 md. Ketika kesenjangan melebihi anggaran, on-call akan dipanggil.
Dasbor paritas melakukan sesuatu yang tidak dapat dilakukan oleh dasbor berbasis rata-rata: membuat regresi dalam bahasa paling lambat terlihat dengan urgensi yang sama seperti regresi dalam bahasa tercepat. Jika Anda menghitung rata-rata dalam 32 bahasa, regresi 200 md dalam bahasa Vietnam akan menaikkan rata-rata sebesar 6 md. Saat Anda mengukur paritas, ini menggerakkan dasbor sebanyak 200 mdtk.
Apa yang masih lambat
Setelah perutean berfungsi, kumpulan TTS, dan dasbor paritas, bahasa terburuk kami (Kanton, terutama karena korpus model akustik pendukung lebih kecil) berada pada 320ms. Bahasa Inggris berada pada 220ms. Kesenjangan 100ms yang tersisa adalah nyata dan kami mengetahui secara kasar di mana ia berada — model akustik STT Kanton lebih tua dan belum menggunakan arsitektur baru, dan kami akan melatihnya kembali di Q3.
Namun "bahasa paling lambat tertinggal 100 md dari bahasa tercepat" adalah percakapan yang berbeda dengan "bahasa paling lambat tertinggal 280 md dari bahasa tercepat". Yang pertama adalah regresi yang diketahui dengan rencana perbaikan triwulanan. Yang terakhir adalah keadaan darurat pengalaman pelanggan yang tidak kami sadari.
Apa yang akan kami lakukan secara berbeda di lain waktu
Tiga hal, dalam urutan prioritas, jika kita membangun kembali tumpukan latensi dari awal dengan apa yang kita ketahui sekarang.
- Bangun router pengklasifikasi terlebih dahulu, lalu modelnya. Lapisan perutean akhirnya menjadi bagian dengan leverage tertinggi. Memperlakukannya sebagai "kami akan menambahkannya nanti jika kami membutuhkannya" ternyata berarti kami hidup dengan latensi model tunggal selama 18 bulan lebih lama dari yang kami perlukan.
- Tetapkan SLO paritas sebelum SLO bahasa. Godaannya adalah menetapkan target per bahasa dan membiarkan kesetaraan muncul. Paritas tidak muncul; itu menyimpang, perlahan, ke arah bahasa utama tim.
- Gunakan infrastruktur per bahasa seolah-olah setiap bahasa adalah produk terpisah. Mandarin TTS berhak mendapatkan kumpulan GPU-nya sendiri sejak hari pertama, bukan sejak kami mengukur kesenjangan latensi.
Semua penelitian ini bukanlah penelitian baru. Tak satu pun dari itu memerlukan kertas. Hal ini memerlukan perlakuan paritas latensi sebagai komitmen produk, kemudian mendanai infrastruktur yang tidak menarik untuk mendukung komitmen tersebut. Kami memiliki keseimbangan yang kami butuhkan saat ini. Kami tidak memilikinya selama empat tahun.