वर्ड एंबेडिंग ट्यूटोरियल: word2vec का उपयोग गेंसिम (उदाहरण)

विषय - सूची:

Anonim

वर्ड एंबेडिंग क्या है?

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

वर्ड एंबेडिंग को वितरित सिमेंटिक मॉडल या वितरित प्रतिनिधित्व या सिमेंटिक वेक्टर स्पेस या वेक्टर स्पेस मॉडल भी कहा जाता है। जैसा कि आप इन नामों को पढ़ते हैं, आप शब्द शब्दार्थ में आते हैं जिसका अर्थ है समान शब्दों को एक साथ वर्गीकृत करना। उदाहरण के लिए सेब, आम, केला जैसे फलों को पास रखा जाना चाहिए, जबकि किताबें इन शब्दों से बहुत दूर होंगी। व्यापक अर्थों में, शब्द एम्बेडिंग उन फलों के वेक्टर का निर्माण करेगा जो पुस्तकों के वेक्टर प्रतिनिधित्व से बहुत दूर रखा जाएगा।

इस ट्यूटोरियल में, आप सीखेंगे

  • वर्ड एंबेडिंग क्या है?
  • वर्ड एंबेडिंग का उपयोग कहां किया जाता है?
  • शब्द 2vec क्या है?
  • शब्द 2vec क्या करता है?
  • Word2vec क्यों?
  • वर्ड 2vec आर्किटेक्चर
  • शब्दों का निरंतर थैला।
  • स्किप-ग्राम मॉडल
  • Word2vec और NLTK के बीच संबंध
  • एक्टिविस्ट और वर्ड 2 वीईसी
  • जेनसिम क्या है?
  • Gensim का उपयोग करके word2vec का कोड कार्यान्वयन

वर्ड एंबेडिंग का उपयोग कहां किया जाता है?

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

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

    अब हमें शब्द एम्बेडिंग का कुछ ज्ञान मिल गया है। शब्द एम्बेडिंग को लागू करने के लिए विभिन्न मॉडलों पर कुछ प्रकाश भी डाला जाता है। यह पूरा ट्यूटोरियल एक मॉडल (word2vec) पर केंद्रित है।

शब्द 2vec क्या है?

Word2vec बेहतर शब्द प्रतिनिधित्व के लिए शब्द एम्बेड करने की तकनीक / मॉडल है। यह बड़ी संख्या में सटीक वाक्यात्मक और शब्दार्थ शब्द के संबंध को पकड़ता है। यह एक उथला दो-स्तरित तंत्रिका नेटवर्क है। आगे बढ़ने से पहले, कृपया उथले और गहरे तंत्रिका नेटवर्क के बीच अंतर देखें:

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

चित्र: उथला बनाम गहरी शिक्षा

word2vec एक टू-लेयर नेटवर्क है जहाँ इनपुट एक हिडन लेयर और आउटपुट है।

Word2vec को Google पर टॉमस मिकोलोव के नेतृत्व में शोधकर्ता के एक समूह द्वारा विकसित किया गया था। Word2vec बेहतर और अधिक कुशल है कि अव्यक्त अर्थ विश्लेषण मॉडल।

शब्द 2vec क्या करता है?

Word2vec वेक्टर अंतरिक्ष प्रतिनिधित्व में शब्दों का प्रतिनिधित्व करता है। शब्दों को वैक्टर के रूप में दर्शाया जाता है और प्लेसमेंट को इस तरह से किया जाता है कि समान अर्थ वाले शब्द एक साथ दिखाई देते हैं और भिन्न शब्द दूर स्थित होते हैं। इसे शब्दार्थ संबंध भी कहा जाता है। तंत्रिका नेटवर्क पाठ को नहीं समझते हैं क्योंकि वे केवल संख्या को समझते हैं। Word एम्बेडिंग पाठ को संख्यात्मक वेक्टर में बदलने का एक तरीका प्रदान करता है।

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

Word2vec क्यों?

वर्ड एंबेडिंग से पहले

यह जानना महत्वपूर्ण है कि शब्द एम्बेडिंग से पहले किस दृष्टिकोण का उपयोग किया जाता है और इसके अवगुण क्या हैं और फिर हम इस विषय पर आगे बढ़ेंगे कि Word2vec दृष्टिकोण का उपयोग करके शब्द एम्बेडिंग द्वारा कैसे अवगुणों को दूर किया जाता है। अंत में, हम यह बताएंगे कि word2vec कैसे काम करता है क्योंकि यह समझना महत्वपूर्ण है कि यह काम कर रहा है।

अव्यक्त अर्थ विश्लेषण के लिए दृष्टिकोण

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

