मैं सामान्य विषयों द्वारा कैसे तार कर सकता हूं?


10

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

ठहरनेवाला: बड़ी संख्या में तारों को देखते हुए, मैं उन्हें शब्दार्थ विषय द्वारा समूहीकृत कैसे करूंगा?

विशेष अनुप्रयोग: मेरे पास ~ 200k सामान्य ज्ञान के प्रश्न हैं जो मैं सामान्य समूहों (कारों, कंप्यूटरों, राजनीति, कनाडा, भोजन, बराक ओबामा, आदि) में वर्गीकृत करना चाहूंगा।

मैंने जो देखा है: विकिपीडिया में प्राकृतिक भाषा प्रसंस्करण टूलकिट्स की एक सूची है (यह मानते हुए कि मैं जो करने की कोशिश कर रहा हूं, उसे वास्तव में एनएलपी कहा जाता है) इसलिए मैंने कुछ पर ध्यान दिया है लेकिन कोई भी मेरी जरूरतों के समान कुछ भी नहीं करता है।

नोट: यह बताया गया है कि ऐसा करने के लिए अतिरिक्त ज्ञान की आवश्यकता होती है (उदाहरण के लिए एक पॉर्श एक कार, C ++ एक प्रोग्रामिंग भाषा है)। मैं मानता हूं कि प्रशिक्षण डेटा की आवश्यकता है, लेकिन अगर मेरे पास केवल प्रश्नों और उत्तरों की सूची है, तो मैं प्रशिक्षण डेटा कैसे उत्पन्न कर सकता हूं? और फिर मैं प्रशिक्षण डेटा का उपयोग कैसे करूं?

अधिक नोट्स: यदि मेरा प्रश्नोत्तर की वर्तमान स्वरूपण और मदद (हालांकि यह JSON जैसा दिखता है, तो यह मूल रूप से एक कच्ची पाठ फ़ाइल है):

// row 1: is metadata
// row 2: is a very specific kind of "category"
// row 3: is the question
// row 4: is the answer
{
  15343
  A MUSICAL PASTICHE
  Of classical music's "three B's", he was the one born in Hamburg in 1833
  Johannes Brahms
}

लेकिन इससे पहले कि कोई इंगित करता है कि पहले से ही एक श्रेणी मौजूद है, ध्यान दें कि इस तरह ~ 200k प्रश्न और उत्तर हैं, और मूल रूप से कई "श्रेणियां" हैं। मैं इन्हें ऊपर सूचीबद्ध लोगों की तरह समूह में शामिल करने की कोशिश कर रहा हूं। साथ ही, यह प्रारूपण सभी प्रश्नों के लिए बहुत आसानी से बदला जा सकता है, मैं इसे प्रोग्रामेटिक रूप से करता हूं।

और अधिक नोट्स: मुझे वास्तव में नहीं पता है कि मुझे कितने श्रेणियों (कम से कम 10-20) की आवश्यकता होगी, क्योंकि मैंने स्वयं सभी प्रश्नों के माध्यम से नहीं पढ़ा है । मैं आंशिक रूप से परिमित करने के दौरान किसी भी तरह परिमित संख्या निर्धारित होने की उम्मीद कर रहा था। किसी भी मामले में, मैं हमेशा कई श्रेणियों को मैन्युअल रूप से बना सकता हूं।


आप गाजर का उपयोग कैसे कर रहे थे? इसके बारे में मेरे संक्षिप्त पढ़ने से, ऐसा लगता है कि इसे आसानी से 200k रिकॉर्ड को संभालना चाहिए।

जितना मैंने सोचा था, उससे बहुत अधिक समय लगा, और मुझे जेवीएम की प्रारंभिक मेमोरी अलॉटमेंट को 1024 मीटर और अधिकतम मेमोरी को 2048 मीटर तक बढ़ाने के लिए मजबूर किया। यह उतना बुरा नहीं था जितना मैंने उस आवाज़ को बनाया होगा।

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

एह, आप थोक प्रसंस्करण कर रहे हैं; जेवीएम देना वास्तव में कोई समस्या नहीं है। इसके लिए कितना समय लगा? आप दस्तावेज़ कहाँ से लोड कर रहे थे? एक कस्टम स्रोत?

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

जवाबों:


4

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

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


धन्यवाद, चेन का ब्लॉग पोस्ट मुझे क्या करने की कोशिश कर रहा है पर हाजिर होना चाहिए। क्या आपने ऐसा कोई मौका इस्तेमाल किया है, जिसे आपने पहले सूचीबद्ध किया हो / किया हो? मैं यहां पूरी तरह से नए आधार पर हूं और मुझे जो कुछ करने की जरूरत है उसके एक पूर्वाभ्यास की सराहना करेंगे (ऑफ-द-शेल्फ समाधानों में से एक का उपयोग करके)। मुझे अपने "दस्तावेजों" को कैसे प्रारूपित करना चाहिए? क्या मुझे प्रत्येक क्यू एंड ए में आईडी लागू करनी चाहिए जिससे मुझे पता चल सके कि कौन सा दस्तावेज किस समूह में है? मैं आउटपुट डेटा का उपयोग कैसे करूं? जैसा कि मैंने कहा, मुझे बहुत सारे विवरण समझ में नहीं आते हैं।
Whymarrh

