2014-11-09 4 views
5

मैं पायथन का उपयोग करके ट्वीट्स पर सेंटीमेंट विश्लेषण करने की कोशिश कर रहा हूं।भावनाओं के विश्लेषण के लिए लोग एन-ग्राम का उपयोग कैसे करते हैं, क्योंकि एन बढ़ने के कारण, स्मृति आवश्यकता भी तेजी से बढ़ती है?

आरंभ करने के लिए, मैंने एक एन-ग्राम मॉडल लागू किया है। तो, मान लीजिए कि हमारे प्रशिक्षण डेटा

I am a good kid 

He is a good kid, but he didn't get along with his sister much 

Unigrams है:

<i, am, a, good, kid, he, but, didnt, get, along, with, his, sister, much> 

Bigrams:

<(i am), (am a), (a good), (good kid), (he is), (is a), (kid but), (but he), (he didnt), (didnt get), (get along), (along with), (with his), (his sister), (sister much)> 

Trigrams:

<(i am a), (am a good), (a good kid), .........> 

अंतिम फीचर वेक्टर:

<i, am, a, good, kid, he, but, didnt, get, along, with, his, sister, much, (i am), (am a), (a good), (good kid), (he is), (is a), (kid but), (but he), (he didnt), (didnt get), (get along), (along with), (with his), (his sister), (sister much), (i am a), (am a good), (a good kid), .........> 

जब हम 8000 या तो प्रविष्टियों की एक बड़ी प्रशिक्षण डेटा, के लिए ऐसा करते हैं, फीचर वेक्टर के आयामी स्वरूप एक परिणाम के रूप में भी विशाल हो जाता है जिसमें से, मेरे कंप्यूटर (रैम = 16 जीबी) दुर्घटनाओं।

तो, जब लोग "एन-ग्राम्स" सुविधाओं के रूप में उपयोग करते हैं, तो 100 के कागजात में, वे किस बारे में बात कर रहे हैं? क्या मुझसे कुछ गलत हो रही है?

क्या लोग हमेशा "एन-ग्राम्स" के लिए कुछ फीचर चयन करते हैं? यदि हां, तो मुझे किस प्रकार का फीचर चयन देखना चाहिए?

मैं आप अपने अंतिम फीचर वेक्टर स्टोर यदि यह

+0

पूरे डेटा में आपके कितने अद्वितीय टोकन हैं? आपके फीचर वेक्टर का आकार क्या है? – Daniel

+0

यह सुनिश्चित करने के लिए कि आप प्रत्येक टोकन की एक प्रति केवल संग्रहित कर रहे हैं, 'intern() 'का उपयोग करें। – kindall

+1

आपकी सोच बिल्कुल सही है कि 'n' के बड़े मूल्यों के लिए, अंतिम सुविधा वेक्टर बड़ा होगा। हालांकि, इस तरह के एक बड़े वेक्टर को कुशलतापूर्वक स्टोर करना संभव है (शब्दों के सह-घटनाओं को जानना)। अलग-अलग, यह शायद ही कभी 'n> 6' का उपयोग करने के लिए समझ में आता है क्योंकि आपके पास अपर्याप्त प्रशिक्षण डेटा होगा (लंबी, पतली पूंछ की वजह से)।जब ये कागजात एन-ग्राम के बारे में बात करते हैं, तो वे एक स्केलेबल 'एन' के बारे में बात नहीं कर रहे हैं - वे आम तौर पर एक विशिष्ट' एन' (जिसका मूल्य परिणाम या प्रयोग अनुभाग में प्रकट किया जा सकता है) – inspectorG4dget

उत्तर

5

करने के लिए बिल्कुल के रूप में आप ने लिखा scikit-जानने का उपयोग कर रहा, मुझे लगता है मैं कुछ सुधार के साथ आ सकता है।

स्मृति समस्या इस तथ्य के कारण है कि सुविधाओं (ग्रंथों) को कई बार दोहराया जाता है, और टोकन भी हैं। इस प्रक्रिया पर विचार करें:

