परिचय
हमारे ध्वनि उत्पाद में दो शिकायतें थीं जिनका हम आंतरिक रूप से समाधान नहीं कर सके। अंग्रेजी बोलने वाले उद्यम ग्राहकों से, एआई को परेशानी महसूस हुई। मंदारिन भाषी ग्राहकों से - और तेजी से वियतनामी, तागालोग और हिंदी भाषी ग्राहकों से - एआई सुस्त महसूस हुआ। कॉलर साइलेंस से एआई प्रथम-अक्षर तक अंत-से-अंत तक मापा गया अंतर, अंग्रेजी में 260ms और मंदारिन में 540ms था। दोनों संख्याएँ प्रकाशित विलंबता बजट के भीतर थीं।
उनमें से केवल एक को ही फ़ोन कॉल स्वीकार्य लगी।
किसी भी इंजीनियरिंग टीम की प्रवृत्ति जो विलंबता अंतर देखती है वह मॉडल पर काम करना है। तेज़ अनुमान. छोटा मॉडल. बेहतर परिमाणीकरण. हमने वह सब किया. इसने हमें बोर्ड भर में 60 एमएस खरीदे, जिससे कुछ भी समाप्त नहीं हुआ - सापेक्ष अंतर अभी भी था, और अंग्रेजी दोगुनी तेज रही।
वास्तविक समाधान एक अलग अवलोकन से आया: हम विलंबता को एक मॉडल समस्या के रूप में मान रहे थे जबकि यह वास्तव में एक रूटिंग समस्या थी।
वास्तव में मिलीसेकेंड कहाँ जाते हैं
540ms मंदारिन प्रतिक्रिया को खंडों में तोड़ना पहली चीज़ थी जिसने समस्या को स्पष्ट किया। लेखांकन मोटे तौर पर इस तरह दिखता था:
- ऑडियो कैप्चर और एंडपॉइंटिंग - 80ms
- वाक्-से-पाठ प्रथम-टोकन - 140 मि.से
- आशय + पुनर्प्राप्ति पाइपलाइन - 90ms
- बड़ा मॉडल प्रथम-टोकन (पीढ़ी) - 180 मि.से
- टेक्स्ट-टू-स्पीच पहला-ऑडियो - 50 मि.से
अंग्रेजी पथ पर, समान खंड 80 / 60 / 90 / 80 / 40 पर आए। दो खंड जो नाटकीय रूप से भिन्न थे वे भाषण-से-पाठ और बड़े-मॉडल पीढ़ी थे। मंदारिन में एसटीटी धीमा था क्योंकि ध्वनिक मॉडल को एक लंबी संदर्भ विंडो के साथ प्रशिक्षित किया गया था - जो टोनल असंबद्धता के लिए आवश्यक थी - जिसने पहले-टोकन को 80ms तक बढ़ा दिया था।
मॉडल निर्माण धीमा था क्योंकि टोकनाइज़र ने अंग्रेजी की तुलना में मंदारिन में समकक्ष अर्थ के प्रति वर्ण अधिक टोकन का उत्पादन किया था।
न ही कोई मॉडल दोष था. दोनों ट्रेडऑफ़ थे जिन्हें स्वतंत्र टीमों द्वारा अपने स्वयं के मेट्रिक्स के लिए अनुकूलित करके चुपचाप जमा किया गया था - सटीकता के लिए एसटीटी, पीढ़ी की गुणवत्ता के लिए एलएलएम। विलंबता लागत वास्तविक थी, लेकिन यह किसी का P&L नहीं था।
रूटिंग फिक्स जिसने 200ms खरीदा
हमने सभी भाषाओं को एक ही एलएलएम के माध्यम से रूट करना बंद कर दिया। इसके बजाय, हमने पीढ़ी के सामने एक पतली वर्गीकरण परत बनाई है जो 8 एमएस से कम में तीन चीजों का पता लगाती है: आने वाले उच्चारण की भाषा, संवादात्मक इरादा वर्ग, और क्या अनुरोध लगभग 40 उच्च-आवृत्ति पैटर्न में से एक है जिसे हमने 2 एम कॉल सेगमेंट को क्लस्टर करके पहचाना है।
जब क्लासिफायरियर किसी गैर-अंग्रेजी भाषा में उच्च-आवृत्ति पैटर्न की पहचान करता है, तो हम पीढ़ी को एक छोटे, भाषा-विशेषीकृत मॉडल की ओर ले जाते हैं जो सीधे उस पैटर्न को संभालता है। छोटे मॉडल को एक ही पैटर्न के लाखों पूर्णताओं पर आसुत किया गया है, इसलिए उन विशिष्ट पथों पर इसकी गुणवत्ता बड़े मॉडल के शोर के भीतर है - लेकिन इसकी पहली-टोकन विलंबता लगभग एक तिहाई है।
जब क्लासिफायरियर एक टेल इंटेंट देखता है - 40 पैटर्न में कुछ भी नहीं - तो अनुरोध पहले की तरह ही बड़े मॉडल पर आ जाता है। विलंबता में अधिकांश गिरावट इस तथ्य से आती है कि उच्च-आवृत्ति पैटर्न हैं भी पैटर्न जो कॉल वॉल्यूम का ~78% है। टेल केस मूल विलंबता का भुगतान करते हैं, लेकिन वे दुर्लभ हैं।
क्लासिफायर को किसी ने आते नहीं देखा
पतला क्लासिफायर उस परियोजना का हिस्सा था जिसके लिए किसी ने बजट नहीं बनाया था। इसे बनाने में रूटिंग सिस्टम बनाने की तुलना में अधिक समय लगा, क्योंकि विफलता के तरीके सूक्ष्म थे। एक क्लासिफायरियर जो 1% अनुरोधों को एक छोटे मॉडल पर गलत तरीके से भेजता है जो उन्हें संभाल नहीं पाता है, न कि केवल अपमानजनक प्रतिक्रियाएँ पैदा करता है।
तीन चीज़ों ने क्लासिफायरियर को काम करने में सक्षम बनाया। सबसे पहले, इसे वास्तविक उत्पादन ट्रैफ़िक पर प्रशिक्षित किया गया था, न कि सिंथेटिक डेटा पर। दूसरा, इसने एक कॉन्फिडेंस स्कोर लौटाया जिसकी सीमा राउटर तय कर सकता है - 0.91 कॉन्फिडेंस से नीचे की कोई भी चीज़ स्वचालित रूप से बड़े मॉडल में आ जाती है।
तीसरा, हमने इसे मौजूदा पाइपलाइन के विरुद्ध छह सप्ताह के लिए छाया-तैनात किया, बड़े मॉडल के साथ जमीनी सच्चाई प्रदान की, इससे पहले कि कोई भी ट्रैफ़िक वास्तव में छोटे मॉडलों पर भेजा जाए।
छाया परिनियोजन में गलतियों के चार वर्ग पाए गए जो ऑफ़लाइन परीक्षण सेट में छूट गए थे। प्रशिक्षण डेटा में दो को ठीक करना आसान था। दो आवश्यक जानबूझकर रूटिंग नियम - जो कुछ भी पहचान सत्यापन, भुगतान, या नियुक्ति रद्दीकरण को छूता है वह हमेशा क्लासिफायर आत्मविश्वास की परवाह किए बिना बड़े मॉडल पर जाता है, क्योंकि उन पथों पर मतिभ्रम की लागत विलंबता जीत से अधिक है।
समस्या का टीटीएस पक्ष
जब एलएलएम और एसटीटी परिवर्तनों की समीक्षा चल रही थी, एक समानांतर टीम स्पीच आउटपुट पर काम कर रही थी। अंग्रेजी पर 50 एमएस टीटीएस प्रथम-ऑडियो प्रभावी रूप से अपराजेय था; अधिकांश गैर-अंग्रेजी भाषाओं पर 70ms-90ms का अंतर छोटे आवाज मॉडल, कम आक्रामक कैशिंग और एकल साझा GPU पूल द्वारा संचालित था जो लोड के तहत अंग्रेजी को प्राथमिकता देता था।
हमने टीटीएस बुनियादी ढांचे को भाषा-पिन किए गए पूलों में विभाजित किया है। मंदारिन टीटीएस अब अपने स्वयं के स्केलिंग नियमों के साथ, अपने स्वयं के पूल पर, उन क्षेत्रों के करीब हार्डवेयर पर चलता है जहां से हमारा अधिकांश मंदारिन ट्रैफ़िक उत्पन्न होता है। कटओवर के दो सप्ताह के भीतर विलंबता 70-90 एमएस से घटकर 45 एमएस हो गई।
इनमें से कोई भी चतुराई नहीं थी; यह बुनियादी ढाँचा का काम था जिसे करने की किसी ने जहमत नहीं उठाई क्योंकि किसी एक भाषा में मामूली सुधार, अलग से, इसे उचित नहीं ठहरा सका।
सबक - और अब हम इसे आंतरिक रूप से लिख रहे हैं - यह है कि "हमने इसमें निवेश नहीं किया क्योंकि किसी भी उपयोगकर्ता-सामना वाले मीट्रिक ने इसे उचित नहीं ठहराया" बिल्कुल उसी तरह का निर्णय है जो चार वर्षों में दो भाषाओं के बीच 280ms के अंतर को जोड़ता है।
समता मापना, औसत नहीं
एक छोटा लेकिन परिणामी परिवर्तन जो हमने आंतरिक रूप से किया वह टीम की विलंबता डैशबोर्ड रिपोर्ट के तरीके में था। हम एक एसएलओ के मुकाबले सभी भाषाओं में औसत रूप से एंड-टू-एंड विलंबता के पी50 और पी95 को ट्रैक करते थे। डैशबोर्ड अधिकांश समय हरा दिखता था।
नया डैशबोर्ड p50 और p95 रिपोर्ट करता है प्रति भाषा ए के खिलाफ समता एसएलओ - सबसे धीमी और सबसे तेज़ समर्थित भाषा के बीच के अंतर का अपना बजट होता है, जिसे अलग से लागू किया जाता है। हमने समता बजट 60ms पर निर्धारित किया है। जब अंतर बजट से अधिक हो जाता है, तो ऑन-कॉल पृष्ठांकित हो जाता है।
समता डैशबोर्ड कुछ ऐसा करता है जो औसत-आधारित नहीं कर सकता है: यह सबसे धीमी भाषा में प्रतिगमन को उसी तात्कालिकता में दृश्यमान बनाता है जैसे सबसे तेज़ भाषा में प्रतिगमन। जब आप 32 भाषाओं में औसत रखते हैं, तो वियतनामी में 200 एमएस प्रतिगमन औसत को 6 एमएस तक बढ़ा देता है। जब आप समता मापते हैं, तो यह डैशबोर्ड को 200ms तक ले जाता है।
जो अभी भी धीमा है
रूटिंग कार्य, टीटीएस पूल और समता डैशबोर्ड के बाद, हमारी सबसे खराब भाषा (कैंटोनीज़, मुख्य रूप से क्योंकि सहायक ध्वनिक-मॉडल कॉर्पस छोटा है) 320ms पर बैठती है। अंग्रेजी 220ms पर है. शेष 100ms का अंतर वास्तविक है और हम मोटे तौर पर जानते हैं कि यह कहां रहता है - कैंटोनीज़ एसटीटी ध्वनिक मॉडल पुराना है और अभी तक नई वास्तुकला पर नहीं है, और हम इसे Q3 में फिर से प्रशिक्षित करेंगे।
लेकिन "सबसे धीमी भाषा सबसे तेज़ से 100ms पीछे है" यह "सबसे धीमी भाषा सबसे तेज़ से 280ms पीछे है" से अलग बातचीत है। पूर्व योजनाबद्ध त्रैमासिक निर्धारण के साथ एक ज्ञात प्रतिगमन है। उत्तरार्द्ध एक ग्राहक-अनुभव आपातकाल था जिसे हम नहीं जानते थे कि हमारे पास था।
अगली बार हम क्या अलग करेंगे
प्राथमिकता क्रम में तीन चीजें, अगर हम अभी जो जानते हैं उसके साथ विलंबता स्टैक को खरोंच से पुनर्निर्माण कर रहे थे।
- पहले क्लासिफायर-राउटर बनाएं, फिर मॉडल। रूटिंग परत उच्चतम-लीवरेज वाला हिस्सा बन गई। इसे "यदि हमें इसकी आवश्यकता होगी तो हम इसे बाद में जोड़ देंगे" के रूप में मानने का अर्थ यह हुआ कि हम आवश्यकता से अधिक 18 महीने तक एकल-मॉडल विलंबता के साथ रहे।
- भाषा एसएलओ से पहले समता एसएलओ सेट करें। प्रलोभन प्रति भाषा लक्ष्य निर्धारित करने और समानता को उभरने देने का है। समता नहीं उभरती; यह टीम की प्राथमिक भाषा की दिशा में, धीरे-धीरे मुड़ता है।
- प्रत्येक भाषा के बुनियादी ढांचे को ऐसे संसाधन करें जैसे कि प्रत्येक भाषा एक अलग उत्पाद हो। मंदारिन टीटीएस पहले दिन से ही अपने स्वयं के जीपीयू पूल का हकदार था, न कि उस दिन से जब हमने विलंबता अंतर को मापा था।
इनमें से कोई भी नया शोध नहीं है। इसमें किसी भी कागज़ की आवश्यकता नहीं थी। इसमें विलंबता समता को उत्पाद प्रतिबद्धता के रूप में मानने की आवश्यकता थी, फिर प्रतिबद्धता को समर्थन देने के लिए गैर-ग्लैमरस बुनियादी ढांचे को वित्त पोषित करना आवश्यक था। हमारे पास वह समता है जिसकी हमें अब आवश्यकता है। चार साल तक यह हमारे पास नहीं था.