सजा हुआ तंत्रिका नेटवर्क का उपयोग करते हुए दस्तावेज़ वर्गीकरण


11

मैं दस्तावेजों को वर्गीकृत करने के लिए सीएनएन (कन्वेन्शनल न्यूरल नेटवर्क) का उपयोग करने की कोशिश कर रहा हूं। कई पाठों में लघु पाठ / वाक्यों के लिए सीएनएन का अध्ययन किया गया है। हालांकि, ऐसा लगता है कि किसी भी कागजात ने लंबे पाठ या दस्तावेज़ के लिए सीएनएन का उपयोग नहीं किया है।
मेरी समस्या यह है कि एक दस्तावेज से बहुत अधिक विशेषताएं हैं। मेरे डेटासेट में, प्रत्येक दस्तावेज़ में 1000 से अधिक टोकन / शब्द हैं। प्रत्येक उदाहरण को एक सीएनएन को खिलाने के लिए, मैं प्रत्येक दस्तावेज़ को मैट्रिक्स में बदलकर वर्ड 2vec या दस्ताने का उपयोग करके एक बड़ा मैट्रिक्स बनाता हूं । प्रत्येक मैट्रिक्स के लिए, ऊंचाई दस्तावेज़ की लंबाई है, और चौड़ाई शब्द एम्बेडिंग वेक्टर का आकार है। मेरे डेटासेट के 9000 से अधिक उदाहरण हैं और नेटवर्क (एक पूरे सप्ताह) को प्रशिक्षित करने में बहुत समय लगता है, जिससे फाइन-ट्यून पैरामीटर को ठीक करना मुश्किल हो जाता है।
एक और विशेषता निकालने की विधि प्रत्येक शब्द के लिए एक-गर्म वेक्टर का उपयोग करना है, लेकिन यह बहुत विरल मैट्रिस पैदा करेगा। और हां, इस विधि को पिछली पद्धति की तुलना में प्रशिक्षित करने में अधिक समय लगता है।
तो क्या बड़े इनपुट मैट्रिसेस बनाए बिना फीचर्स को निकालने का बेहतर तरीका है?
और हमें दस्तावेजों की चर लंबाई को कैसे संभालना चाहिए? वर्तमान में, मैं दस्तावेज़ बनाने के लिए विशेष तार जोड़ता हूं, जिसकी लंबाई समान है, लेकिन मुझे नहीं लगता कि यह एक अच्छा समाधान है।


2
क्या TfIdf वेक्टरइज़र का उपयोग करना उचित लगता है? शायद Word2vec के साथ संयोजन में प्रत्येक दस्तावेज़ के लिए केवल शीर्ष एक्स शब्द छोड़ दें?
डिएगो

खैर, मुझे नहीं पता कि Tfldf क्या है। मैं यह देखने के लिए जाँच करने जा रहा हूँ कि क्या यह काम करता है। धन्यवाद
lenhhoxung

scikit-learn.org/stable/modules/… यहाँ उदाहरण के लिए
डिएगो

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

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

जवाबों:


8

आप अपने दस्तावेज़ों को शब्द वैक्टरों की लंबी श्रृंखला के बजाय वाक्य वैक्टर की श्रृंखला के रूप में प्रस्तुत करके अपने इनपुट डेटा की लंबाई को कम कर सकते हैं। Doc2vec ऐसा करने का एक तरीका है (प्रत्येक वाक्य एक "दस्तावेज़" होगा)।

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

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

वैसे, यह तरीका तब काम कर सकता है जब आपकी सटीकता और गति की जरूरतों को पूरा करने के लिए ऊपर या नीचे की ओर बढ़ाया जाए। (उदाहरण के लिए यदि आपका CNN अभी भी वाक्य वैक्टर के साथ बहुत धीरे-धीरे प्रशिक्षित होता है, तो आप इसके बजाय पैराग्राफ वैक्टर बना सकते हैं)।

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


दिलचस्प विचार है। मैं इसे
आजमाऊंगा

क्या मैं एक सवाल पूछ सकता हूँ? मैं उन दस्तावेज़ों से कैसे निपट सकता हूं जो अलग-अलग लंबाई (5 वाक्य / डॉक्टर, 500 वाक्य / डॉक्टर) के साथ हैं, यहां तक ​​कि मैं उन्हें वाक्य वैक्टर में प्रतिनिधित्व करता हूं? यहां पर अजीब लगता है ...
स्टैन्ड्रफ्लोफ़्लो

1
भाषण प्रसंस्करण में, कुछ लोग इसकी लंबाई के आधार पर अनुक्रम का आदेश देते हैं ताकि समान लंबाई वाला अनुक्रम एक ही बैच में हो। यह पाठ अनुक्रम के लिए काम कर सकता है।
सुथे

4

आप क्षेत्र एम्बेडिंग का उपयोग कर सकते हैं। वैक्टर को व्यक्तिगत "टोकन" में परिवर्तित करने के बजाय आप पाठ के क्षेत्रों को वैक्टर में बदलने की रणनीति का उपयोग कर सकते हैं। इस दृष्टिकोण का उपयोग यहां किया गया है: https://arxiv.org/abs/1504.01255

यदि आप CNN तक सीमित नहीं हैं, तो आप इस तरह के एक पदानुक्रमित ध्यान मॉडल का उपयोग कर सकते हैं: https://www.cs.cmu.edu/~diyiy/docs/naacl16.pdf जहां आपके पास इस तरह की एक पाइपलाइन है: word vectors (combined into) sentence vectors (combined into) final document vector

ध्यान दें, इस विधि के साथ, आपको अभी भी सभी शब्द वैक्टर को एम्बेडिंग में बदलना होगा, लेकिन सभी को एक साथ नहीं।

विभिन्न लंबाई के दस्तावेजों को संभालने के लिए, पैडिंग / कटिंग ही अब तक का एकमात्र समाधान है।

अंत में, गति बढ़ाने के लिए, आप केवल महत्वपूर्ण खंडों को शामिल करके पाठ के आयाम को कम करने का प्रयास कर सकते हैं (हो सकता है कि केवल दस्तावेज़ की शुरुआत अच्छी वर्गीकरण सटीकता के लिए पर्याप्त हो)


1
आपके संदर्भ लिंक के लिए धन्यवाद। क्षेत्र एम्बेडिंग दिलचस्प है। चर-आकार के दस्तावेज़ के बारे में, जैसा कि इस लेख में वर्णित है arxiv.org/abs/1412.1058 (एक ही लेखक), हम पैडिंग / कटिंग के बजाय कई पूलिंग इकाइयों का उपयोग कर सकते हैं।
लेन्हॉक्सुंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.