सर्वर रहित अभिगम्यता को सशक्त बनाता है: अमेज़ॅन पोली के साथ टेक्स्ट को स्पीच में बदलें

May 08 2023
हम तकनीकी प्रगति और हमारे जीवन के हर पहलू को बदलने वाले नवाचारों के एक अविश्वसनीय युग में रहते हैं। आर्टिफिशियल इंटेलिजेंस और मशीन लर्निंग से लेकर ऑटोमेशन और बिग डेटा तक, इस बात से कोई इंकार नहीं है कि भविष्य यहां है।
बादल पर बैठा दाल-ए तोता गाना गाते हुए किताब पढ़ रहा है

हम तकनीकी प्रगति और हमारे जीवन के हर पहलू को बदलने वाले नवाचारों के एक अविश्वसनीय युग में रहते हैं। आर्टिफिशियल इंटेलिजेंस और मशीन लर्निंग से लेकर ऑटोमेशन और बिग डेटा तक, इस बात से कोई इंकार नहीं है कि भविष्य यहां है।

उदाहरण के लिए, इस ब्लॉग पोस्ट का शीर्षक इसे SEO ऑप्टिमाइज़ करने के लिए ChatGPT की मदद से लिखा गया था। तोते की छवि DALL-E की मदद से बनाई गई थी।

उस ऑडियो प्लेयर के बारे में क्या है जो आपके लिए यह पाठ पढ़ता है? खैर, यह पता चला है कि यह स्वचालित भी हो सकता है।

और आज हम इसी पर चर्चा करेंगे, अमेज़न पोली की मदद से टेक्स्ट-टू-स्पीच (टीटीएस) रूपांतरण को स्वचालित करना।

मैं GitHub पर Python कोड और AWS CDK के साथ पूरी तरह से काम करने वाला सर्वर रहित समाधान प्रदान करूंगा। आप कोड को तैनात कर सकते हैं और मिनटों में टेक्स्ट-टू-स्पीच परिवर्तन का आनंद ले सकते हैं।

GitHub प्रोजेक्ट पर जाने के लिए यहां क्लिक करें ।

https://www.ranthebuilder.cloud/

यह ब्लॉग पोस्ट मूल रूप से मेरी वेबसाइट "रान द बिल्डर" पर प्रकाशित हुई थी।

अभिगम्यता महत्वपूर्ण है

मैंने दुनिया के साथ अपने AWS और सर्वर रहित ज्ञान को साझा करने के लिए अपनी वेबसाइट RanTheBuilder की शुरुआत की। एक सुलभ वेबसाइट समावेशिता को बढ़ावा देती है और यह सुनिश्चित करती है कि सभी लोग सामग्री तक पहुंच सकें और उसके साथ जुड़ सकें। अभिगम्यता ने हाल के वर्षों में मुख्य मंच ले लिया है और अधिक वेबसाइटें इस पर ध्यान देती हैं।

मैंने हाल ही में देखा कि मीडियम ने ब्लॉग पोस्ट के लिए एक ऑडियो प्लेयर जोड़ा है जो आपके लिए पोस्ट पढ़ता है, जो एक बेहतरीन एक्सेसिबिलिटी फीचर है।

मुझे नहीं पता था कि उन्होंने यह कैसे किया, और यह पहुंच से बाहर लग रहा था।

हालाँकि, जब मैंने YouTube पर निम्न वीडियो देखा तो मुझे तुरंत कार्रवाई करने की प्रेरणा मिली:

वीडियो में, AWS कम्युनिटी बिल्डर जोहान्स कोच एक साथी बिल्डर , जिमी डाहलकविस्ट का साक्षात्कार लेते हैं । वे चर्चा करते हैं कि कैसे जिमी ने एडब्ल्यूएस स्टेप फंक्शंस के साथ अपने ब्लॉग निर्माण को स्वचालित किया, जिसके परिणामस्वरूप अमेज़ॅन पोली के साथ पोस्ट टेक्स्ट का भाषण संस्करण हुआ।

मैंने अमेज़ॅन पोली के बारे में कभी नहीं सुना है, लेकिन इसे स्वयं आज़माने के लिए प्रेरित महसूस किया और अंत में अपनी वेबसाइट की एक प्रमुख अनुपलब्धता सुविधा को हल किया।

मैंने एक सीधा समाधान तैयार किया है जो मेरी ज़रूरतों को पूरी तरह से ध्यान में रखता है, जो अपेक्षाकृत मामूली हैं।

इससे पहले कि हम विवरण दें, आइए Amazon Poly के बारे में जानें।

अमेज़न पोली टेक्स्ट टू स्पीच सर्विस इंट्रोडक्शन

