बड़े पैमाने पर पाठ वर्गीकरण


18

मैं अपने पाठ डेटा पर वर्गीकरण करना चाह रहा हूं। मेरे पास 300 classes, प्रति वर्ग (इसलिए 60000 documents in total) 200 प्रशिक्षण दस्तावेज हैं और इसका परिणाम बहुत ही उच्च आयामी डेटा (हम 1 मिलियन आयामों से अधिक हो सकता है ) में हो सकता है ।

मैं पाइपलाइन में निम्नलिखित कदम करना चाहूंगा (बस आपको इस बात का बोध कराना होगा कि मेरी आवश्यकताएं क्या हैं):

  1. वेक्टर को फ़ीचर करने के लिए प्रत्येक दस्तावेज़ को परिवर्तित करना ( tf-idfया vector space model)
  2. Feature selection( Mutual Informationअधिमानतः या किसी अन्य मानक के आधार पर)
  3. वर्गीकारक प्रशिक्षण ( SVM, Naive Bayes, Logistic Regressionया Random Forest)
  4. प्रशिक्षित क्लासिफायर मॉडल के आधार पर अनदेखी डेटा की भविष्यवाणी करना।

तो सवाल यह है कि ऐसे उच्च आयामी डेटा को संभालने के लिए मैं कौन से उपकरण / रूपरेखा का उपयोग करता हूं? मैं सामान्य संदिग्धों (R, WEKA ...) से अवगत हूं, लेकिन जहां तक ​​मेरा ज्ञान है (मैं गलत हो सकता है) संभवतः उनमें से कोई भी इस बड़े डेटा को संभाल नहीं सकता है। क्या शेल्फ़ टूल से अलग कोई और है जिसे मैं देख सकता था?

अगर मुझे इसे समानांतर करना है, तो क्या मुझे अपाचे महतो को देखना चाहिए ? ऐसा लगता है कि यह अभी तक मुझे अपेक्षित कार्यक्षमता प्रदान नहीं कर सकता है।

सभी को अग्रिम धन्यवाद।


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

(1) आर ( विशेष रूप से टीएम पैकेज) का उपयोग करके मेरे डेटा का प्रीप्रोसेसिंग अव्यावहारिक हो सकता है , क्योंकि tmयह बेहद धीमा होगा।

(2) चूँकि मुझे R संकुल (पूर्व-प्रसंस्करण, विरल मैट्रीस, क्लासिफायर इत्यादि) का एक संयोजन का उपयोग करने की आवश्यकता होगी, संकुल के बीच अंतर एक समस्या बन सकता है, और मैं एक प्रारूप से दूसरे प्रारूप में डेटा परिवर्तित करने में एक अतिरिक्त उपरि उत्पन्न कर सकता हूं। । उदाहरण के लिए, अगर मैं अपने पूर्व-प्रसंस्करण का उपयोग कर रहा हूं tm(या WEKA की तरह एक बाहरी उपकरण) तो मुझे इस डेटा को रूप में परिवर्तित करने के लिए एक तरीका निकालने की आवश्यकता होगी, जिसे एच में एचपीसी पुस्तकालय पढ़ सकते हैं। और फिर से यह मेरे लिए स्पष्ट नहीं है कि क्या क्लासिफायर पैकेज सीधे डेटा में ले जाएगा जैसा कि एचपीसी पुस्तकालयों द्वारा प्रदान किया गया है।

क्या मैं सही रास्ते पर हूं? और अधिक महत्वपूर्ण बात, क्या मैं समझदारी बना रहा हूं?


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

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

1
आप foreachआर में समानांतर कोड लिखने के लिए पुस्तकालय का उपयोग कर सकते हैं । यह विशेष रूप से यादृच्छिक जंगलों के साथ मिलकर काम करता है, जो स्वाभाविक रूप से समानांतर रूप से आसान हैं।
Zach

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

1
मैं लगभग १०,००० विषयों (जैसे कक्षाएं या श्रेणियां या जो भी शब्द आपको पसंद करता हूं) में पाठ वर्गीकरण पर काम कर रहा हूं। मैं वर्तमान में इस पैमाने पर इस पाठ वर्गीकरण प्रणाली को ट्यूनिंग पर काम कर रहा हूं। मैं अपनी खुद की तकनीकों को साझा नहीं कर सकता क्योंकि वे मालिकाना हैं, लेकिन मेरे पास एक सलाह है: यह मानने में बहुत सतर्क रहें कि कुछ सुझाए गए तकनीक तराजू जब तक कि यह पहले से ही ऐसा करने के लिए साबित नहीं हुआ है। मेरे अनुभव में, बहुत कम लोग करते हैं।

जवाबों:


13

