17

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

मेरा प्लेटफार्म भविष्यवाणी आईओ है, और यह मूल रूप से स्पार्क (एमएलआईबीआईबी), एचबीएस, लोचदार खोज और कुछ अन्य आराम भागों के लिए एक रैपर है।

मेरे ऐप डेटा में "ईवेंट" वास्तविक समय में डाले जाते हैं, लेकिन अद्यतन पूर्वानुमान परिणाम प्राप्त करने के लिए मुझे "पियो ट्रेन" और "पियो तैनाती" की आवश्यकता होती है। इसमें कुछ समय लगता है और सर्वर पुनर्वितरण के दौरान ऑफ़लाइन चला जाता है।

मैं यह पता लगाने की कोशिश कर रहा हूं कि क्या मैं "भविष्यवाणी" चरण के दौरान वृद्धिशील प्रशिक्षण कर सकता हूं, लेकिन इसका उत्तर नहीं मिल रहा है।

+0

करता पीआईओ समर्थन स्पार्क स्ट्रीमिंग और StreamRDD से मौजूदा पूर्वानुमान परिणाम बढ़ाने? – javadba

+3

मैंने अभी जांच की है, [स्ट्रीमेड रैखिक प्रतिगमन] के लिए ऑनलाइन/वृद्धिशील प्रशिक्षण लागू किया गया है (http://spark.apache.org/docs/latest/mllib-linear-methods.html#streaming-linear-regression) और [स्ट्रीम किया गया क्लस्टरिंग] (http://spark.apache.org/docs/latest/mllib-clustering.html#streaming-clustering)। दुर्भाग्यवश कोई स्ट्रीमिंग सहयोगी फ़िल्टरिंग (एएलएस) और न ही अन्य स्ट्रीम किए गए वर्गीकरण/प्रतिगमन विधियों को स्ट्रीम किया गया है। – mucaho

+0

[स्ट्रीमिंग के-साधन] (http://spark.apache.org/docs/latest/mllib-clustering.html#streaming-k-means) –

उत्तर

0

(मैं पास लिखते हैं, क्योंकि चेहरा यह, सच ऑनलाइन अद्यतन असंभव है) के पास ऑनलाइन आपका मॉडल को अद्यतन करने के गुना में तकनीक का उपयोग करके के लिए, उदाहरण के लिए: Online-Updating Regularized Kernel Matrix Factorization Models for Large-Scale Recommender Systems.

कहां आप का कोड देख सकते हैं:

  • MyMediaLite
  • Oryx - ढांचे लैम्ब्डा वास्तुकला प्रतिमान के साथ निर्माण। और इसमें नए उपयोगकर्ताओं/वस्तुओं के फ़ोल्ड-इन के साथ अपडेट होना चाहिए। पास-ऑन लाइन प्रशिक्षण और नए उपयोगकर्ताओं से निपटने/मदों मिलाया गया:

यह समान question के लिए मेरा उत्तर जहां दोनों समस्याओं का हिस्सा है।

2

मुझे लगता है कि आप स्पार्क एमएलबीब के एएलएस मॉडल का उपयोग कर रहे हैं जो मैट्रिक्स कारककरण कर रहा है। मॉडल का परिणाम दो मैट्रिक्स उपयोगकर्ता-फीचर्स मैट्रिक्स और आइटम-फीचर्स मैट्रिक्स हैं।

मान लें कि हमें अंतर्निहित मामले के लिए रेटिंग या लेन-देन के साथ डेटा की एक स्ट्रीम प्राप्त करने जा रही है, इस मॉडल के वास्तविक (100%) ऑनलाइन अपडेट को प्रत्येक नई रेटिंग जानकारी के लिए मैट्रिक्स अपडेट करना होगा पूरे डेटा पर फिर से नई रेटिंग पर एएलएस मॉडल का पूर्ण प्रतिरक्षा। इस परिदृश्य में एक तथ्य इस तथ्य से सीमित है कि संपूर्ण एएलएस मॉडल चलाना कम्प्यूटेशनल रूप से महंगा है और डेटा की आने वाली धारा लगातार हो सकती है, इसलिए यह अक्सर एक पूर्ण प्रतिरक्षा को ट्रिगर करेगा।

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

https://github.com/brkyvz/streaming-matrix-factorization

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

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

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

SGD अद्यतन के लिए रुचिकर बातें:

http://stanford.edu/~rezab/classes/cme323/S15/notes/lec14.pdf

+0

यह एक बहुत ही व्यावहारिक उत्तर है! +1 – eliasah

0

मैट्रिक्स गुणन के लिए कागज इंक्रीमेंटल सीखने में recommender प्रणालियों में वे ए एल एस में वृद्धि सीखने के लिए एक तरफा कम से कम वर्गों दृष्टिकोण का इस्तेमाल किया।

http://ieeexplore.ieee.org/document/7840707/