अमेज़ॅन पोली क्लाउड-आधारित टेक्स्ट-टू-स्पीच (टीटीएस) सेवा है। यह लिखित पाठ को सजीव भाषण में बदलने के लिए उन्नत गहन शिक्षण तकनीकों का उपयोग करता है, जिससे डेवलपर्स को प्राकृतिक-ध्वनि वाले भाषण-सक्षम एप्लिकेशन बनाने की अनुमति मिलती है।

पोली भाषाओं की एक विस्तृत श्रृंखला (लेखन के समय 24) का समर्थन करता है, और उपयोगकर्ता विभिन्न लहजे और टोन (कुल 47) के साथ कई पुरुष और महिला आवाजों में से चुन सकते हैं। सेवा स्वचालित भाषण पहचान (एएसआर) और भाषण संश्लेषण मार्कअप भाषा (एसएसएमएल) जैसी उन्नत सुविधाएं भी प्रदान करती है, जिससे डेवलपर्स भाषण आउटपुट के उच्चारण, जोर और स्वर को ठीक करने में सक्षम होते हैं।

अमेज़ॅन पोली की सबसे मजबूत किलों में से एक यह है कि यह एक सर्वर रहित सेवा है। यह ऑडियो फाइलों को सीधे S3 बकेट पर आउटपुट करेगा, जिससे किसी भी इवेंट-संचालित आधारित आर्किटेक्चर में शामिल करना आसान हो जाएगा। यह आपके द्वारा फेंके गए किसी भी पाठ आकार को स्वचालित रूप से संभाल लेगा, आपको अधिक मशीनों को स्पिन करने की आवश्यकता नहीं है, और आप केवल उन वर्णों की संख्या के लिए भुगतान करते हैं जिन्हें आप भाषण में बदलते हैं।

मेरे कम समय से इसका उपयोग करते हुए, यह सीधा है; पाठ अंदर जाता है, mp3 फ़ाइल S3 बाल्टी में जाती है।

पाठ अंदर जाता है, भाषण बाहर आता है

फ्री टियर प्रभावशाली है और कई लोगों की जरूरतों को पूरा करेगा, जिसमें मेरी भी शामिल है।

मूल्य निर्धारण के बारे में और पढ़ें ।

आइए देखें कि अमेज़ॅन पोली के एपीआई के साथ टेक्स्ट-टू-स्पीच निर्माण को कैसे स्वचालित किया जाए।

माई टेक्स्ट टू स्पीच पायथन सेवा

आइए सेवा के लक्ष्य, डिजाइन और कार्यान्वयन विवरण पर गौर करें।

लक्ष्य

मैं अपने ब्लॉग पोस्ट की .mp3 फाइल बनाने में सक्षम होना चाहता हूं और नई पोस्ट पर काम करते समय उन्हें अपनी वेबसाइट पर अपलोड करना चाहता हूं। सेवा सर्वर रहित, उपयोग में आसान और AWS CDK के साथ परिनियोजित होनी चाहिए।

मैं चाहता हूं कि उपयोग जितना संभव हो उतना सरल हो:

  • TST (टेक्स्ट-टू-स्पीच) सर्विस 'टेक्स्ट' फ़ोल्डर में एक नई टेक्स्ट फ़ाइल जोड़ें।
  • एडब्ल्यूएस को सेवा तैनात करें।
  • मेरे ईमेल पते पर एक mp3 फ़ाइल प्राप्त करें।

सारांशित करने के लिए: 'टेक्स्ट' फ़ोल्डर में एक टेक्स्ट फ़ाइल जोड़ें, एडब्ल्यूएस में परिनियोजित करें, एक मिनट प्रतीक्षा करें, और अपने इनबॉक्स में एक एमपी3 फ़ाइल प्राप्त करें। सरल!

यदि आप इसे अपने लिए आज़माना चाहते हैं, तो GitHub पर प्रोजेक्ट पर जाएँ और निर्देशों और उपयोग के लिए रीडमी का पालन करें।

हाई लेवल डिज़ाइन

डिजाइन के नजरिए से, सेवा काफी सरल है। आपके पास अपनी क्लाउड स्टोरेज इकाई है जिसका उपयोग इनपुट और इंटरमीडिएट प्रोसेसिंग के लिए किया जाता है।

फिर आपके पास दो प्रमुख खिलाड़ी हैं: निर्माता और उपभोक्ता।

निर्माता टेक्स्ट फ़ाइलों को क्लाउड स्टोरेज पर अपलोड करता है, जो उपभोक्ता को भेजी जाती हैं।