from sklearn.feature_extraction.text import CountVectorizervectorizer=CountVectorizer()data_corpus=["guru99 is the best sitefor online tutorials. I love to visit guru99."]vocabulary=vectorizer.fit(data_corpus)X= vectorizer.transform(data_corpus)print(X.toarray())print(vocabulary.get_feature_names())

आउटपुट:

[[1 2 1 1 1 1 1 1 1 1]] [u'best', u'guru99', u'is', u'love', u'online', u'sitefor', u'the', u'to', u'tutorials', u'visit']

कोड स्पष्टीकरण

  1. CountVectorizer मॉड्यूल है जो इसमें शब्दों को फिट करने के आधार पर शब्दावली को संग्रहीत करने के लिए उपयोग किया जाता है। यह स्केलेन से आयात किया जाता है
  2. वर्ग CountVectorizer का उपयोग कर वस्तु बनाओ।
  3. उस सूची में डेटा लिखें, जिसे काउंटवेक्टराइज़र में फिट किया जाना है।
  4. डेटा काउंटविटेक्टर से निर्मित ऑब्जेक्ट में फिट है।
  5. शब्दावली का उपयोग करके डेटा में शब्दों की गणना करने के लिए शब्द दृष्टिकोण का एक बैग लागू करें। यदि शब्द या टोकन शब्दावली में उपलब्ध नहीं है, तो ऐसी सूचकांक स्थिति शून्य पर सेट है।
  6. 5 लाइन में चर, जो x है, एक सरणी (x के लिए उपलब्ध विधि) में बदल जाती है। यह पंक्ति 3 में दिए गए वाक्य या सूची में प्रत्येक टोकन की गिनती प्रदान करेगा।
  7. यह उन विशेषताओं को दिखाएगा जो लाइन 4 में डेटा का उपयोग करके फिट होने पर शब्दावली का हिस्सा हैं।

अव्यक्त शब्दार्थ दृष्टिकोण में, पंक्ति अद्वितीय शब्दों का प्रतिनिधित्व करती है जबकि स्तंभ उस समय की संख्या का प्रतिनिधित्व करता है जो शब्द दस्तावेज़ में दिखाई देता है। यह दस्तावेज़ मैट्रिक्स के रूप में शब्दों का प्रतिनिधित्व है। टर्म-फ्रीक्वेंसी इनवर्स डॉक्यूमेंट फ्रीक्वेंसी (TFIDF) का इस्तेमाल डॉक्यूमेंट में शब्दों की फ्रीक्वेंसी को गिनने के लिए किया जाता है जो कि डॉक्यूमेंट में टर्म की फ्रीक्वेंसी / पूरे कॉर्पस में टर्म की फ्रीक्वेंसी होती है।

शब्द विधि के थैले की कमी

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

इन सीमा शब्द को दूर करने के लिए एम्बेडिंग विकसित किया गया था और word2vec इस तरह के कार्यान्वयन के लिए एक दृष्टिकोण है।

Word2vec कैसे काम करता है?

Word2vec अपने आसपास के संदर्भ की भविष्यवाणी करके शब्द सीखता है। उदाहरण के लिए, हम शब्द लेते हैं "वह फुटबॉल से प्यार करता है ।"

हम शब्द के लिए शब्द 2vec की गणना करना चाहते हैं: प्यार करता है।

मान लीजिए

loves = Vin. P(Vout / Vin) is calculatedwhere,Vin is the input word.P is the probability of likelihood.Vout is the output word.

कॉर्पस में प्रत्येक शब्द पर शब्द प्रेम चलता है। वाक्य-रचना के साथ-साथ शब्दों के बीच का शब्दार्थ संबंध भी कूटबद्ध है। यह समान और उपमा शब्दों को खोजने में मदद करता है।

शब्द प्यार करता है के सभी यादृच्छिक सुविधाओं की गणना की जाती है। इन सुविधाओं को पड़ोसी या संदर्भ शब्दों के विषय में वापस प्रचार विधि की मदद से बदला या अद्यतन किया जाता है।

सीखने का दूसरा तरीका यह है कि यदि दो शब्दों के संदर्भ समान हैं या दो शब्दों में समान विशेषताएं हैं, तो ऐसे शब्द संबंधित हैं।

वर्ड 2vec आर्किटेक्चर

शब्द 2vec द्वारा उपयोग किए जाने वाले दो आर्किटेक्चर हैं

  1. शब्दों का निरंतर थैला (CBOW)
  2. चना छोड़ दें

