2013-02-26 64 views
5

मेरे पास 3000 टेक्स्ट दस्तावेज़ हैं जो दस्तावेज़ की "रोचक" होने पर समय की अवधि से संबंधित हैं। तो आइए कहें कि दस्तावेज़ 1 में सामग्री के साथ टेक्स्ट की 300 लाइनें हैं, जिसके कारण 5.5 दिनों के ब्याज की अवधि हुई, जबकि पाठ के 40 लाइनों वाले दूसरे दस्तावेज़ में 6.7 दिनों की अवधि "रोचक" हो गई, और इसी तरह।टेक्स्ट दस्तावेज़ों से निरंतर मूल्य (समय) की भविष्यवाणी कैसे करें?

अब कार्य टेक्स्ट सामग्री के आधार पर ब्याज की अवधि (जो एक निरंतर मूल्य है) की भविष्यवाणी करना है।

  1. http://radimrehurek.com/gensim/simserver.html की तरह एक तकनीक के साथ इसी तरह के दस्तावेजों के एक मॉडल बिल्ड:

    मैं दो विचारों समस्या दृष्टिकोण करने के लिए है। जब कोई नया दस्तावेज़ आता है तो कोई अतीत में 10 सबसे समान दस्तावेजों को खोजने का प्रयास कर सकता है और बस अपनी अवधि के औसत की गणना कर सकता है और उस दस्तावेज़ को नए दस्तावेज़ के लिए ब्याज की अवधि के लिए भविष्यवाणी के रूप में ले सकता है।

  2. दस्तावेजों को अवधि की श्रेणियों में रखें (उदा। 1 दिन, 2 दिन, 3-5 दिन, 6-10 दिन, ...)। फिर पाठ सामग्री के आधार पर अवधि की श्रेणी की भविष्यवाणी करने के लिए एक वर्गीकृत को प्रशिक्षित करें।

# 1 विचार का लाभ यह है कि मैं भी, मेरी भविष्यवाणी के मानक विचलन की गणना कर सकता है जबकि विचार # 2 के साथ यह मेरे लिए कम स्पष्ट है, कैसे मैं अपने भविष्यवाणी की अनिश्चितता का एक समान उपाय गणना कर सकता है। यह भी स्पष्ट नहीं है कि वर्गीकरण से सर्वोत्तम परिणाम प्राप्त करने के लिए कौन सी श्रेणियां चुनी गई हैं।

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

+0

@ लार्समैन: एक तरफ आप इस सवाल का जवाब क्यों देते हैं, लेकिन दूसरी ओर आप इस प्रश्न को बंद विषय के रूप में बंद करने के लिए वोट देते हैं? – asmaier

उत्तर

1

(निम्नलिखित मेरे अकादमिक "अनुभव" पर आधारित है, लेकिन इसे पोस्ट करने के लिए पर्याप्त जानकारीपूर्ण लगता है)।

ऐसा लगता है कि अपने कार्य की तरह के रूप में पुनर्निर्मित किया जा सकता है:

रन बनाए दस्तावेजों की एक प्रशिक्षण सेट को देखते हुए, मनमाने ढंग से सामग्री के आधार पर दस्तावेजों स्कोरिंग के लिए एक प्रणाली डिजाइन।