उपभोक्ता टेक्स्ट फाइल को एक एमपी3 फाइल में बदल देगा और इसे अटैचमेंट के रूप में एक ईमेल पते पर ईमेल कर देगा।

हाई लेवल डिज़ाइन

सेवा वास्तुकला

आइए वास्तुकला में देखें और देखें कि मैंने प्रत्येक इकाई को कैसे लागू किया।

अस्वीकरण: यह पीओसी-स्तरीय सेवा मेरी आवश्यकताओं के लिए सरलतम संभव तरीके से स्वचालन प्रदान करती है। कोड योगदान का स्वागत है!

सेवा वास्तुकला

घटना प्रवाह

  1. उपयोगकर्ता प्रोजेक्ट के रूट फ़ोल्डर पर 'टेक्स्ट' फ़ोल्डर में एक नई टेक्स्ट फ़ाइल जोड़ता है।
  2. उपयोगकर्ता एडब्ल्यूएस सीडीके के साथ सेवा को तैनात करता है (कमांड 'मेक डिप्लॉय' का उपयोग कर सकता है)।
  3. फ़ाइल S3 पर अपलोड की गई है।
  4. कंज्यूमर लैम्ब्डा फंक्शन 'ऑब्जेक्ट क्रिएटेड इन S3' इवेंट से ट्रिगर होता है और इवेंट से फाइल का नाम और बकेट नाम पढ़ता है।
  5. कंज्यूमर लैम्ब्डा फंक्शन अमेजन पोली को टेक्स्ट कंटेंट भेजता है और टास्क पूरा होने तक स्लीप/पोल करता है।
  6. एक बार कार्य पूरा हो जाने के बाद, आउटपुट mp3 फ़ाइल S3 बकेट से डाउनलोड की जाती है और इससे हटा दी जाती है। चूंकि हम इसे ईमेल करते हैं, इसलिए इसे S3 पर स्टोर करने की कोई आवश्यकता नहीं है, लेकिन आप इसे अक्षम कर सकते हैं और एमपी3 फ़ाइल के बजाय ऑब्जेक्ट के लिंक को वापस ईमेल कर सकते हैं।
  7. लैम्ब्डा फ़ंक्शन एमपी 3 फ़ाइल को पूर्वनिर्धारित ईमेल पते पर अनुलग्नक के रूप में ईमेल करने के लिए अमेज़ॅन एसईएस का उपयोग करता है।

हम क्लाउड स्टोरेज इकाई के लिए इनपुट और अमेज़ॅन पोली आउटपुट स्टोरेज दोनों के लिए Amazon S3 बकेट का उपयोग करते हैं। पोली का पोली के साथ मूल एकीकरण है, इसलिए यह सही समझ में आता है। बकेट का सीडीके कोड यहां पाया जा सकता है ।

निर्माता एक विशेष AWS CDK निर्माण है जो एक विशिष्ट फ़ोल्डर से S3 में फ़ाइलें अपलोड करता है। मैं आमतौर पर एक समय में एक फ़ाइल जोड़ता हूं और सेवा को तैनात करता हूं। आप बकेट में मैन्युअल रूप से फ़ाइल अपलोड कर सकते हैं, लेकिन यह उद्देश्य को पराजित करता है; हम स्वचालन चाहते हैं। निर्माता का सीडीके कोड यहां पाया जा सकता है ।

उपभोक्ता एक लैम्ब्डा फ़ंक्शन है जो S3 बकेट 'ऑन ऑब्जेक्ट क्रिएट' ईवेंट की सदस्यता लेता है और नई वस्तुओं के लिखे जाने पर ट्रिगर हो जाता है।

समारोह प्रत्येक घटना को ले जाएगा, इसे पढ़ेगा और इसकी सामग्री अमेज़ॅन पोली को भेज देगा। यह 'start_speech_synthesis_task' API का उपयोग करता है । मैंने अमेज़ॅन पोली आधिकारिक नमूना एसडीके आवरण का उपयोग किया , जो पाठ फ़ाइल सामग्री प्राप्त करता है और एमपी 3 फ़ाइल को आउटपुट के रूप में लौटाता है - बहुत सरल!

उपभोक्ता सीडीके कोड यहां पाया जा सकता है ।

और लैम्ब्डा फ़ंक्शन का कोड यहां पाया जा सकता है ।

मेरे कोड में पोली रैपर का उपयोग यहां पाया जा सकता है ।

प्रदर्शन और खुले मुद्दे

मेरे उपयोग के मामले में, एक 11,000 वर्णों के ब्लॉग पोस्ट को मेरे ईमेल पते में एमपी 3 फ़ाइल में बदलने के लिए लगभग 40-50 सेकंड लगते हैं, जब तैनाती हो जाती है। बुरा नहीं है।