आगे जाने से पहले, आइए चर्चा करें कि ये आर्किटेक्चर या मॉडल शब्द प्रतिनिधित्व के दृष्टिकोण से महत्वपूर्ण क्यों हैं। शब्द सीखने का प्रतिनिधित्व अनिवार्य रूप से अनुपयोगी है, लेकिन मॉडल को प्रशिक्षित करने के लिए लक्ष्य / लेबल की आवश्यकता होती है। मॉडल प्रशिक्षण के लिए पर्यवेक्षित रूप में स्किप-ग्राम और सीबीओडब्ल्यू अनुपलब्ध प्रतिनिधित्व को परिवर्तित करते हैं।

CBOW में, वर्तमान शब्द को आसपास के संदर्भ विंडो की विंडो का उपयोग करके भविष्यवाणी की जाती है। उदाहरण के लिए, यदि w i-1 , w i-2 , w i + 1 , w i + 2 को शब्द या संदर्भ दिए गए हैं, तो यह मॉडल w i प्रदान करेगा

स्किप-ग्राम CBOW के विपरीत प्रदर्शन करता है जिसका अर्थ है कि यह शब्द से दिए गए अनुक्रम या संदर्भ की भविष्यवाणी करता है। आप इसे समझने के लिए उदाहरण को उलट सकते हैं। डब्ल्यू तो मैं दिया जाता है, इस संदर्भ या w का पूर्वानुमान लगाने लगेगा i-1 , डब्ल्यू मैं-2 , w i + 1 , डब्ल्यू मैं + 2।

Word2vec CBOW (शब्दों के निरंतर बैग) और स्किम-ग्राम के बीच चयन करने का विकल्प प्रदान करता है। ऐसे मापदंडों को मॉडल के प्रशिक्षण के दौरान प्रदान किया जाता है। एक में नकारात्मक नमूने या श्रेणीबद्ध सॉफ्टमैक्स परत का उपयोग करने का विकल्प हो सकता है।

शब्दों का निरंतर थैला।

शब्द वास्तुकला के निरंतर बैग को समझने के लिए एक सरल चित्र बनाते हैं।

वर्ड आर्किटेक्चर की चित्रा नित्य थैली

आइए हम गणितीय रूप से समीकरणों की गणना करें। मान लीजिए V शब्दावली का आकार है और N छिपा परत आकार है। इनपुट को {x i-1 , x i-2, x i + 1, x i + 2 } के रूप में परिभाषित किया गया है । हम वी * एन को गुणा करके वजन मैट्रिक्स प्राप्त करते हैं। अन्य मैट्रिक्स को वजन मैट्रिक्स के साथ इनपुट वेक्टर को गुणा करके प्राप्त किया जाता है। इसे निम्नलिखित समीकरण द्वारा भी समझा जा सकता है।

h = xi t W

जहाँ xi t are W क्रमशः इनपुट वेक्टर और वेट मैट्रिक्स हैं,

संदर्भ और अगले शब्द के बीच मैच की गणना करने के लिए, कृपया नीचे दिए गए समीकरण को देखें

यू = पूर्वानुमानित * एच

जहां उपर्युक्त समीकरण में प्रकल्पित विवरण प्राप्त किया गया है।

स्किप-ग्राम मॉडल

स्किप-ग्राम एप्रोच का प्रयोग इनपुट शब्द दिए गए वाक्य की भविष्यवाणी करने के लिए किया जाता है। इसे बेहतर ढंग से समझने के लिए हम आरेख को आकर्षित करते हैं।

चित्रा स्किप-ग्राम मॉडल

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

कौन सा मॉडल चुनना है?

CBOW स्किप चना की तुलना में कई गुना तेज है और लगातार शब्दों के लिए एक बेहतर आवृत्ति प्रदान करता है जबकि स्किप चना को प्रशिक्षण डेटा की थोड़ी मात्रा की आवश्यकता होती है और यहां तक ​​कि दुर्लभ शब्दों या वाक्यांशों का भी प्रतिनिधित्व करता है।

Word2vec और NLTK के बीच संबंध

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

NLTK और Word2vec का उपयोग कहाँ करें?

यदि किसी को कुछ सामान्य प्रयोजन के कार्यों को पूरा करना है, जैसे कि टोकेनाइजेशन, पीओएस टैगिंग और पार्सिंग को एनएलटीके का उपयोग करना चाहिए, जबकि कुछ संदर्भ, विषय मॉडलिंग, या दस्तावेज़ समानता के अनुसार शब्दों की भविष्यवाणी करने के लिए Word2cc का उपयोग करना चाहिए।

कोड की मदद से NLTK और Word2vec का संबंध

