अपरिष्कृत पाठ वर्गीकरण


12

मैं अज्ञात संरचना के वेब साइटों को असंरचित पाठ दस्तावेजों को वर्गीकृत करने जा रहा हूं। जिन कक्षाओं को मैं वर्गीकृत कर रहा हूं, उनकी संख्या सीमित है (इस बिंदु पर, मेरा मानना ​​है कि तीन से अधिक नहीं है)। क्या किसी के पास सुझाव है कि मैं कैसे आरंभ कर सकता हूं?

क्या "शब्दों का थैला" यहाँ संभव है? बाद में, मैं दस्तावेज़ संरचना (शायद निर्णय पेड़ों) के आधार पर एक और वर्गीकरण चरण जोड़ सकता था।

मैं Mahout और Hadoop से कुछ हद तक परिचित हूं, इसलिए मैं Java- आधारित समाधान पसंद करता हूं। यदि आवश्यक हो, तो मैं स्काला और / या स्पार्क इंजन (एमएल लाइब्रेरी) पर स्विच कर सकता हूं।

जवाबों:


14

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

  • मॉडल - ऐसा कुछ जो आपके डेटा में आंतरिक संरचना का अनुमान लगाता है, जिससे आप इसके बारे में तर्क कर सकते हैं और उपयोगी भविष्यवाणियां कर सकते हैं (उदाहरण के लिए किसी वस्तु का वर्ग); सामान्य रूप से मॉडल में ऐसे पैरामीटर होते हैं जिन्हें आप "सीखना" चाहते हैं
  • प्रशिक्षण और परीक्षण डेटासेट - उन वस्तुओं का सेट जो आप अपने मॉडल के प्रशिक्षण के लिए उपयोग करते हैं (मापदंडों के लिए अच्छे मूल्यों को खोजने) और आगे का मूल्यांकन
  • प्रशिक्षण और वर्गीकरण एल्गोरिदम - पहले यह बताता है कि प्रशिक्षण डेटासेट से मॉडल कैसे सीखें, दूसरा दिखाता है कि प्रशिक्षित मॉडल को दिए गए नए ऑब्जेक्ट की कक्षा कैसे प्राप्त करें

अब स्पैम वर्गीकरण का एक सरल मामला लेते हैं। आपका प्रशिक्षण डाटासेट ईमेल + संगत लेबल का एक कोष है - "स्पैम" या "स्पैम नहीं"। परीक्षण डेटासेट में एक ही संरचना होती है, लेकिन कुछ स्वतंत्र ईमेल से बना होता है (आम तौर पर कोई व्यक्ति अपने डेटासेट को विभाजित करता है और कहता है, इसका 9/10 भाग प्रशिक्षण के लिए और 1/10 परीक्षण के लिए उपयोग किया जाता है)। ईमेल को मॉडल करने का एक तरीका है कि उनमें से प्रत्येक को शब्दों के सेट (बैग) के रूप में दर्शाया जाए। यदि हम मानते हैं कि शब्द एक-दूसरे से स्वतंत्र हैं, तो हम Naive Bayes classifier का उपयोग कर सकते हैं , अर्थात, प्रत्येक शब्द और प्रत्येक वर्ग (प्रशिक्षण एल्गोरिथ्म) के लिए पूर्व संभाव्यता की गणना करें और फिर नए दस्तावेज़ से संबंधित संभावित संभावनाएँ खोजने के लिए Bayes प्रमेय लागू करें। विशेष वर्ग।

तो, मूल रूप से हमारे पास है:

raw model + training set + training algorithm -> trained model
trained model + classification algorithm + new object -> object label

अब ध्यान दें कि हमने शब्दों के एक बैग के रूप में हमारी वस्तुओं (दस्तावेजों) का प्रतिनिधित्व किया। लेकिन क्या एकमात्र तरीका है? वास्तव में, हम कच्चे पाठ से बहुत अधिक निकाल सकते हैं। उदाहरण के लिए, शब्दों के बजाय जैसा कि हम उनके तने या नींबू का उपयोग कर सकते हैं , शोर को रोकते हैं , शब्दों का पीओएस टैग जोड़ सकते हैं , नामित संस्थाएं निकाल सकते हैं या यहां तक ​​कि दस्तावेज़ की HTML संरचना का भी पता लगा सकते हैं। वास्तव में, एक दस्तावेज का अधिक सामान्य प्रतिनिधित्व (और, सामान्य रूप से, किसी भी वस्तु) एक फीचर वेक्टर है । पाठ के लिए उदाहरण:

actor, analogue, bad, burn, ..., NOUN, VERB, ADJ, ..., in_bold, ... | label
    0,        0,   1,    1, ...,    5,    7,   2, ...,       2, ... | not spam
    0,        1,   0,    0, ...,    3,   12,  10, ...,       0, ... | spam

यहाँ पहली पंक्ति संभावित विशेषताओं की सूची है और बाद की पंक्तियाँ बताती हैं कि किसी दस्तावेज़ में कितनी बार यह सुविधा होती है। उदाहरण के लिए पहले दस्तावेज़ में "अभिनेता" शब्द की कोई घटना नहीं है, "जलना" शब्द की 1 घटना, 5 संज्ञा, 2 विशेषण और पाठ के 2 टुकड़े बोल्ड। अंतिम कॉलम एक परिणामी क्लास लेबल से मेल खाता है।

फीचर वेक्टर का उपयोग करके आप अपने ग्रंथों के किसी भी गुण को शामिल कर सकते हैं। हालाँकि सुविधाओं के अच्छे सेट को खोजने में कुछ समय लग सकता है।

और मॉडल और एल्गोरिदम के बारे में क्या? क्या हम Naive Bayes के लिए बाध्य हैं। हर्गिज नहीं। लॉजिस्टिक रिग्रेशन , एसवीएम , निर्णय पेड़ - बस कुछ लोकप्रिय क्लासिफायर का उल्लेख करने के लिए। (ध्यान दें, कि हम "क्लासिफायर" कहते हैं ज्यादातर मामलों में हमारा मतलब है कि मॉडल + प्रशिक्षण और वर्गीकरण के लिए इसी एल्गोरिदम)।

कार्यान्वयन के लिए, आप कार्य को 2 भागों में विभाजित कर सकते हैं:

  1. निष्कर्षण - कच्चे ग्रंथों को फीचर वैक्टर में बदलना।
  2. ऑब्जेक्ट वर्गीकरण - मॉडल बनाना और लगाना।

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


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

@ मेरिटोलॉजी: हम्म, संदर्भ से मैं कहूंगा कि लेखक सिर्फ उन ठोस वर्गों के बारे में निश्चित नहीं है जो वह उपयोग करने जा रहे हैं, लेकिन फिर भी वर्गीकरण चाहते हैं, क्लस्टरिंग नहीं। वैसे भी, वह केवल एक ही व्यक्ति है जो सच्चाई :) जानता है
ffriend

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

@GrzegorzE। - यदि आपकी श्रेणियां पहले से परिभाषित हैं, तो कृपया अपने प्रश्न में इन तीन श्रेणियों को सूचीबद्ध करें। मेरी राय में, आप एमएल एल्गोरिदम पर केंद्रित हैं और आपकी समस्या की प्रकृति और आपके डेटा की प्रकृति पर पर्याप्त नहीं हैं। उदाहरण के लिए, आप अज्ञात संरचना के वेब साइटों के लिए सुविधाओं में "nonlinearies" की भविष्यवाणी करते हैं। क्यों? इसके अलावा, आप वेब पेज टेक्स्ट के साथ टैग्स को मिक्स करते हैं, जो जानते हैं कि क्या-और है, और उनका अलग अर्थ है।
Mreritology

@GrzegorzE। - मैं दृढ़ता से सुझाव देता हूं कि आपकी वर्गीकरण पद्धति को प्राथमिक रूप से आपकी प्राथमिकता श्रेणियों की प्रकृति और डेटा की प्रकृति द्वारा संचालित किया जाना चाहिए। वेब साइटों को 3 श्रेणियों में वर्गीकृत करने के लिए अनंत तरीके हैं। वर्गीकृत करने का प्रत्येक तरीका डेटा या मुख्य पैटर्न में मुख्य विशेषताएं सुझाएगा। व्यक्तिगत डेटा तत्वों (वेब ​​पेज) और उनके संदर्भ के मैनुअल विश्लेषण के लिए कोई विकल्प नहीं है।
MrMititology

5

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

आप प्रत्येक दस्तावेज़ को शब्दों के एक बैग के रूप में मानते हैं, और स्टॉप शब्दों को हटाने के लिए पूर्व-प्रक्रिया करते हैं, आदि सरल तरीकों के साथ, आप विषयों की संख्या को पूर्व-निर्दिष्ट करते हैं। आपके मामले में, आप या तो "3" निर्दिष्ट कर सकते हैं, जो श्रेणियों पर आपकी निश्चित सीमा है, या बड़ी संख्या में विषयों (10 और 100 के बीच) को चुनें, और फिर एक अलग चरण में, आम जोर के साथ दस्तावेजों के लिए तीन क्लस्टर बनाएं। विषय। K- साधन या अन्य क्लस्टरिंग विधियों का उपयोग किया जा सकता है। (मैं बाद के दृष्टिकोण की सिफारिश करूंगा)

आपको खरोंच से विषय मॉडलिंग सॉफ़्टवेयर को कोड करने की आवश्यकता नहीं है। यहाँ कई संसाधनों के साथ एक वेब पेज है, जिसमें सॉफ्टवेयर लाइब्रेरी / पैकेज शामिल हैं

कोई भी जावा में नहीं है, लेकिन जावा के तहत C ++ और पायथन चलाने के तरीके हैं।


4

यहां टेक्स्ट वर्गीकरण के लिए वास्तव में बहुत बढ़िया ओपन सोर्स सॉफ़्टवेयर पैकेज दिए गए हैं जो आपको शुरू करने में मदद करेंगे:

  • MALLET एक CPL- लाइसेंस प्राप्त जावा-आधारित मशीन लर्निंग टूलकिट है, जिसे टेक्स्ट डेटा के साथ काम करने के लिए UMass द्वारा बनाया गया है। इसमें कई वर्गीकरण एल्गोरिदम (जैसे, भोले बे, अधिकतम एन्ट्रापी, निर्णय पेड़) के कार्यान्वयन शामिल हैं ।
  • स्टैनफोर्ड वर्गीकरणकर्ता स्टैनफोर्ड NLP समूह से एक जीपीएल लाइसेंस प्राप्त एक अधिकतम एन्ट्रापी पाठ डेटा के साथ काम करने के लिए डिज़ाइन वर्गीकारक के जावा कार्यान्वयन है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.