आपके पास एक डेटासेट है:
- चित्र I1, I2, ...
- जमीनी सच्चाई ग्रंथों टी 1, टी 2, ... छवियों के लिए I1, I2, ...
ताकि आपका डेटासेट कुछ ऐसा दिख सके:
एक न्यूरल नेटवर्क (एनएन) छवि के प्रत्येक संभव क्षैतिज स्थिति (अक्सर साहित्य में टाइम-स्टेप टी कहा जाता है) के लिए एक स्कोर का उत्पादन करता है । यह चौड़ाई 2 (t0, t1) और 2 संभावित वर्णों ("ए", "बी") के साथ एक छवि के लिए कुछ इस तरह दिखता है:
| t0 | t1
--+-----+----
a | 0.1 | 0.6
b | 0.9 | 0.4
इस तरह के एनएन को प्रशिक्षित करने के लिए, आपको प्रत्येक छवि के लिए निर्दिष्ट करना होगा जहां छवि में जमीनी सच्चाई का एक चरित्र तैनात है। एक उदाहरण के रूप में, "हैलो" पाठ वाले चित्र के बारे में सोचें। अब आपको यह निर्दिष्ट करना होगा कि "H" कहाँ से शुरू और समाप्त होता है (जैसे "H" 10 वें पिक्सेल से शुरू होता है और 25 वें पिक्सेल तक जाता है)। वही "ई", "एल, ... के लिए उबाऊ लगता है और बड़े डेटासेट के लिए एक कठिन काम है।
यहां तक कि अगर आप इस तरह से एक संपूर्ण डेटासेट एनोटेट करने में कामयाब रहे, तो भी एक और समस्या है। NN प्रत्येक समय-चरण में प्रत्येक वर्ण के लिए स्कोर का आउटपुट देता है, मैंने एक खिलौना उदाहरण के लिए ऊपर दी गई तालिका देखें। अब हम समय-कदम पर सबसे अधिक संभावित चरित्र ले सकते हैं, यह खिलौना उदाहरण में "बी" और "ए" है। अब एक बड़े पाठ के बारे में सोचें, उदाहरण के लिए "हैलो"। यदि लेखक की लेखन शैली है जो क्षैतिज स्थिति में बहुत अधिक स्थान का उपयोग करती है, तो प्रत्येक चरित्र कई समय-चरणों पर कब्जा कर लेगा। प्रति समय-चरण में सबसे संभावित चरित्र लेते हुए, यह हमें "HHHHHHHHeeeellllllllloooo" जैसा एक पाठ दे सकता है। हमें इस पाठ को सही आउटपुट में कैसे बदलना चाहिए? प्रत्येक डुप्लिकेट वर्ण निकालें? यह "हेलो" देता है, जो सही नहीं है। इसलिए, हमें कुछ चतुर पोस्टप्रोसेसिंग की आवश्यकता होगी।
सीटीसी दोनों समस्याओं का हल:
- आप सीटीसी लॉस का उपयोग करके किसी वर्ण को किस स्थिति में निर्दिष्ट करते हैं बिना जोड़े (I, T) से नेटवर्क को प्रशिक्षित कर सकते हैं
- आपको आउटपुट पोस्टप्रोसेस करने की आवश्यकता नहीं है, क्योंकि CTC डिकोडर NN आउटपुट को अंतिम टेक्स्ट में बदल देता है
यह कैसे प्राप्त किया जाता है?
- एक विशेष चरित्र (CTC- रिक्त, इस पाठ में "-" के रूप में दर्शाया गया है) यह दर्शाने के लिए कि कोई वर्ण किसी निश्चित समय-चरण पर दिखाई नहीं देता है
- CTC-blanks सम्मिलित करके और सभी संभव तरीकों से वर्णों को दोहराकर जमीनी सच्चाई के पाठ को T 'में बदलें
- हम छवि को जानते हैं, हम पाठ को जानते हैं, लेकिन हम यह नहीं जानते कि पाठ कहाँ स्थित है। तो, सिर्फ कोशिश करते हैं सभी पाठ "हाय ----" "हाय ---", "--Hi--" के संभावित स्थिति, ...
- हम यह भी नहीं जानते कि प्रत्येक वर्ण चित्र में कितना स्थान रखता है। तो चलिए "HHi ----", "HHHi ---", "HHHH----", ... जैसे पात्रों को दोहराने की अनुमति देकर सभी संभव संरेखण का प्रयास करें।
- क्या आपको यहाँ कोई समस्या दिखाई देती है? बेशक, अगर हम किसी चरित्र को कई बार दोहराने की अनुमति देते हैं, तो हम "हैलो" जैसे "डुप्लीकेट" जैसे वास्तविक डुप्लिकेट पात्रों को कैसे संभालते हैं ? ठीक है, बस हमेशा इन स्थितियों के बीच में एक रिक्त डालें, जैसे कि "हेल-लो" या "हीलेल ------- लॉ"
- प्रत्येक संभव T 'के लिए स्कोर की गणना करें (जो कि प्रत्येक परिवर्तन और इनमें से प्रत्येक संयोजन के लिए है), सभी अंकों पर योग करें जो कि जोड़ी के लिए नुकसान देता है (I, T)
- डिकोडिंग आसान है: प्रत्येक समय के कदम के लिए उच्चतम स्कोर के साथ चरित्र चुनें, जैसे "HHHHH-eeeellll-lll - oo ---", डुप्लिकेट वर्ण "H-el-lo" को फेंक दें, खाली "हेलो" को फेंक दें, और हम कार्य पूर्ण।
इसे समझने के लिए, निम्नलिखित छवि पर एक नज़र डालें। यह भाषण मान्यता के संदर्भ में है, हालांकि, पाठ मान्यता केवल एक ही है। डिकोडिंग दोनों वक्ताओं के लिए एक ही पाठ का उत्पादन करती है, भले ही संरेखण और चरित्र की स्थिति भिन्न हो।
आगे की पढाई: