giriiş
Ses ürünümüzün kendi içinde uzlaştıramadığımız iki şikayeti vardı. İngilizce konuşan kurumsal müşterilerin yapay zekası çok hızlı geldi. Mandarin Çincesi konuşan müşterilerden ve giderek Vietnamca, Tagalogca ve Hintçe konuşan müşterilerden gelen yapay zekanın yavaşladığı görüldü. Arayanın sessizliğinden yapay zekanın ilk hecesine kadar uçtan uca ölçülen fark, İngilizce'de 260 ms ve Mandarin Çincesinde 540 ms idi. Her iki sayı da yayınlanan gecikme bütçesi dahilindeydi.
Telefon görüşmesinde yalnızca biri kendini kabul edilebilir hissetti.
Gecikme boşluğu gören herhangi bir mühendislik ekibinin içgüdüsü, model üzerinde çalışmaktır. Daha hızlı çıkarım. Daha küçük model. Daha iyi nicemleme. Bunların hepsini biz yaptık. Bize genel olarak 60 ms kazandırdı ve bu da hiçbir şeyi kapatmadı; göreceli fark hala oradaydı ve İngilizce iki kat daha hızlıydı.
Gerçek düzeltme farklı bir gözlemden geldi: Gecikmeyi bir model sorunu olarak ele alıyorduk, oysa aslında bir yönlendirme sorunuydu.
Milisaniyelerin aslında nereye gittiği
540ms Mandarin yanıtını bölümlere ayırmak, sorunu açıklığa kavuşturan ilk şeydi. Muhasebe kabaca şuna benziyordu:
- Ses yakalama ve uç noktalama — 80ms
- Konuşmayı metne dönüştürme ilk belirteci — 140ms
- Niyet + alma hattı — 90ms
- Büyük model ilk jeton (nesil) — 180ms
- Metinden konuşmaya ilk ses — 50ms
İngiltere yolunda aynı segmentler 80/60/90/80/40'ta geldi. Dramatik biçimde farklılaşan iki segment, konuşmayı metne dönüştürme ve büyük model üretimiydi. Mandarin dilinde STT daha yavaştı çünkü akustik model, ilk belirteci 80 ms iten daha uzun bir bağlam penceresiyle (ton belirsizliğini gidermek için gerekli) eğitilmişti.
Model oluşturma işlemi daha yavaştı çünkü tokenizer, Mandarin dilinde eşdeğer anlama sahip karakter başına İngilizceye göre daha fazla jeton üretti.
İkisi de model hatası değildi. Her ikisi de kendi ölçümleri için optimizasyon yapan bağımsız ekipler tarafından sessizce biriktirilen ödünleşimlerdi (doğruluk için STT, üretim kalitesi için LLM). Gecikme maliyeti gerçekti ama bu kimsenin kâr ve zararı değildi.
200ms satın alan yönlendirme düzeltmesi
Tüm dilleri tek bir Yüksek Lisans üzerinden yönlendirmeyi durdurduk. Bunun yerine, üretimin önünde 8 ms'nin altında üç şeyi algılayan ince bir sınıflandırma katmanı oluşturduk: gelen ifadenin dili, konuşma amacı sınıfı ve isteğin, 2 milyon çağrı segmentini kümeleyerek belirlediğimiz yaklaşık 40 yüksek frekanslı modelden biri olup olmadığı.
Sınıflandırıcı, İngilizce dışındaki bir dilde yüksek frekanslı bir model belirlediğinde nesli, bu modeli doğrudan ele alan daha küçük, dile özel bir modele yönlendiririz. Küçük model, aynı modelin milyonlarca kez tamamlanmasıyla damıtılmıştır, dolayısıyla bu belirli yollardaki kalitesi büyük modelin gürültüsü dahilindedir; ancak ilk belirteç gecikmesi kabaca üçte birdir.
Sınıflandırıcı bir kuyruk amacı (40 kalıpta olmayan herhangi bir şey) gördüğünde, istek daha önce olduğu gibi büyük modele aktarılır. Gecikme düşüşünün çoğu, yüksek frekanslı modellerin Ayrıca çağrı hacminin ~%78'ini oluşturan modeller. Kuyruk vakaları orijinal gecikmeyi öder, ancak bunlar nadirdir.
Kimsenin geldiğini görmediği sınıflandırıcı
İnce sınıflandırıcı, projenin kimsenin bütçesini ayırmadığı bir parçasıydı. Bunu oluşturmak, yönlendirme sisteminin kendisini oluşturmaktan daha uzun sürdü çünkü arıza modları çok inceydi. İsteklerin %1'ini, bunları işlemeyen küçük bir modele yanlış yönlendiren bir sınıflandırıcı, yalnızca bozulmuş yanıtlar değil, halüsinasyonlar da üretir.
Sınıflandırıcının çalışmasını sağlayan üç şey vardı. Öncelikle sentetik verilerle değil, gerçek üretim trafiğiyle eğitildi. İkincisi, yönlendiricinin eşik oluşturabileceği bir güven puanı döndürdü; 0,91 güvenin altındaki herhangi bir şey otomatik olarak büyük modele düşüyor.
Üçüncüsü, herhangi bir trafik küçük modellere yönlendirilmeden önce, büyük model temel gerçeği sağlayarak, onu altı hafta boyunca mevcut boru hattına karşı gölge konuşlandırması yaptık.
Gölge dağıtımı, çevrimdışı test setinin gözden kaçırdığı dört hata sınıfını buldu. Bunlardan ikisini eğitim verilerinde düzeltmek kolaydı. Gerekli olan iki kasıtlı yönlendirme kuralı: Kimlik doğrulama, ödemeler veya randevu iptaline dokunan her şey, sınıflandırıcının güveninden bağımsız olarak her zaman büyük modele gider, çünkü bu yollarda halüsinasyonun maliyeti, gecikme kazancından daha yüksektir.
Sorunun TTS tarafı
LLM ve STT değişiklikleri incelenirken paralel bir ekip de konuşma çıktısı üzerinde çalışıyordu. İngilizce 50 ms TTS ilk sesi gerçekten rakipsizdi; İngilizce dışındaki dillerin çoğunda 70 ms-90 ms'lik fark, daha küçük ses modelleri, daha az agresif önbellekleme ve yük altında İngilizce'ye öncelik veren tek bir paylaşılan GPU havuzundan kaynaklanıyordu.
TTS altyapısını dil sabitli havuzlara ayırdık. Mandarin TTS artık kendi havuzunda, kendi ölçeklendirme kurallarıyla, Mandarin trafiğimizin çoğunun kaynaklandığı bölgelere yakın donanımlarda çalışıyor. Gecikme, geçişten sonraki iki hafta içinde 70-90 ms'den 45 ms'ye düştü.
Bunların hiçbiri akıllıca değildi; bu kimsenin yapma zahmetine girmediği bir altyapı çalışmasıydı çünkü herhangi bir dildeki marjinal gelişme tek başına bunu haklı çıkarmazdı.
Çıkarılan ders - ve şu anda bunu şirket içinde yazıyoruz - "buna yatırım yapmadık çünkü kullanıcının karşılaştığı tek bir ölçüm bunu haklı çıkarmadı", dört yıl boyunca iki dil arasında 280 ms'lik bir boşluğa neden olan türden bir karardır.
Ortalamaları değil pariteyi ölçmek
Dahili olarak yaptığımız küçük ama önemli bir değişiklik, ekibin gecikme kontrol panelinin raporlama biçiminde oldu. Tek bir SLO'ya göre tüm dillerde ortalama olarak uçtan uca gecikmenin p50 ve p95'ini izliyorduk. Gösterge paneli çoğu zaman yeşil görünüyordu.
Yeni kontrol paneli p50 ve p95'i rapor ediyor dil başına a'ya karşı parite SLO — desteklenen en yavaş ve en hızlı dil arasındaki farkın ayrı olarak uygulanan kendi bütçesi vardır. Eşlik bütçesini 60ms olarak ayarladık. Boşluk bütçeyi aştığında, çağrı üzerine çağrı yapılır.
Eşlik kontrol paneli, ortalamaya dayalı olanın yapamayacağı bir şeyi yapar: En yavaş dildeki gerilemeleri, en hızlı dildeki gerilemelerle aynı aciliyette görünür hale getirir. 32 dilin ortalamasını aldığınızda, Vietnamca'da 200 ms'lik bir gerileme ortalamayı 6 ms kaydırır. Eşliği ölçtüğünüzde kontrol panelini 200 ms hareket ettirir.
Hala yavaş olan ne
Yönlendirme çalışmasından, TTS havuzlarından ve eşlik kontrol panelinden sonra en kötü dilimiz (özellikle destekleyici akustik model kümesi daha küçük olduğu için Kantonca) 320 ms'de bulunuyor. İngilizce 220ms'de. Geriye kalan 100 ms'lik boşluk gerçektir ve kabaca nerede olduğunu biliyoruz - Kanton STT akustik modeli daha eskidir ve henüz yeni mimaride yer almamıştır ve onu 3. çeyrekte yeniden eğiteceğiz.
Ancak "en yavaş dil en hızlının 100 ms gerisindedir" ifadesi, "en yavaş dil en hızlı dilin 280 ms gerisindedir" ifadesinden farklı bir konuşmadır. İlki, üç ayda bir düzeltilmesi planlanan bilinen bir gerilemedir. İkincisi, sahip olduğumuzu bilmediğimiz bir müşteri deneyimi acil durumuydu.
Bir dahaki sefere neyi farklı yapardık
Gecikme yığınını şu anda bildiklerimizle sıfırdan yeniden oluşturuyor olsaydık, öncelik sırasına göre üç şey.
- Önce sınıflandırıcı-yönlendiriciyi, ardından modeli oluşturun. Yönlendirme katmanı en yüksek kaldıraca sahip parça haline geldi. Bunu "ihtiyacımız olursa daha sonra ekleyeceğiz" şeklinde ele almanın, tek model gecikmesiyle ihtiyacımız olandan 18 ay daha uzun süre yaşadığımız anlamına geldiği ortaya çıktı.
- Eşlik SLO'larını dil SLO'larından önce ayarlayın. Burada cazip olan, dil başına hedefler belirlemek ve eşitliğin ortaya çıkmasına izin vermektir. Parite ortaya çıkmıyor; yavaş yavaş ekibin ana diline doğru ayrılıyor.
- Her dil ayrı bir ürünmüş gibi dil başına altyapıya kaynak sağlayın. Mandarin TTS, gecikme farkını ölçtüğümüz günden itibaren değil, ilk günden itibaren kendi GPU havuzunu hak etti.
Bunların hiçbiri yeni bir araştırma değil. Hiçbiri bir kağıt gerektirmedi. Gecikme eşitliğini bir ürün taahhüdü olarak ele almayı ve ardından bu taahhüdü desteklemek için gösterişsiz altyapıyı finanse etmeyi gerektiriyordu. Şu anda ihtiyacımız olan pariteye sahibiz. Dört yıldır elimizde yoktu.