मैं आर विषयmodels पैकेज का उपयोग किया है एक सा। मैं निश्चित रूप से इसे अपने स्वयं के कोड को रोल करने की सलाह दूंगा - क्रैन.प्रो- प्रोग्रैड.ओआर / ईवीबी / पैकेजेज / topicmodels / vignettes/… पर काम करने के उदाहरण के साथ कुछ प्रलेखन है । प्रत्येक दस्तावेज़ का विशिष्ट स्वरूपण वास्तव में मायने नहीं रखता है, क्योंकि सब कुछ वैसे भी "शब्दों के बैग" प्रतिनिधित्व को कम करने वाला है। बस संबंधित पाठ को एक स्ट्रिंग में फेंक दें।
मार्टिन ओ'लेरी

4

आप यहां दो समस्याओं को हल करने का प्रयास कर रहे हैं।

समस्या 1: उचित श्रेणी में प्रश्नों के तार वर्गीकृत करें।

समस्या 2: उचित श्रेणियां बनाएँ।

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

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

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

फिर, कुछ नए सवाल उठते हैं। पहला: मुझे कितना प्रशिक्षण डेटा चाहिए? "निर्भर करता है"। आपके डेटा या श्रेणियों को देखे बिना मुझे यकीन नहीं है कि मैं एक अनुमान भी लगाऊंगा; लेकिन मैं एक "बॉलपार्क अनुमान" ले सकता हूं और 500 सवालों के बारे में कह सकता हूं। ध्यान दें कि मैं परिमाण के एक क्रम से बंद हो सकता हूं।

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

जब आपके पास पर्याप्त मात्रा में प्रशिक्षण डेटा होता है, तो इसका 75% हिस्सा लें और अपने पसंदीदा टूल (जैसे कि यहां उल्लेखित या नोट) का उपयोग करके एक क्लासिफायरियर बनाएं। अब, क्लासिफायर ने डेटा के 25% हिस्से को लेबल करने की कोशिश की और परिणामी एक्यूप्रेसी को भुनाया। यदि परिणाम अच्छा है, तो पॉप शैम्पेन। यदि नहीं, तो अधिक प्रशिक्षण डेटा बनाएं या किसी अन्य क्लासिफायरियर का प्रयास करें।

टी एल; डॉ

संक्षेप में, यहाँ बताया गया है कि मैंने यह कैसे किया।

0) Use a supervised learner.
1) Create a category set yourself. 
2) Label manually about 500 questions
3) Use 75% of those to train a classifier.
4) Check performance.
5) If good then cheers else goto 2.

एक छोटा सा प्रश्न: आप प्रशिक्षण डेटा के लिए "लगभग 500 प्रश्न" कहते हैं और मैन्युअल रूप से उन पर टैग लगाने के लिए, लेकिन "मैं परिमाण के क्रम से बंद हो सकता हूं", इसलिए यदि मुझे इसके बजाय 5k या 50k प्रश्नों का उपयोग करना था, तो क्या मैं अभी भी करूंगा? मैन्युअल रूप से टैग कि कई?

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

परिमाण के एक क्रम से मेरा मतलब था 50-500-5000। मुझे नहीं लगता कि आपको 50k वर्गीकृत करने की आवश्यकता होगी। यह आपकी पूरी लाश का 1/4 हिस्सा है! क्या 500 सवाल बहुत कम होने चाहिए, यह क्लासिफायर के बूटस्ट्रैप के लिए संभव है। यहां विचार यह है कि आप क्लासिफायर को एक छोटे प्रारंभिक कॉर्पस (उदाहरण के लिए अपने 500) पर प्रशिक्षित करते हैं और फिर बाकी को टैग करते हैं। अब, आप कुछ ऐसे मामलों का उपयोग कर सकते हैं जहाँ क्लासिफायर एक नए, बड़े क्लासिफायरफायर को वापस लेने के लिए बहुत आश्वस्त था।

एक और महत्वपूर्ण बात ध्यान में रखना; कई क्लासिफायर का प्रदर्शन प्रशिक्षण डेटा की मात्रा में रैखिक नहीं है, लेकिन आम तौर पर वक्र की तरह एक सिग्मॉइड होगा। इसका मतलब है कि 500 ​​और टैग किए गए प्रश्न लगभग 5000 के रूप में अच्छे लाभ के रूप में हो सकते हैं। मेरी सलाह है कि छोटे चरणों में काम करें।

क्या विवरण मेरी परियोजना में अतिरिक्त जानकारी प्रदान करेगा? मैं अपनी स्वरूपण दिखाने के लिए कुछ उदाहरण प्रश्न साझा कर सकता हूं, लेकिन मैं वर्गीकरण प्रक्रिया को फिट करने के लिए अपने प्रश्नोत्तर के प्रारूप को तैयार करने के लिए तैयार हूं। मैं मदद की सराहना करता हूं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.