NLTK और Word2vec को समान शब्द प्रतिनिधित्व या वाक्यात्मक मिलान खोजने के लिए एक साथ उपयोग किया जा सकता है। NLTK टूलकिट का उपयोग कई पैकेजों को लोड करने के लिए किया जा सकता है जो NLTK के साथ आते हैं और word2vec का उपयोग करके मॉडल बनाया जा सकता है। फिर वास्तविक समय के शब्दों पर इसका परीक्षण किया जा सकता है। हमें निम्नलिखित कोड में दोनों के संयोजन को देखते हैं। आगे की प्रक्रिया करने से पहले, कृपया कॉर्पोरा पर एक नज़र डालें जो NLTK प्रदान करता है। आप कमांड का उपयोग करके डाउनलोड कर सकते हैं

nltk(nltk.download('all'))

चित्रा कॉर्पोरा ने एनएलटीके का उपयोग किया

कृपया कोड के लिए स्क्रीनशॉट देखें।

import nltkimport gensimfrom nltk.corpus import abcmodel= gensim.models.Word2Vec(abc.sents())X= list(model.wv.vocab)data=model.most_similar('science')print(data)

आउटपुट:

[('law', 0.9415997266769409), ('practice', 0.9276568293571472), ('discussion', 0.9259148836135864), ('agriculture', 0.9257254004478455), ('media', 0.9232194423675537), ('policy', 0.922248125076294), ('general', 0.9166069030761719), ('undertaking', 0.916458249092102), ('tight', 0.9129181504249573), ('board', 0.9107444286346436)]

संहिता की व्याख्या

  1. nltk पुस्तकालय आयात किया गया है जहां से आप एबीसी कॉर्पस डाउनलोड कर सकते हैं जिसका उपयोग हम अगले चरण में करेंगे।
  2. जेनसिम आयात किया जाता है। यदि Gensim इंस्टॉल नहीं है, तो कृपया इसे "pip3 install gensim" कमांड का उपयोग करके इंस्टॉल करें। कृपया नीचे स्क्रीनशॉट देखें।

PIP का उपयोग करके Gensim को स्थापित करना चित्रा

  1. कॉर्पस एबीसी आयात करें जो nltk.download ('एबीसी') का उपयोग करके डाउनलोड किया गया है।
  2. मॉडल word2vec को फाइलें पास करें जो कि वाक्य के रूप में Gensim का उपयोग करके आयात किया गया है।
  3. शब्दावली को चर के रूप में संग्रहीत किया जाता है।
  4. नमूना शब्द विज्ञान पर मॉडल का परीक्षण किया जाता है क्योंकि ये फाइलें विज्ञान से संबंधित हैं।
  5. यहां "विज्ञान" के समान शब्द की भविष्यवाणी मॉडल द्वारा की गई है।

एक्टिविस्ट और वर्ड 2 वीईसी

न्यूरॉन की सक्रियता फ़ंक्शन इनपुट के एक सेट को दिए गए उस न्यूरॉन के आउटपुट को परिभाषित करता है। जैविक रूप से हमारे दिमाग में एक गतिविधि से प्रेरित है, जहां विभिन्न उत्तेजनाओं का उपयोग करके विभिन्न न्यूरॉन्स सक्रिय होते हैं। आइए हम निम्नलिखित आरेख के माध्यम से सक्रियण फ़ंक्शन को समझते हैं।

फिगर अंडरस्टैंडिंग एक्टिवेशन फंक्शन

यहाँ X1, x2,… x4 तंत्रिका नेटवर्क का नोड है।

w1, w2, w3 नोड का वजन है,

The सभी वजन और नोड मान का योग है जो सक्रियण फ़ंक्शन के रूप में काम करता है।

सक्रियण कार्य क्यों?

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

कैसे सक्रियण परत की गणना एम्बेडिंग शब्द (word2vec) में की जाती है

सॉफ्टमैक्स लेयर (सामान्यीकृत घातीय फ़ंक्शन) आउटपुट लेयर फ़ंक्शन है जो प्रत्येक नोड को सक्रिय या आग देता है। उपयोग किया जाने वाला एक अन्य दृष्टिकोण पदानुक्रमित सॉफ्टमैक्स है जहां जटिलता की गणना हे (लॉग 2 वी) द्वारा की जाती है जिसमें सॉफ्टमैक्स यह ओ (वी) है जहां वी शब्दावली आकार है। इनके बीच का अंतर पदानुक्रमित सॉफ्टमैक्स परत में जटिलता की कमी है। इसकी (पदानुक्रमित सॉफ्टमैक्स) कार्यक्षमता को समझने के लिए, कृपया नीचे दिए गए उदाहरण को देखें:

चित्रा श्रेणीबद्ध सॉफ्टमैक्स ट्री जैसे संरचना

