2015-06-01 4 views
14

मैं वेब क्रॉल डंप पर 10 से अधिक टीबी + आकार के विशाल बड़े पैमाने पर डेटा पर word2vec को प्रशिक्षण देने की सोच रहा हूं।वर्ड 2vec को बहुत बड़े डेटासेट पर कैसे प्रशिक्षित किया जाए?

मैंने व्यक्तिगत रूप से सी कार्यान्वयन को प्रशिक्षित किया है, मेरे आईमैक पर GoogleNews-2012 डंप (1.5 जीबी) को प्रशिक्षित करने और वैक्टर उत्पन्न करने के लिए लगभग 3 घंटे लग गए (गति से प्रभावित)। मैं अजगर कार्यान्वयन हालांकि कोशिश नहीं :(मैंने कहीं पढ़ा है 300 वेक्टर लंबाई के विकि डंप (11gb) पर पैदा वैक्टर के बारे में 9 दिन लगते हैं कि उत्पन्न करने के लिए।

  1. word2vec तेजी लाने के लिए कैसे? मैं का उपयोग करने की आवश्यकता है वितरित मॉडल या मैं 2-3 दिनों में यह सब करने की ज़रूरत हार्डवेयर की किस प्रकार? मैं के साथ 8 जीबी राम आईमैक की है।

  2. कौन सा तेजी से? Gensim अजगर या सी अंतर्गत प्रयोग किया है?

मैं देख रहा हूँ वह शब्द 2vec कार्यान्वयन GPU प्रशिक्षण का समर्थन नहीं करता है।

उत्तर

28

स्केल पर Word2Vec मॉडल बनाने के कई अवसर हैं। जैसा कि आपने बताया, उम्मीदवार समाधान वितरित किए जाते हैं (और/या बहु-थ्रेडेड) या जीपीयू। यह एक विस्तृत सूची नहीं है लेकिन आशा है कि आपको आगे बढ़ने के तरीके के बारे में कुछ विचार मिलेंगे।

वितरित/मल्टी-थ्रेडिंग विकल्प: जहां यह मायने रखती है

  • Gensim Cython का उपयोग करता है, और के बराबर है, या नहीं सी कार्यान्वयन तुलना में बहुत धीमी। जेन्सिम का बहु-थ्रेडिंग अच्छी तरह से काम करता है, और पर्याप्त मेमोरी वाली मशीन का उपयोग करके और कोर की बड़ी संख्या में वेक्टर पीढ़ी के समय में काफी कमी आती है। आप अमेज़ॅन ईसी 2 16 या 32-कोर उदाहरणों का उपयोग कर जांच कर सकते हैं।
  • Deepdist एक क्लस्टर में जेनसिम वर्कलोड वितरित करने के लिए जेन्सिम और स्पार्क का उपयोग कर सकते हैं। डीपडिस्ट में कुछ चालाक एसजीडी अनुकूलन भी हैं जो नोड्स में ढाल को सिंक्रनाइज़ करते हैं। यदि आप मल्टी-कोर मशीनों को नोड्स के रूप में उपयोग करते हैं, तो आप क्लस्टरिंग और बहु-थ्रेडिंग दोनों का लाभ उठा सकते हैं।

Word2Vec GPU कार्यान्वयन की एक संख्या मौजूद है। बड़े डेटासेट आकार और सीमित GPU स्मृति को देखते हुए आपको क्लस्टरिंग रणनीति पर विचार करना पड़ सकता है।

  • Bidmach बहुत तेजी से जाहिरा तौर पर है (प्रलेखन लेकिन कमी है, और बेशक मैं इसे काम कर पाने के लिए संघर्ष करना पड़ा है)।
  • DL4J में वर्ड 2 वेक कार्यान्वयन है लेकिन टीम ने अभी तक क्यूब्लास जीम लागू नहीं किया है और यह अपेक्षाकृत धीमी बनाम सीपीयू है।
  • Keras एक पाइथन गहरी सीखने की ढांचा है जो थानो का उपयोग करती है। हालांकि यह word2vec प्रति से लागू नहीं करता है, यह एक एम्बेडिंग परत को कार्यान्वित करता है और शब्द वैक्टर बनाने और क्वेरी करने के लिए इसका उपयोग किया जा सकता है।

वहाँ परिपक्वता और समर्थन की डिग्री बदलती में, Word2Vec के अन्य CUDA कार्यान्वयन की एक संख्या हैं:

  • https://github.com/whatupbiatch/cuda-word2vec [, स्मृति प्रबंधन पहले बहुत अच्छा लगता है, हालांकि कैसे डेटासेट बनाने के लिए पर गैर existant प्रलेखन]
  • https://github.com/fengChenHPC/word2vec_cbow [बड़े डेटासेट पर सुपर फास्ट, लेकिन GPU स्मृति मुद्दों]

मेरा मानना ​​है कि SparkML टीम ने हाल ही एक प्रोटोटाइप जा रहा हो गया है cuBLAS आधारित वो rd2Vec कार्यान्वयन। आप इसकी जांच कर सकते हैं।

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