"ब्लैक मिरर" में एक श्रृंखला (S2E1) थी, जिसमें उन्होंने प्रशिक्षण के लिए सामाजिक नेटवर्क पर पत्राचार के इतिहास का उपयोग करते हुए मृत लोगों के समान रोबोट बनाए थे। मैं आपको बताना चाहता हूं कि कैसे मैंने कुछ ऐसा ही करने की कोशिश की और क्या हुआ। कोई सिद्धांत नहीं होगा, केवल अभ्यास।

यह विचार सरल था - टेलीग्राम से उनकी चैट के इतिहास को लेने के लिए, और उनके आधार पर, seq2seq नेटवर्क को प्रशिक्षित करने के लिए, जो संवाद की शुरुआत में इसके पूरा होने की भविष्यवाणी करने में सक्षम था। ऐसा नेटवर्क तीन मोड में काम कर सकता है:
- बातचीत के इतिहास के आधार पर उपयोगकर्ता वाक्यांश पूरा होने की भविष्यवाणी करें
- चैटबॉट मोड में काम करें
- संपूर्ण वार्तालाप लॉग को सिंथेसाइज़ करें
मुझे यही मिला है
बॉट वाक्यांश पूर्णता प्रदान करता है

बॉट संवाद की पूर्णता प्रदान करता है