मान लीजिए कि हम एक निश्चित संदर्भ दिए गए प्रेम शब्द के अवलोकन की संभावना की गणना करना चाहते हैं । रूट से लीफ नोड तक प्रवाह नोड 2 की पहली चाल होगी और फिर नोड 5 तक। इसलिए यदि हमारे पास 8 की शब्दावली का आकार है, तो केवल तीन गणनाओं की आवश्यकता है। तो यह एक शब्द ( प्रेम ) की संभाव्यता की गणना करने की अनुमति देता है ।

पदानुक्रमित सॉफ्टमैक्स के अलावा अन्य क्या विकल्प उपलब्ध हैं?

यदि शब्द एम्बेडिंग विकल्प के लिए एक सामान्य अर्थ में बोलना उपलब्ध हैं, तो विभेदित सॉफ्टमैक्स, सीएनएन-सॉफ्टमैक्स, महत्व नमूनाकरण, अनुकूली महत्व नमूनाकरण, शोर गर्भनिरोधक अनुमान, नकारात्मक नमूनाकरण, स्व-सामान्यीकरण और निराला सामान्यीकरण हैं।

Word2vec के बारे में विशेष रूप से बोलते हुए हमारे पास नकारात्मक नमूने उपलब्ध हैं।

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

क्या निष्कर्ष निकाला जा सकता है?

हमारे न्यूरॉन्स बाहरी उत्तेजनाओं का उपयोग कर निकाल दिए जाते हैं, ठीक उसी तरह एक्टिविस्ट न्यूरॉन्स को निकाल रहे हैं। सॉफ्टमैक्स परत आउटपुट लेयर फ़ंक्शन में से एक है जो शब्द एम्बेडिंग के मामले में न्यूरॉन्स को आग लगाता है। Word2vec में हमारे पास पदानुक्रमित सॉफ्टमैक्स और नकारात्मक नमूने जैसे विकल्प हैं। एक्टिवेटर्स का उपयोग करके, रैखिक फ़ंक्शन को नॉनलाइनियर फ़ंक्शन में परिवर्तित किया जा सकता है, और इस तरह का उपयोग करके एक जटिल मशीन लर्निंग एल्गोरिदम को लागू किया जा सकता है।

जेनसिम क्या है?

जेनसिम एक विषय है जो टूलकिट मॉडलिंग करता है जिसे अजगर में लागू किया जाता है। टॉपिक मॉडलिंग पाठ निकाय में छिपी हुई संरचना की खोज कर रहा है। Word2vec को Gensim टूलकिट से आयात किया गया है। कृपया ध्यान दें कि Gensim न केवल शब्द 2vec का कार्यान्वयन प्रदान करता है, बल्कि Doc2vec और FastText भी है, लेकिन यह ट्यूटोरियल word2vec के बारे में है, इसलिए हम वर्तमान विषय से चिपके रहेंगे।

Gensim का उपयोग कर word2vec का कार्यान्वयन

अब तक हमने चर्चा की है कि word2vec क्या है, इसके अलग-अलग आर्किटेक्चर, क्यों शब्दों के एक बैग से word2vec में बदलाव होता है, word2vec और NLTK के बीच का संबंध लाइव कोड और एक्टिवेशन फ़ंक्शन के साथ होता है। इस खंड में, Gensim का उपयोग करके word2vec को लागू करेगा

चरण 1) डेटा संग्रह

किसी भी मशीन लर्निंग मॉडल को लागू करने या प्राकृतिक भाषा प्रसंस्करण को लागू करने के लिए पहला कदम डेटा संग्रह है

कृपया एक बुद्धिमान चैटबॉट बनाने के लिए डेटा का निरीक्षण करें।

[{"tag": "welcome","patterns": ["Hi", "How are you", "Is any one to talk?", "Hello", "hi are you available"],"responses": ["Hello, thanks for contacting us", "Good to see you here"," Hi there, how may I assist you?"]},{"tag": "goodbye","patterns": ["Bye", "See you later", "Goodbye", "I will come back soon"],"responses": ["See you later, thanks for visiting", "have a great day ahead", "Wish you Come back again soon."]},{"tag": "thankful","patterns": ["Thanks for helping me", "Thank your guidance", "That's helpful and kind from you"],"responses": ["Happy to help!", "Any time!", "My pleasure", "It is my duty to help you"]},{"tag": "hoursopening","patterns": ["What hours are you open?", "Tell your opening time?", "When are you open?", "Just your timing please"],"responses": ["We're open every day 8am-7pm", "Our office hours are 8am-7pm every day", "We open office at 8 am and close at 7 pm"]},{"tag": "payments","patterns": ["Can I pay using credit card?", " Can I pay using Mastercard?", " Can I pay using cash only?" ],"responses": ["We accept VISA, Mastercard and credit card", "We accept credit card, debit cards and cash. Please don’t worry"]}]

