2011-02-05 15 views
17

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

यदि मुझे गलत नहीं लगता है, तो ऐसा करने का कोई तरीका नहीं दिखता है, जिसमें NaiveBayesClassifier.train विधि प्रशिक्षण डेटा का एक पूरा सेट लेती है। मूल सुविधाओं में भोजन किए बिना प्रशिक्षण डेटा में जोड़ने का कोई तरीका है?

मैं अन्य क्लासिफायर समेत सुझावों के लिए खुला हूं जो समय के साथ नए प्रशिक्षण डेटा को स्वीकार कर सकते हैं।

1) समय-समय पर नए आंकड़ों पर वर्गीकारक फिर से सीखें:

+1

क्या आपको अंत में इस समस्या का समाधान मिला? – w2lame

+0

मैंने बिना किसी प्रशिक्षण के नए प्रशिक्षण डेटा की आपूर्ति करने के लिए क्लासिफायर इंटर्नल्स के चारों ओर हैक किया। यह बहुत समय पहले था, इसलिए मुझे बिल्कुल याद नहीं है, लेकिन मुझे लगता है कि यह व्यवहार्य था। मैं उसके बाद परियोजना से दूर नहीं आया, इसलिए यह सक्रिय सेवा में नहीं है। – Rog

+0

ठीक है, उत्तर @rog के लिए धन्यवाद :) – w2lame

उत्तर

9

वहाँ 2 विकल्प है कि मैं के बारे में पता है। आप एक कॉर्पस में नए प्रशिक्षण डेटा जमा करेंगे (जिसमें पहले से ही मूल प्रशिक्षण डेटा शामिल है), फिर हर कुछ घंटों, & को फिर से वर्गीकृत करें। यह शायद सबसे सरल समाधान है।

2) आंतरिक मॉडल को बाहरी करें, फिर इसे मैन्युअल रूप से अपडेट करें। NaiveBayesClassifier इसे label_prodist और feature_probdist देकर सीधे बनाया जा सकता है। आप इन्हें अलग से बना सकते हैं, उन्हें NaiveBayesClassifier पर पास कर सकते हैं, फिर जब भी नया डेटा आता है तो उन्हें अपडेट करें। क्लासिफ़ायर तुरंत इस नए डेटा का उपयोग करेगा। संभाव्यता वितरण को अद्यतन करने के तरीके के विवरण के लिए आपको train विधि को देखना होगा।

+0

धन्यवाद याकूब! मैं विकल्प 1 से बचने की उम्मीद कर रहा हूं क्योंकि मुझे संदेह है कि प्रदर्शन के मुद्दे हो सकते हैं (मेरे पास बहुत से अलग क्लासिफायर होंगे)। मैं विकल्प 2 में देखूंगा, यह लगातार वर्गीकृत (या कम से कम ज्ञान) के साथ भी मदद कर सकता है, और पूरी चीज को चुनने से एक बड़ी बड़ी फ़ाइल उत्पन्न होती है (फिर, स्केलेबिलिटी पर विचार करना)। – Rog

+3

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

+0

सुझाव के लिए धन्यवाद। मैं कुछ memcached + डेटाबेस विकल्प भी देख रहा हूँ। – Rog

0

मैं सिर्फ एनएलटीके सीख रहा हूं, इसलिए अगर मैं गलत हूं तो कृपया मुझे सही करें। यह एनएलटीके की पायथन 3 शाखा का उपयोग कर रहा है, जो असंगत हो सकता है।

वहाँ NaiveBayesClassifier उदाहरण के लिए एक update() विधि, प्रशिक्षण डेटा में जोड़ने के लिए प्रकट होता है जो है:

from textblob.classifiers import NaiveBayesClassifier 

train = [ 
    ('training test totally tubular', 't'), 
] 

cl = NaiveBayesClassifier(train) 
cl.update([('super speeding special sport', 's')]) 

print('t', cl.classify('tubular test')) 
print('s', cl.classify('super special')) 

यह बाहर प्रिंट:

t t 
s s 
+2

ध्यान दें कि टेक्स्टब्लोब संभावनाओं को समायोजित करके मॉडल को "अद्यतन" नहीं करता है लेकिन यह एक नया मॉडल को रोकता है। – alvas

संबंधित मुद्दे