बॉट एक जीवित व्यक्ति के साथ संवाद करता है
User: Bot: User: ? Bot: User: ? Bot: User: ? Bot: User: ? Bot: User: ? Bot:
आगे मैं आपको बताऊंगा कि कैसे डेटा तैयार करें और इस तरह के बॉट को खुद प्रशिक्षित करें।
खुद को कैसे सिखाएं
डेटा की तैयारी
सबसे पहले, आपको बहुत सारी चैट करने की आवश्यकता है। मैंने टेलीग्राम में अपने सभी पत्राचार किए, क्योंकि डेस्कटॉप के लिए क्लाइंट JSON प्रारूप में पूर्ण संग्रह डाउनलोड करने की अनुमति देता है। फिर मैंने उन सभी संदेशों को फेंक दिया, जिनमें उद्धरण, लिंक और फाइलें शामिल हैं, और शेष ग्रंथों को निचले मामले में स्थानांतरित कर दिया और सभी दुर्लभ वर्णों को वहां से निकाल दिया, केवल अक्षरों, संख्याओं और विराम चिह्नों के एक सरल सेट को छोड़कर - यह नेटवर्क को सीखना आसान है।
फिर मैं इस फॉर्म में चैट लाया:
=== > < > < ! === > ? <
यहां, संदेश जो ">" के साथ शुरू होते हैं, मेरे लिए एक प्रश्न है, प्रतीक "<" मेरे अनुसार अपने उत्तर को चिह्नित करता है, और लाइन "===" आपस में संवादों को अलग करने का कार्य करता है। तथ्य यह है कि एक संवाद समाप्त हो गया और दूसरा शुरू हुआ, मैंने समय निर्धारित किया (यदि संदेशों के बीच 15 मिनट से अधिक समय बीत गया, तो हमें लगता है कि यह एक नई बातचीत है। आप कहानी को गीथब में परिवर्तित करने के लिए स्क्रिप्ट देख सकते हैं ।
चूंकि मैं लंबे समय से सक्रिय रूप से टेलीग्राम का उपयोग कर रहा हूं, इसलिए अंत में बहुत सारे संदेश थे - अंतिम फ़ाइल में 443 हजार लाइनें थीं।
मॉडल चयन
मैंने वादा किया था कि आज कोई सिद्धांत नहीं होगा, इसलिए मैं अपनी उंगलियों पर यथासंभव संक्षेप में समझाने की कोशिश करूंगा।
मैंने GRU पर आधारित क्लासिक seq2seq को चुना। इस तरह के एक इनपुट मॉडल को पत्र द्वारा पाठ पत्र प्राप्त होता है और एक बार में एक पत्र भी आउटपुट करता है। सीखने की प्रक्रिया इस तथ्य पर आधारित है कि हम पाठ के अंतिम अक्षर की भविष्यवाणी करने के लिए नेटवर्क सिखाते हैं, उदाहरण के लिए, हम इनपुट को "लीड" देते हैं और आउटपुट होने के लिए "कीलक" की प्रतीक्षा करते हैं।
लंबे ग्रंथों को उत्पन्न करने के लिए, एक सरल चाल का उपयोग किया जाता है - पिछले भविष्यवाणी का परिणाम नेटवर्क पर वापस भेजा जाता है और इसी तरह जब तक पाठ की आवश्यक लंबाई उत्पन्न नहीं होती है।
जीआरयू मॉड्यूल को "स्मृति और ध्यान के साथ चालाक पेसेप्ट्रॉन" के रूप में बहुत सरल किया जा सकता है, उनके बारे में अधिक विवरण पाया जा सकता है, उदाहरण के लिए, यहां ।
शेक्सपियर के ग्रंथों के निर्माण के कार्य का एक प्रसिद्ध उदाहरण मॉडल के आधार के रूप में चुना गया था।
ट्रेनिंग
कोई भी जो कभी भी तंत्रिका नेटवर्क में आया है, शायद यह जानता है कि सीपीयू पर उन्हें सीखना बहुत उबाऊ है। सौभाग्य से, Google उनकी कोलाब सेवा के साथ बचाव में आता है - इसमें आप एक सीपीयू, जीपीयू और यहां तक कि टीपीयू का उपयोग करके मुफ्त में ज्यूपिटर नोटबुक में अपना कोड चला सकते हैं। मेरे मामले में, वीडियो कार्ड पर प्रशिक्षण 30 मिनट में फिट बैठता है, हालांकि 10. के बाद समझदार परिणाम उपलब्ध हैं। मुख्य बात यह है कि हार्डवेयर के प्रकार (रनटाइम मेनू में -> रनटाइम प्रकार बदलें) को याद रखना है।
परीक्षण
प्रशिक्षण के बाद, आप मॉडल सत्यापन के लिए आगे बढ़ सकते हैं - मैंने कई उदाहरण लिखे जो आपको मॉडल को अलग-अलग मोड में उपयोग करने की अनुमति देते हैं - पाठ पीढ़ी से लाइव चैट तक। ये सभी गितुब पर हैं ।
पाठ उत्पन्न करने की विधि में एक तापमान पैरामीटर है - जितना अधिक होगा, उतना ही विविध पाठ (और अर्थहीन) एक बॉट का उत्पादन करेगा। यह पैरामीटर किसी विशिष्ट कार्य के लिए हाथों को कॉन्फ़िगर करने के लिए समझ में आता है।
आगे उपयोग करें
ऐसे नेटवर्क का उपयोग क्यों किया जा सकता है? सबसे स्पष्ट बात एक बॉट (या स्मार्ट कीबोर्ड) विकसित करना है जो उपयोगकर्ता के तैयार किए गए उत्तरों को उनके लिखने से पहले ही दे सकता है। जीमेल और अधिकांश कीबोर्ड में एक समान विशेषता लंबे समय से मौजूद है, लेकिन यह बातचीत के संदर्भ और किसी विशेष उपयोगकर्ता द्वारा पत्राचार करने के तरीके को ध्यान में नहीं रखता है। कहो, जी-कीबोर्ड मुझे पूरी तरह से अर्थहीन विकल्प प्रदान करता है, उदाहरण के लिए, "मैं जा रहा हूं ... सम्मान" उस स्थान पर जहां मैं "मैं डाचा से जा रहा हूं" विकल्प प्राप्त करना चाहता हूं, जिसे मैंने कई बार इस्तेमाल किया है।
क्या चैट बॉट का भविष्य है? अपने शुद्ध रूप में, यह निश्चित रूप से नहीं है, इसमें बहुत अधिक व्यक्तिगत डेटा है, किसी को नहीं पता कि यह किस बिंदु पर वार्ताकार को आपके क्रेडिट कार्ड की संख्या देगा जो आपने एक बार किसी दोस्त को फेंक दिया था। इसके अलावा, इस तरह के बॉट को बिल्कुल भी ट्यून नहीं किया जाता है, किसी भी विशिष्ट कार्य को करने के लिए इसे प्राप्त करना बहुत मुश्किल है या किसी विशिष्ट प्रश्न का सही उत्तर देना है। बल्कि, इस तरह की चैटबॉट अन्य प्रकार के बॉट्स के साथ मिलकर काम कर सकती है, जिससे "कुछ भी नहीं" के बारे में अधिक जुड़ा हुआ संवाद प्रदान होता है - यह इसके साथ अच्छी तरह से मुकाबला करता है। (और अभी तक, उनकी पत्नी के व्यक्ति में एक बाहरी विशेषज्ञ ने कहा कि बॉट की संचार शैली मेरे लिए बहुत समान है। और वे जिन विषयों की परवाह करते हैं, वे स्पष्ट रूप से एक ही हैं - बग, फिक्स, कमिट, और डेवलपर के अन्य खुशियाँ और दुख ग्रंथों में पॉप अप होते हैं)।
यदि यह विषय आपके लिए दिलचस्प है, तो आपको और प्रयास करने की क्या सलाह है?
- स्थानांतरण सीखने (अन्य लोगों के संवादों के एक बड़े शरीर पर प्रशिक्षित करने के लिए, और फिर अपने दम पर समाप्त)
- परिवर्तन मॉडल - वृद्धि, परिवर्तन प्रकार (उदाहरण के लिए, LSTM पर)।
- टीपीयू के साथ काम करने की कोशिश करें। अपने शुद्ध रूप में, यह मॉडल काम नहीं करेगा, लेकिन इसे अनुकूलित किया जा सकता है। सीखने का सैद्धांतिक त्वरण दस गुना होना चाहिए।
- एक मोबाइल प्लेटफ़ॉर्म पर पोर्ट, उदाहरण के लिए टेन्सरफ़्लो मोबाइल का उपयोग करना।
पीएस लिंक जीथुब के लिए