यहां हम डेटा से समझते हैं

  • इस डेटा में तीन चीजें टैग, पैटर्न और प्रतिक्रियाएं हैं। टैग इरादा है (चर्चा का विषय क्या है)।
  • डेटा JSON प्रारूप में है।
  • एक पैटर्न एक सवाल है जो उपयोगकर्ता बॉट से पूछेंगे
  • प्रतिक्रियाएं जवाब है कि चैटबॉट संबंधित प्रश्न / पैटर्न को प्रदान करेगा।

चरण 2) डेटा प्रीप्रोसेसिंग।

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

इस कदम में स्टॉप शब्द निकालना, स्टेमिंग, अनावश्यक शब्द इत्यादि शामिल हैं, आगे बढ़ने से पहले, डेटा लोड करना और इसे डेटा फ्रेम में बदलना महत्वपूर्ण है। कृपया नीचे दिए गए कोड को ऐसे देखें

import jsonjson_file =’intents.json'with open('intents.json','r') as f:data = json.load(f)

CODE की व्याख्या।

  1. जैसा कि डेटा json प्रारूप के रूप में है इसलिए json आयात किया जाता है
  2. फ़ाइल चर में संग्रहीत है
  3. फ़ाइल खुली और डेटा चर में भरी हुई है

अब डेटा आयात किया जाता है और यह डेटा को डेटा फ्रेम में बदलने का समय है। अगला चरण देखने के लिए कृपया नीचे दिया गया कोड देखें

import pandas as pddf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)

CODE की व्याख्या

1. डेटा को ऊपर आयात किए गए पंडों का उपयोग करके डेटा फ़्रेम में परिवर्तित किया गया है।

2. यह कॉलम पैटर्न में सूची को स्ट्रिंग में बदल देगा।

from nltk.corpus import stopwordsfrom textblob import Wordstop = stopwords.words('english')df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split()))df['patterns't']= df['patterns''].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation)df['patterns']= df['patterns'].str.replace('[^\w\s]','')df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit()))df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop))df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))

कोड स्पष्टीकरण

1. अंग्रेजी स्टॉप शब्द nltk टूलकिट से स्टॉप वर्ड मॉड्यूल का उपयोग करके आयात किए जाते हैं

2. पाठ के सभी शब्द हालत और लैम्ब्डा फ़ंक्शन का उपयोग करके निचले मामले में परिवर्तित हो जाते हैं। लैंबडा फ़ंक्शन एक अनाम फ़ंक्शन है।

3. डेटा फ़्रेम में पाठ की सभी पंक्तियों को स्ट्रिंग विराम चिह्न के लिए जाँचा जाता है, और इन्हें फ़िल्टर किया जाता है।

4. नियमित अभिव्यक्ति का उपयोग करके अंक या संख्या जैसे वर्ण हटा दिए जाते हैं।

5. अंक पाठ से हटा दिए जाते हैं।

6. इस अवस्था में स्टॉप शब्द हटा दिए जाते हैं।

7. अब शब्दों को फ़िल्टर किया जाता है, और एक ही शब्द के अलग-अलग रूप को लेमेटाइज़ेशन का उपयोग करके हटाया जाता है। इनके साथ, हमने डेटा प्रीप्रोसेसिंग समाप्त कर दिया है।

आउटपुट:

, patterns, responses, tag0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful3,hour open tell opening time open timing please,"[""We're open every day 8am-7pm"", 'Our office hours are 8am-7pm every day', 'We open office at 8 am and close at 7 pm']",hoursopening4,pay using credit card pay using mastercard pay using cash,"['We accept VISA, Mastercard and credit card', 'We accept credit card, debit cards and cash. Please don’t worry']",payments

चरण 3) शब्द 2vec का उपयोग करके तंत्रिका नेटवर्क भवन

अब Gensim मॉड्यूल word2vec का उपयोग करके एक मॉडल बनाने का समय है। हमें Gensim से word2vec आयात करना होगा। हम ऐसा करते हैं, और फिर हम निर्माण करेंगे और अंतिम चरण में हम वास्तविक समय डेटा पर मॉडल की जांच करेंगे।

from gensim.models import Word2Vec

अब, हम सफलतापूर्वक Word2Vec का उपयोग करके मॉडल का निर्माण कर सकते हैं। Word2Vec का उपयोग करके मॉडल बनाने का तरीका जानने के लिए कृपया कोड की अगली पंक्ति देखें। सूची के रूप में मॉडल को पाठ प्रदान किया जाता है, इसलिए हम नीचे दिए गए कोड का उपयोग करके पाठ को डेटा फ्रेम से सूची में बदल देंगे