यह तब तक संभव हो सकता है जब तक कि यह डेटा तब तक काम न करे जब तक कि डेटा को पाइरॉन में एक विरल डेटा संरचना के रूप में दर्शाया गया हो scipy.sparse.csr_matrix। मैंने टेक्स्ट डेटा पर काम करने के लिए एक ट्यूटोरियल लिखा है । हैशिंग ट्रिक का लाभ उठाकर मेमोरी के उपयोग को और कम करना संभव है: या HashingVectorizerइसके बजाय इसका उपयोग करने के लिए इसे अनुकूलित CountingVectorizerकरें TfidfVectorizer। इसे डॉक्यूमेंटेशन सेक्शन टेक्स्ट फीचर्स एक्सट्रैक्शन में समझाया गया है ।

रैंडम फ़ॉरेस्ट सामान्य रूप से लीनियर मॉडल (जैसे लीनियर सपोर्ट वेक्टर मशीन और लॉजिस्टिक रिग्रेशन) और मल्टीनोमियल या बर्नौली भोले बेज़ के लिए अधिक महंगे होते हैं और अधिकांश टेक्स्ट वर्गीकरण समस्याओं के लिए जो सरल मॉडल की तुलना में काफी बेहतर भविष्यवाणी नहीं करते हैं।

यदि scikit-learn आपकी समस्या को समाप्त करने में सक्षम नहीं है, तो Vowpal Wabbit (और शायद स्केलेर की तुलना में तेज़ होगा) हालांकि यह उन सभी मॉडलों को लागू नहीं करता है जिनके बारे में आप बात कर रहे हैं।

अप्रैल 2015 में शिक्षाप्रद-लाईब्रेरी की वर्तमान स्थिति को दर्शाने और टूटी कड़ियों को ठीक करने के लिए संपादित किया गया।


किसी भी "गैर मानक" आयाम में कमी तकनीक का उपयोग करने के साथ समस्या यह है कि जब आप अपने काम को प्रकाशित करने की कोशिश करते हैं तो आप मुसीबत में पड़ सकते हैं। पाठ वर्गीकरण क्षेत्र में कम से कम, मैं एक तथ्य के लिए जानता हूं कि समीक्षक आमतौर पर इस्तेमाल की जाने वाली तकनीकों को देखना पसंद करते हैं (मौजूदा वर्गीकरण तकनीकों के खिलाफ तुलना करना आसान बनाता है)।
user721975

चिंता न करें - @ogrisel ने कुछ भी गैर-मानक का उल्लेख नहीं किया है, कम से कम नहीं जैसा कि यह कला पाठ वर्गीकरण की स्थिति से संबंधित है, हालांकि मैंने अभी तक उनके ट्यूटोरियल नहीं पढ़ा है।
Iterator

+1 मुझे लगता है कि पायथन शायद जाने का एक सुखद तरीका है। पाठ खनन के लिए आर में कुछ बहुत हाल के पैकेज हैं, लेकिन अगर किसी के पास सांख्यिकीय विशेषज्ञता और हितों की तुलना में अधिक कम्प्यूटेशनल है, तो पायथन मेरी सिफारिश होगी।
Iterator

@ogrisel: आपके और अन्य लोगों के योगदान के लिए कुडोस ने स्केलेन किया है। मैंने इसे कई लोगों के लिए सुझाया है जो पायथन में काम करते हैं - पूरी डिजाइन अनुकरणीय है।
Iterator

के रूप में "गैर मानक" आयाम में कमी (यादृच्छिक अनुमानों का उपयोग करके) और सुविधा हैशिंग जॉन लैंगफोर्ड द्वारा हैशिंग ट्रिक की जांच करते हैं और मेटाटॉपिज़ पर यह चर्चा करते हैं
ogrisel


1

अपने स्वयं के सींग को टटोलने के लिए नहीं, लेकिन मैंने रैपिडमिनर के साथ टेक्स्ट एनालिटिक्स पर एक बहुत लोकप्रिय वीडियो श्रृंखला बनाई। आप इसे यहां देख सकते हैं:

http://vancouverdata.blogspot.com/2010/11/text-analytics-with-rapidminer-loading.html

आप सुविधा चयन करने से बच सकते हैं, बस एक क्लासिफायर का उपयोग करें जो मेमोरी में एक लाख * मिलियन मैट्रिक्स नहीं बनाता है :)

लॉजिस्टिक रिग्रेशन उस कई आयामों पर चौका देगा। Naive Bayes स्वतंत्र आयाम मानता है, इसलिए आप ठीक रहेंगे। एसवीएम आयामों की संख्या पर निर्भर नहीं करता है (लेकिन समर्थन वैक्टर की संख्या पर) इसलिए यह ठीक भी होगा।