आपको आश्चर्य हो सकता है कि मैं S3 से mp3 फाइल को क्यों हटाता हूं और इसे ईमेल अटैचमेंट के रूप में भेजता हूं।

खैर, मैं चाहता हूं कि एमपी 3 फ़ाइल को हटा दिया जाए और ईमेल अटैचमेंट के रूप में भेज दिया जाए क्योंकि मैं इसे अपनी वेबसाइट पर अपलोड करना चाहता हूं, जहां भंडारण के लिए पहले से ही भुगतान किया जाता है, बजाय इसके कि मैं इसे अपने व्यक्तिगत एडब्ल्यूएस देव खाते से चलाऊं।

आप यह भी सोच सकते हैं, अच्छा यह एक अच्छा कार्यान्वयन है, लेकिन, क्या यह इष्टतम है? क्या यह सबसे अच्छा डिज़ाइन विकल्प है?

अच्छा नहीं।

उपभोक्ता लैम्ब्डा फ़ंक्शन प्रतीक्षा करता है और पोली को उसके संश्लेषण कार्य के समाप्त होने तक मतदान करता है, जो प्रदर्शन-वार और लागत-वार दोनों में एक बुरा अभ्यास है। हालाँकि, एक POC प्रोजेक्ट के लिए जो हर दो सप्ताह में एक बार चलता है (जब मैं एक नई पोस्ट प्रकाशित करता हूँ), यह स्वीकार्य है, अभी के लिए, कम से कम।

एक बेहतर उपाय है कि स्टेप फंक्शंस का उपयोग प्रतीक्षा अवस्था के साथ किया जाए। कार्य पूरा होने पर पोली एसएनएस विषय को सूचित कर सकता है; कि SNS एक SQS संदेश को एक संदेश भेज सकता है और फिर एक लैम्ब्डा को जो मेरे ईमेल पर फ़ाइल भेजना जारी रखने के लिए प्रतीक्षा टोकन के साथ स्टेप फ़ंक्शन को जगाएगा।

तो, मैंने स्टेप फंक्शन स्टेट मशीन इम्प्लीमेंटेशन पर लैम्ब्डा फंक्शन क्यों चुना? कुछ कारण:

  1. AWS पोली रैपर ने मुझे जल्दी से आगे बढ़ने की अनुमति दी, और यह सब कुछ एक ही प्रक्रिया में करता है (यह आपके लिए नींद और मतदान करता है), इसलिए लैम्ब्डा फ़ंक्शन स्टेप फ़ंक्शन पर उपयोग करने के लिए सरल है, जो उपयोग करने में सक्षम नहीं होगा एसडीके।
  2. आप लैम्ब्डा फ़ंक्शंस के विपरीत, IDE में स्टेप फ़ंक्शंस को विकसित और डिबग नहीं कर सकते हैं। मैं इस उपयोग के मामले के लिए जितनी जल्दी हो सके मूल्य प्रदान करना चाहता था और जल्दी से परिणाम प्राप्त करना चाहता था।
  3. यह पहुँच प्रदान करने और कुछ नया सीखने के बारे में अधिक है, और सर्वोत्तम संभव उत्पादन-तैयार समाधान बनाने के बारे में कम है।

हाँ बिल्कुल। मैं इसे सेवा के v2 के हिस्से के रूप में करूंगा, लेकिन कोड योगदान का भी स्वागत है!

सुधार का एक अन्य क्षेत्र यह है कि मैं लेक्सिकॉन या सिंथेसिस मार्कअप लैंग्वेज (एसएसएमएल) का उपयोग नहीं कर रहा हूं, जो डेवलपर्स को स्पीच आउटपुट के उच्चारण, जोर और इंटोनेशन को ठीक करने में सक्षम बनाता है। यह गेम चेंजर हो सकता है लेकिन फीचर को समझने और इसे स्वचालित करने के तरीके को समझने के लिए और अधिक शोध की आवश्यकता है।

और अंत में, त्रुटि से निपटने, पुनर्प्रयास और परीक्षण - अभी भी बनाने की आवश्यकता है। मैंने आईडीई में कोड का परीक्षण किया (जिसे जेनरेटेड इवेंट के साथ लैम्ब्डा हैंडलर कहा जाता है) और परिनियोजन समय के दौरान एंड-टू-एंड टेस्ट के रूप में।

सर्वर रहित एप्लिकेशन का परीक्षण कैसे करें, इसके बारे में अधिक जानना चाहते हैं? मेरी पोस्ट यहाँ देखें ।