"उनकी सामग्री के आधार पर" बहुत संदिग्ध है। वास्तव में, मैं कहूंगा कि यह बहुत संदिग्ध है। आप उन दस्तावेजों की एक विशिष्ट विशेषता को खोजने का प्रयास कर सकते हैं जो स्कोर के लिए जिम्मेदार प्रतीत होता है। यह एक मानवीय कार्य है जब तक कि आप इसे कम नहीं कर सकते, उदा। आप जानते हैं कि आप कुछ "मूल्यवान" शब्दों की तलाश में हैं जो स्कोर बनाते हैं, या शायद शब्दों के समूह (http://en.wikipedia.org/wiki/N-gram पर एक नज़र डालें)।

आप एक समानता माप, sim(doc1, doc2) के आधार पर एक खोज-इंजन जैसी प्रणाली विकसित करने का भी प्रयास कर सकते हैं। हालांकि, आपको सभी संभावित स्कोर (सबसे कम से उच्चतम, कई बार) की एक बड़ी कॉर्पस की आवश्यकता होगी, इसलिए प्रत्येक इनपुट दस्तावेज़ के लिए, समान दस्तावेजों के पास अस्तित्व का मौका होगा। अन्यथा, परिणाम असंगत होगा।

क्या सिम() को महत्व देता वापसी होगी पर निर्भर करता है, उपाय की तरह एक रिश्ते fullfill चाहिए:

sim(doc1,doc2) == 1.0 - |score(doc1) - score(doc2)|. 

माप की गुणवत्ता का परीक्षण करने के लिए आपको समानता की गणना और ducuments की प्रत्येक जोड़ी के लिए अंतर स्कोर सकता है , और correlation की जाँच करें।

पहले ले tf-idf

तुम भी डेटा के वर्गीकरण उल्लेख किया है का उपयोग कर cosine similarity होगा। ऐसा लगता है कि मुझे एक समान समानता माप "उचित" पद्धति की तरह लगता है। अर्थात। यदि उपाय अच्छा है, तो यह स्पष्ट होना चाहिए कि दस्तावेज़ किस श्रेणी में आ जाएगा। क्लासिफायर के लिए, आपके दस्तावेज़ों में पहले कुछ "विशेषताएं" परिभाषित होनी चाहिए।

आप दस्तावेज़ों का विशाल संग्रह था, तो आप प्रक्रिया में तेजी लाने clustering की कोशिश कर सकते।

अन्त में, अंतिम स्कोर निर्धारित करने के लिए, मैं कुछ सबसे इसी तरह के दस्तावेजों के स्कोर प्रसंस्करण सुझाव है। एक कच्चे औसत, इस मामले में सबसे अच्छा विचार नहीं हो सकता है क्योंकि "कम इसी तरह की" भी मतलब होगा "कम सटीक"। Simple implementation of N-Gram, tf-idf and Cosine similarity in Python:

कार्यान्वयन के लिए के रूप में, पर एक नजर है।

(IMHO, 3000 दस्तावेजों उनकी सामग्री के आगे ज्ञान या सामग्री और स्कोर के बीच के रिश्ते के बिना कुछ भी इसके साथ विश्वसनीय करने के लिए जिस तरह से बहुत कम संख्या है।)

3

दृष्टिकोण (1) कहा जाता है k-निकटतम पड़ोसियों प्रतिगमन। यह पूरी तरह से मान्य है। तो रिग्रेशन के असंख्य अन्य दृष्टिकोण हैं, उदा। दस्तावेजों के टोकन का उपयोग सुविधाओं के रूप में सादा एकाधिक प्रतिगमन।

from sklearn.feature_extraction.text import TfidfVectorizer 
from sklearn.linear_model import SGDRegressor 

# build a term-document matrix with tf-idf weights for the terms 
vect = TfidfVectorizer(input="filename") 
Xtrain = vect.fit_transform(documents)   # documents: list of filenames 

# now set ytrain to a list of durations, such that ytrain[i] is the duration 
# of documents[i] 
ytrain = ... 

# train a linear regression model using stochastic gradient descent (SGD) 
regr = SGDRegressor() 
regr.fit(Xtrain, ytrain) 

यह है कि:

यहाँ का उपयोग कर एक रेखीय प्रतिगमन मॉडल scikit-learn (*) फिट करने के लिए आधारभूत स्क्रिप्ट है। अब आप नए दस्तावेज़ों जिसके लिए आप ब्याज की अवधि की भविष्यवाणी करना चाहते हैं,

Xtest = vect.transform(new_documents) 
ytest = regr.predict(Xtest) 

करते हैं यह एक सरल रेखीय प्रतीपगमन है। हकीकत में, मैं उम्मीद करता हूं कि ब्याज अवधि किसी टेक्स्ट की सामग्री का रैखिक कार्य न हो, लेकिन यह आपको शुरू हो सकती है। अगले कदम के लिए मशीन सीखने या आँकड़े बताते हैं कि और अधिक उन्नत प्रतिगमन मॉडल व्यवहार करता है पर किसी भी पाठ्यपुस्तक लेने के लिए होगा।

(*) मैं इस परियोजना में योगदानकर्ता हूं, इसलिए यह निष्पक्ष सलाह नहीं है। बस किसी भी अर्ध-सभ्य मशीन लर्निंग टूलकिट में रैखिक रिग्रेशन मॉडल हैं।

+0

दृष्टिकोण देने के लिए धन्यवाद (1) एक नाम: के-निकटतम पड़ोसियों के प्रतिगमन। इससे मुझे बहुत मदद मिलती है। – asmaier

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

  • कोई संबंधित समस्या नहीं^_^