300 हालांकि वर्गों का एक बहुत है। मैं केवल कुछ के साथ शुरू करूंगा और अपने तरीके से काम करूंगा।


महान सूचक और सलाह। धन्यवाद। क्या आप कृपया विस्तार से बता सकते हैं कि "केवल कुछ के साथ शुरुआत करें और अपने तरीके से काम करें"?
user721975

300 वर्गों (जैसे "वायलिन, वायोला, सेलो, ट्रम्पेट ...") के बजाय, आप उन्हें "स्ट्रिंग, ब्रास" जैसी छोटी संख्या में पुनर्वर्गीकृत कर सकते हैं।
नील मैकगिगन

ठीक है, मैं इसे अभी प्राप्त करता हूं।
user721975

1

सबसे पहले, आपकी टिप्पणियों के आधार पर, मैं इसे 300 बाइनरी (हाँ / नहीं) वर्गीकरण समस्याओं के रूप में मानूंगा। कई आसानी से उपयोग होने वाले ओपन सोर्स बाइनरी क्लासिफायर सीखने वाले हैं, और यह आपको मेमोरी के लिए व्यापार करने की सुविधा देता है।

एसवीएम और लॉजिस्टिक रिग्रेशन संभवतः पाठ वर्गीकरण के लिए सबसे लोकप्रिय दृष्टिकोण हैं। दोनों आसानी से 1000000 आयामों को संभाल सकते हैं, क्योंकि आधुनिक कार्यान्वयन स्पार्स डेटा संरचनाओं का उपयोग करते हैं, और इसमें नियमितीकरण सेटिंग्स शामिल होती हैं जो ओवरफिटिंग से बचती हैं।

WEKA और KNIME सहित कई ओपन सोर्स मशीन लर्निंग सुइट्स में SVM और लॉजिस्टिक रिग्रेशन दोनों शामिल हैं। SVMs के स्टैंडअलोन कार्यान्वयन में libSVM और SVMlight शामिल हैं । लॉजिस्टिक रिग्रेशन के लिए, मैं BXRtrain और BXRclassify को प्लग करूंगा , जिसे मैंने मैडिगन, जेनकिन और अन्य के साथ विकसित किया है। BXRclassify हजारों लॉजिस्टिक रिग्रेशन मॉडल के इन-मेमोरी इंडेक्स का निर्माण कर सकता है और उन्हें एक साथ लागू कर सकता है।

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


+1 अच्छी टिप्पणियाँ। यदि मुझे 300 हाँ / नहीं वर्गीकरण करना था, तो मैं एक कक्षा के लिए नकारात्मक प्रशिक्षण डेटा कैसे चुनूँगा? सकारात्मक डेटा स्पष्ट रूप से दस्तावेज हैं जो वर्ग के हैं।
user721975

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

@ user721975: किसी विशेष भेदभाव के लिए, सकारात्मक दस्तावेज उन पर लेबल X के साथ हैं, और नकारात्मक दस्तावेज़ सभी दस्तावेज़ हैं।
डेविडडेलिस

@ user721975: चल रहे समय के बारे में सामान्य सलाह देना कठिन है, क्योंकि विवरण एल्गोरिदम और कार्यान्वयन के बीच बहुत भिन्न होते हैं। 10-गुना क्रॉस सत्यापन आपके डेटा सेट के लिए अव्यावहारिक नहीं हो सकता है: 60000 उदाहरण यह मामला नहीं है।
डेविडडेलिस

1
असंतुलित प्रशिक्षण सेट जरूरी एक समस्या नहीं हैं। लेकिन वास्तव में मुझे एहसास है कि मैं कुछ उलझन में हूं: चूंकि दस्तावेज़ 0, 1, या कई कक्षाओं के हो सकते हैं, प्रति वर्ग 200 प्रशिक्षण दस्तावेज होने से आपका क्या मतलब है? क्या आपने 0 कक्षाओं या 2+ कक्षाओं के साथ दस्तावेज़ निकालने के लिए कुछ किया था? सामान्य तौर पर, आपने 60000 दस्तावेजों के इस सेट को कैसे उत्पन्न किया?
डेविडडेविस

1

Sklearn 0.13 के बाद से वास्तव में HashingVectorizer का कार्यान्वयन है

EDIT: यहाँ इस तरह के एक अनुप्रयोग का एक पूर्ण उदाहरण है sklearn डॉक्स से

मूल रूप से, यह उदाहरण प्रदर्शित करता है कि आप डेटा पर पाठ को वर्गीकृत कर सकते हैं जो कंप्यूटर की मुख्य मेमोरी में फिट नहीं हो सकता है (बल्कि डिस्क / नेटवर्क / ... पर)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.