सबसे पहले, सभी विशिष्ट विशेषताओं को संग्रहीत किया जाता है (और एक सूचकांक दिया जाता है)।

उदाहरण के लिए,

1 - feature1 - (i am)

2 - feature2 - (हूँ क)

...

यह एक तो उत्पन्न करता है -कॉल फीचर स्पेस।

कुल में हजारों सुविधाएं हो सकती हैं, या इससे भी अधिक। लेकिन यह सामान्य होना चाहिए। तो प्रत्येक प्रविष्टि, जैसे संख्या का एक धारावाहिक के रूप में दुबारा लिखा हो सकता है

ENTRY1 ----- < 1,1,1,0, .... a_n> है, जिसकी पहली feature1 का मतलब है (मैं हूं) इस प्रविष्टि में 1 घटना है, और a_n सुविधा n की घटना की संख्या है।

मान लीजिए कि कई विशेषताएं हैं और प्रविष्टियां कम हैं, जिसका मतलब है कि प्रत्येक वेक्टर में बहुत सारे शून्य होते हैं।हम पिछले वेक्टर को निम्नलिखित के रूप में पुनः लिख सकते हैं,

प्रविष्टि 1 ---- {1: 1,2: 1,3: 1}, जिसका अर्थ है कि प्रविष्टि 1 की विशेषता 1/2/3 का मान 1 है, और मान अन्य सभी सुविधाओं में शून्य हैं। छोटा, है ना?

अंत में प्रत्येक प्रविष्टि को एक छोटे वेक्टर के रूप में दर्शाया जाता है, और आपको अपने कॉर्पस के लिए एक बड़ा मैट्रिक्स मिलता है। आपका कोष इस तरह अब लग सकती है:

{1: 1, 2: 1, 3: 1}

{2: 1, 29: 1, 1029: 1, 20,345: 1}

...

16 जी रैम 8000 प्रविष्टियों के लिए पर्याप्त है। आप बहुत कम उपयोग कर सकते हैं।


और यदि आप बहुत अधिक विशिष्ट टोकन प्राप्त करते हैं (जिसका अर्थ है बहुत अधिक सुविधाएं)। फीचर स्पेस का निर्माण करते समय, क्या किया जा सकता है उन सुविधाओं को हटाने के लिए जिनकी फ्रीक्वेंसी थ्रेसहोल्ड से कम है, 3 बार कहें। फीचर स्पेस का आकार आधा, या यहां तक ​​कि छोटा भी घटाया जा सकता है।

+0

उसमें जोड़ने के लिए: यदि आप कंप्यूटर क्रैश हो जाते हैं, तो हो सकता है कि आपने स्पैर मैट्रिक्स प्रारूप को परिवर्तित करने का प्रयास किया हो जो कि पूर्व-योग को एक numpy सरणी में उल्लिखित करता है, जो स्पष्ट रूप से सभी 0 प्रविष्टियों का प्रतिनिधित्व करने का प्रयास करता है। यह एक दुर्घटना का कारण बन जाएगा। –

2

इंस्पेक्टर जी 4 डीजेट ने टिप्पणियों में कहा, आप शायद ही कभी उच्च एन-ग्राम पर जाएं, उदा। एन = 5 या एन = 6, क्योंकि आपके पास इसे सार्थक बनाने के लिए पर्याप्त प्रशिक्षण डेटा नहीं होगा। दूसरे शब्दों में अपना 6 ग्राम के लगभग सभी, इसके अलावा 1. की एक घटना गिनती है inspectorG4dget की टिप्पणी उद्धृत करने के लिए होगा:, इन कागजों के बारे में एन-ग्राम बात करते हैं

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

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

कुछ अनुकूलन आप कर सकते हैं। यदि कॉर्पस स्मृति में आयोजित किया जा रहा है, तो प्रत्येक एन-ग्राम को केवल कॉर्पस में पहली घटना के लिए एक अनुक्रमणिका होना चाहिए; स्ट्रिंग को दोहराने की आवश्यकता नहीं है।

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

+0

उत्कृष्टता से किया गया! – inspectorG4dget

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

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