मेरे पास दस साल से iPhone है और मुझे यह बहुत पसंद है। कुछ लोगों के विपरीत, मुझे Siri बहुत पसंद है और मैं इसे अक्सर इस्तेमाल करता हूँ। लेकिन दस साल बाद भी, Siri को यह समझ में नहीं आया कि जब वह मेरे टेक्स्ट को ट्रांसक्राइब करता है, तो उसे पता होना चाहिए कि मेरी पत्नी का नाम आरोन नहीं, बल्कि एरिन है। मैं स्पीच-टू-टेक्स्ट कार्यान्वयन को माफ़ करता हूँ, जो संसाधन-गहन है, लेकिन जब मैंने एक बार उस गलती को सुधारा और एक संशोधित टेक्स्ट भेजा, तो उस सुधार को मेरे फ़ोन पर एक सुधार इतिहास में संग्रहीत किया जाना चाहिए था - एक छोटी फ़ाइल जिसका उपयोग पोस्ट-प्रोसेसिंग ट्रांसफ़ॉर्मर मॉडल द्वारा किया जाता है, अन्य सुरागों के साथ, ताकि यह गलती बहुत कम होने की संभावना हो। मुझे पता है कि iPhone की स्पीच टू टेक्स्ट कार्यक्षमता को Siri कहना अतिशयोक्ति है, लेकिन मेरे बच्चे 'मेरे iPhone में AI' के बारे में ऐसा ही सोचते हैं।
स्पीच-टू-टेक्स्ट सिस्टम अक्सर होमोफोन्स से जूझते हैं - ऐसे शब्द जो एक जैसे लगते हैं लेकिन उनकी स्पेलिंग और अर्थ अलग-अलग होते हैं। ये त्रुटियाँ निराशाजनक हो सकती हैं, खासकर जब वे व्यक्तिगत नामों या आम तौर पर इस्तेमाल किए जाने वाले शब्दों को प्रभावित करती हैं। इस समस्या को ठीक करने की कुंजी स्पीच रिकग्निशन इंजन को ओवरहाल करने में नहीं बल्कि एक हल्के, पोस्ट-ट्रांसक्रिप्शन टेक्स्ट प्रोसेसिंग लेयर में है जो समय के साथ उपयोगकर्ता सुधारों के अनुकूल हो जाती है। यहाँ PyTorch-आधारित कोड है जिसे मैंने इसे संबोधित करने के लिए डिज़ाइन किया है।
यह मोबाइल के लिए संकलित करने के बाद फ़ोन पर तैनात करने के लिए बहुत ही कॉम्पैक्ट और आसान है। मुझे पता है कि सिरी के पीछे चेन मॉडल का एक अत्यधिक जटिल सेट है, इसलिए इस कोड का उपयोग केवल उन मॉडलों को इनपुट के रूप में एक नई सुविधा प्रदान करने के लिए किया जा सकता है, एक स्कोर जो विशेष होमोफ़ोन उत्पन्न होने पर प्रतिलेखन को वैयक्तिकृत करने में मदद करता है। लेकिन इसे पोस्ट प्रोसेसिंग लेयर के रूप में उपयोग करना आसान होगा।
इसके लिए किसी नए फोन के रिलीज़ होने का इंतज़ार नहीं करना पड़ता। यह मेरे iPhone के लिए Apple द्वारा जारी किए जाने वाले अगले अपडेट में मेरे लिए जीवन को बेहतर बना देगा।
सिस्टम इन तीन कारकों के आधार पर प्रत्येक होमोफ़ोन उम्मीदवार के लिए संभावना स्कोर की गणना करता है और सबसे संभावित सुधार का चयन करता है। नीचे पायथन कार्यान्वयन को स्पष्टीकरण के साथ खंडों में विभाजित किया गया है।
पहला कदम होमोफोन्स का डेटाबेस बनाना या लोड करना है। ये शब्द जोड़े (या समूह) हैं जो ट्रांस्क्रिप्शन के दौरान भ्रमित होने की संभावना है।
# Homophones database homophones_db = { "Aaron": ["Erin"], "bare": ["bear"], "phase": ["faze"], "affect": ["effect"], }
यह एक सरल शब्दकोश है जहाँ कुंजी गलत तरीके से लिखे गए शब्द है, और मान होमोफ़ोन विकल्पों की एक सूची है। उदाहरण के लिए, "phase" को "faze" के साथ भ्रमित किया जा सकता है। बाद में, जब कोई अस्पष्ट शब्द सामने आता है, तो इस डेटाबेस से पूछताछ की जाएगी।
यह कोड शब्दकोश में उपयोगकर्ता के सुधारों को ट्रैक करता है, जहां प्रत्येक कुंजी (original_word, corrected_word) का एक टपल है और मान वह संख्या है, जितनी बार उपयोगकर्ता ने उस त्रुटि को सुधारा।
# Correction history tracker correction_history = { ("phase", "Faye's"): 3, ("bear", "bare"): 2, }
यदि उपयोगकर्ता "phase" को "Faye's" में तीन बार सुधारता है, तो सिस्टम भविष्य में प्रतिलेखन के लिए इस सुधार को प्राथमिकता देता है।
होमोफ़ोन चयन को प्रभावित करने वाला एक और कारक यह है कि किसी विशेष शब्द का कितनी बार उपयोग किया जाता है। यह व्यक्तिगत नाम या शब्द हो सकते हैं जिन्हें उपयोगकर्ता अक्सर टाइप करता है।
# Frequent contact tracker frequent_contacts = { "faye": 15, "phase": 5, "erin": 10, "aaron": 2, }
होमोफोन्स को स्पष्ट करते समय यह सिस्टम अक्सर इस्तेमाल किए जाने वाले शब्दों को ज़्यादा महत्व देता है। उदाहरण के लिए, अगर "faye" 15 बार आता है लेकिन "phase" सिर्फ़ 5 बार आता है, तो "faye" को प्राथमिकता दी जाएगी।
चयन को और अधिक परिष्कृत करने के लिए आस-पास के वाक्य से संदर्भ सुराग निकाले जाते हैं। उदाहरण के लिए, यदि वाक्य में सर्वनाम "वह" है, तो सिस्टम "आरोन" की तुलना में "एरिन" को प्राथमिकता दे सकता है। ट्रांसफॉर्मर आयात पाइपलाइन से
from transformers import pipeline # Load an NLP model for context analysis context_analyzer = pipeline("fill-mask", model="bert-base-uncased") def detect_context(sentence): """Detect context-specific clues in the sentence.""" pronouns = ["he", "she", "his", "her", "their"] tokens = sentence.lower().split() return [word for word in tokens if word in pronouns]
यह फ़ंक्शन वाक्य में लिंग-विशिष्ट सर्वनामों या अन्य संकेतों को स्कैन करता है जो शब्द के इच्छित अर्थ को इंगित कर सकते हैं।
प्रत्येक होमोफोन उम्मीदवार को निम्नलिखित के आधार पर एक संभावना स्कोर दिया जाता है:
def calculate_likelihood(word, candidate, sentence): """Calculate a likelihood score for a homophone candidate.""" correction_score = correction_history.get((word, candidate), 0) * 3 frequency_score = frequent_contacts.get(candidate, 0) * 2 context = detect_context(sentence) context_clues = homophones_db.get(candidate, []) context_score = sum(1 for clue in context if clue in context_clues) return correction_score + frequency_score + context_score
यह स्कोर तीन कारकों को मिलाकर सबसे संभावित होमोफोन का निर्धारण करता है।
संभावना स्कोर की गणना के बाद, सिस्टम उच्चतम स्कोर वाले होमोफोन का चयन करता है।
def prioritize_homophones(word, candidates, sentence): """Prioritize homophones based on their likelihood scores.""" likelihoods = { candidate: calculate_likelihood(word, candidate, sentence) for candidate in candidates } return max(likelihoods, key=likelihoods.get) def disambiguate_homophone(word, sentence): """Disambiguate homophones using likelihood scores.""" candidates = homophones_db.get(word, []) if not candidates: return word return prioritize_homophones(word, candidates, sentence)
यह प्रक्रिया यह सुनिश्चित करती है कि इतिहास, आवृत्ति और संदर्भ के आधार पर सबसे उपयुक्त शब्द चुना जाए।
यह प्रणाली पूरे वाक्य को संसाधित करती है, तथा प्रत्येक शब्द पर अस्पष्टीकरण तर्क लागू करती है।
def process_transcription(transcription): """Process the transcription to correct homophones.""" words = transcription.split() corrected_words = [disambiguate_homophone(word, transcription) for word in words] return " ".join(corrected_words)
# Example transcription and correction raw_transcription = "This is phase one plan." corrected_transcription = process_transcription(raw_transcription) print("Original Transcription:", raw_transcription) print("Corrected Transcription:", corrected_transcription) # Simulate user feedback update_correction_history("phase", "faye") print("Updated Correction History:", correction_history) print("Updated Frequent Contacts:", frequent_contacts)
जब उपयोगकर्ता कोई गलती सुधारता है, तो भविष्य की भविष्यवाणियों को बेहतर बनाने के लिए सुधार इतिहास और लगातार संपर्कों को अपडेट किया जाता है।
def update_correction_history(original, corrected): """Update correction history and frequent contacts.""" correction_history[(original, corrected)] = correction_history.get((original, corrected), 0) + 1 frequent_contacts[corrected] = frequent_contacts.get(corrected, 0) + 1 frequent_contacts[original] = max(0, frequent_contacts.get(original, 0) - 1)
Original Transcription: This is phase one plan. Corrected Transcription: This is Faye's one plan. Updated Correction History: {('phase', 'Faye's'): 4} Updated Frequent Contacts: {'Faye's': 16, 'phase': 4}
यह हल्का टेक्स्ट-प्रोसेसिंग लेयर उपयोगकर्ता सुधारों से सीखकर, लगातार उपयोग का लाभ उठाकर और संदर्भ का विश्लेषण करके स्पीच-टू-टेक्स्ट एप्लिकेशन की सटीकता को बढ़ाता है। यह मोबाइल डिवाइस पर चलने के लिए पर्याप्त कॉम्पैक्ट है और व्यक्तिगत उपयोगकर्ता की जरूरतों के अनुकूल है, जो पारंपरिक स्थिर मॉडल के लिए एक बेहतर विकल्प प्रदान करता है। न्यूनतम प्रयास के साथ, Apple—या कोई भी अन्य कंपनी—इस कार्यक्षमता को एकीकृत करके Siri जैसे वर्चुअल असिस्टेंट को अधिक प्रतिक्रियाशील और वैयक्तिकृत बना सकती है।