Bigger_list=[]for i in df['patterns']li = list(i.split(""))Bigger_list.append(li)Model= Word2Vec(Bigger_list,min_count=1,size=300,workers=4)

संहिता की व्याख्या

1. अंदर की सूची संलग्न है, जहां बड़ा_लिस्ट बनाया गया है। यह प्रारूप है जो Word2Vec मॉडल को खिलाया जाता है।

2. लूप लागू किया गया है, और डेटा फ़्रेम के पैटर्न कॉलम की प्रत्येक प्रविष्टि को पुनरावृत्त किया गया है।

3. कॉलम पैटर्न के प्रत्येक तत्व को आंतरिक सूची ली में विभाजित और संग्रहीत किया जाता है

4. भीतरी सूची को बाहरी सूची के साथ जोड़ा गया है।

5. यह सूची Word2Vec मॉडल को प्रदान की गई है। आइए हम यहां दिए गए कुछ मापदंडों को समझते हैं

Min_count: यह कुल आवृत्ति से कम सभी शब्दों को अनदेखा करेगा।

आकार: यह वैक्टर शब्द की गतिशीलता को बताता है।

श्रमिक: ये मॉडल को प्रशिक्षित करने के लिए सूत्र हैं

अन्य विकल्प भी उपलब्ध हैं, और कुछ महत्वपूर्ण नीचे दिए गए हैं

विंडो: एक वाक्य के भीतर वर्तमान और अनुमानित शब्द के बीच अधिकतम दूरी।

Sg: यह एक प्रशिक्षण एल्गोरिथ्म है और स्किप-ग्राम के लिए 1 और शब्दों के एक निरंतर बैग के लिए 0 है। हमने ऊपर विवरण में इन पर चर्चा की है।

Hs: यदि यह 1 है तो हम प्रशिक्षण के लिए पदानुक्रमित सॉफ्टमैक्स का उपयोग कर रहे हैं और यदि 0 तो नकारात्मक नमूने का उपयोग किया जाता है।

अल्फा: प्रारंभिक सीखने की दर

नीचे अंतिम कोड प्रदर्शित करते हैं

#list of libraries used by the codeimport stringfrom gensim.models import Word2Vecimport loggingfrom nltk.corpus import stopwordsfrom textblob import Wordimport jsonimport pandas as pd#data in json formatjson_file = 'intents.json'with open('intents.json','r') as f:data = json.load(f)#displaying the list of stopwordsstop = stopwords.words('english')#dataframedf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)# print(df['patterns'])#print(df['patterns'])#cleaning the data using the NLP approachprint(df)df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split()))df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation))df['patterns']= df['patterns'].str.replace('[^\w\s]','')df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit()))df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop))df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))#taking the outer listbigger_list=[]for i in df['patterns']:li = list(i.split(" "))bigger_list.append(li)#structure of data to be taken by the model.word2vecprint("Data format for the overall list:",bigger_list)#custom data is fed to machine for further processingmodel = Word2Vec(bigger_list, min_count=1,size=300,workers=4)#print(model)

चरण 4) मॉडल की बचत

मॉडल को बिन और मॉडल रूप में बचाया जा सकता है। बिन बाइनरी प्रारूप है। कृपया मॉडल को बचाने के लिए नीचे की पंक्तियाँ देखें

model.save("word2vec.model")model.save("model.bin")

उपरोक्त कोड की व्याख्या

1. मॉडल को एक .model फ़ाइल के रूप में सहेजा जाता है।

2. मॉडल को .bin फ़ाइल के रूप में सहेजा जाता है

हम इस मॉडल का उपयोग वास्तविक समय परीक्षण करने के लिए करेंगे जैसे कि समान शब्द, भिन्न शब्द और सबसे सामान्य शब्द।

चरण 5) लोड हो रहा है मॉडल और वास्तविक समय परीक्षण प्रदर्शन

मॉडल नीचे दिए गए कोड का उपयोग करके लोड किया गया है

model = Word2Vec.load('model.bin')

यदि आप शब्दावली को प्रिंट करना चाहते हैं, तो यह नीचे कमांड का उपयोग करके किया गया है

शब्दबोध = सूची (model.wv.vocab)

कृपया परिणाम देखें

['see', 'thank', 'back', 'thanks', 'soon', 'open', 'mastercard', 'card', 'time', 'pay', 'talk', 'cash', 'one', 'please', 'goodbye', 'thats', 'helpful', 'hour', 'credit', 'hi', 'later', 'guidance', 'opening', 'timing', 'hello', 'helping', 'bye', 'tell', 'come', 'using', 'kind', 'available'] 

चरण 6) अधिकांश समान शब्द चेकिंग

आइए हम व्यावहारिक रूप से चीजों को लागू करें

similar_words = model.most_similar('thanks')print(similar_words)

कृपया परिणाम देखें

[('kind', 0.16104359924793243), ('using', 0.1352398842573166), ('come', 0.11500970274209976), ('later', 0.09989878535270691), ('helping', 0.04855936020612717), ('credit', 0.04659383371472359), ('pay', 0.0329081267118454), ('thank', 0.02484947443008423), ('hour', 0.0202352125197649), ('opening', 0.018177658319473267)] 

चरण 7) आपूर्ति किए गए शब्दों से शब्द से मेल नहीं खाता है

dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split())print(dissimlar_words)

हमने 'बाद में देखें, आने के लिए धन्यवाद' शब्दों की आपूर्ति की है यह इन शब्दों से सबसे अधिक भिन्न शब्दों को मुद्रित करेगा । आइए हम इस कोड को चलाते हैं और परिणाम प्राप्त करते हैं

उपरोक्त कोड के निष्पादन के बाद परिणाम।

Thanks

चरण 8) दो शब्दों के बीच समानता खोजना

यह दो शब्दों के बीच समानता की संभावना में परिणाम बताएगा। कृपया नीचे दिए गए कोड को देखें कि इस अनुभाग को कैसे निष्पादित किया जाए।

similarity_two_words = model.similarity('please','see')print("Please provide the similarity between these two words:")print(similarity_two_words)

उपरोक्त कोड का परिणाम नीचे दिया गया है

0.13706 है

आप नीचे दिए गए कोड को निष्पादित करके समान शब्द पा सकते हैं

similar = model.similar_by_word('kind')print(similar)

उपरोक्त कोड का आउटपुट

[('credit', 0.11764447391033173), ('cash', 0.11440904438495636), ('one', 0.11151769757270813), ('hour', 0.0944807156920433), ('using', 0.0705675333738327), ('thats', 0.05206916481256485), ('later', 0.04502468928694725), ('bye', 0.03960943967103958), ('back', 0.03837274760007858), ('thank', 0.0380823090672493)]

निष्कर्ष

  • वर्ड एंबेडिंग एक प्रकार का शब्द प्रतिनिधित्व है जो मशीन लर्निंग एल्गोरिदम द्वारा समान अर्थ वाले शब्दों को समझने की अनुमति देता है
  • शब्द एम्बेडिंग का उपयोग समान शब्दों की गणना करने के लिए किया जाता है, संबंधित शब्दों का एक समूह बनाएं, पाठ वर्गीकरण के लिए फ़ीचर, दस्तावेज़ क्लस्टरिंग, प्राकृतिक भाषा प्रसंस्करण
  • Word2vec एक उथले दो-स्तरित तंत्रिका नेटवर्क मॉडल है जो बेहतर शब्द प्रतिनिधित्व के लिए शब्द एम्बेडिंग का उत्पादन करता है
  • Word2vec वेक्टर अंतरिक्ष प्रतिनिधित्व में शब्दों का प्रतिनिधित्व करता है। शब्दों को वैक्टर के रूप में दर्शाया जाता है और प्लेसमेंट इस तरह से किया जाता है कि समान अर्थ वाले शब्द एक साथ दिखाई देते हैं और भिन्न शब्द बहुत दूर स्थित होते हैं
  • Word2vec ने 2 आर्किटेक्चर कंटीन्यूअस बैग ऑफ़ सीब (CBOW) और स्किप ग्राम का उपयोग किया
  • CBOW स्किप चना की तुलना में कई गुना तेज है और लगातार शब्दों के लिए एक बेहतर आवृत्ति प्रदान करता है जबकि स्किप चना को प्रशिक्षण डेटा की थोड़ी मात्रा की आवश्यकता होती है और यहां तक ​​कि दुर्लभ शब्दों या वाक्यांशों का भी प्रतिनिधित्व करता है।
  • NLTK और word2vec का उपयोग एक साथ शक्तिशाली एप्लिकेशन बनाने में किया जा सकता है
  • न्यूरॉन की सक्रियता फ़ंक्शन इनपुट के एक सेट को दिए गए उस न्यूरॉन के आउटपुट को परिभाषित करता है। Word2vec में। सॉफ्टमैक्स लेयर (सामान्यीकृत घातीय फ़ंक्शन) आउटपुट लेयर फ़ंक्शन है जो प्रत्येक नोड को सक्रिय या आग देता है। Word2vec में भी नकारात्मक नमूने उपलब्ध हैं
  • जेनसिम एक विषय है जो टूलकिट मॉडलिंग करता है जिसे अजगर में लागू किया जाता है