13

के लिए स्पार्क मैट्रिक्स फैक्टोरिज़ेशन मॉडल को अपडेट करने के लिए कैसे करें https://databricks-training.s3.amazonaws.com/movie-recommendation-with-mllib.html से प्रेरित मूवीलेन्स डीबी के लिए मैं एक सरल अनुशंसा प्रणाली तैयार करता हूं।एएलएस

मुझे यहां स्पष्ट प्रशिक्षण के साथ समस्याएं भी हैं: Apache Spark ALS collaborative filtering results. They don't make sense निहित प्रशिक्षण (स्पष्ट और निहित डेटा दोनों पर) का उपयोग करके मुझे उचित परिणाम मिलते हैं, लेकिन स्पष्ट प्रशिक्षण नहीं होता है।

हालांकि यह मेरे लिए ठीक है, मैं मॉडल को अपडेट करने के बारे में उत्सुक हूं। मेरे वर्तमान समाधान की तरह

  1. काम करता है जबकि सभी उपयोगकर्ता रेटिंग होने
  2. उत्पन्न मॉडल
  3. उपयोगकर्ता

के लिए सुझाव प्राप्त मैं इस तरह एक प्रवाह करना चाहते हैं:

  1. होने रेटिंग का आधार
  2. एक बार मॉडल उत्पन्न करें (वैकल्पिक सहेजें & लोड यह)
  3. (10 यादृच्छिक फिल्मों पर एक के द्वारा कुछ रेटिंग प्राप्त मॉडल में नहीं है!)
  4. मॉडल और नए उपयोगकर्ता रेटिंग

का उपयोग कर सिफारिशों इसलिए मैं अपने मॉडल को अपडेट करना होगा मिलता है, बिना पूरी तरह से इसे पूरी तरह से recompute। क्या ऐसा करने का कोई मौका है?

जबकि बैच प्रसंस्करण (जैसे रात के बैचों में सिफारिशें उत्पन्न करना) के लिए पहला तरीका अच्छा है, दूसरी तरफ सिफारिशों के लगभग लाइव उत्पादन के लिए अच्छा होगा।

+0

भी देखें इस समान प्रश्न http://stackoverflow.com/questions/28724639/how-to-augment-matrix-factors-in-spark- तक पहुँच देता है एएलएस-सिफारिशकर्ता –

+0

इसके अलावा, http://stackoverflow.com/questions/40809876/apache-spark-als-how-to-perform-live-recommendations-fold-in-anonym-user?rq=1 –

उत्तर

0

ऐसा लगता है कि आप किसी प्रकार का online learning करना चाहते हैं। यह धारणा है कि आप वास्तव में डेटा प्राप्त करते समय मॉडल को अपडेट कर रहे हैं। स्पार्क एमएलएलआईबी सीमित स्ट्रीमिंग मशीन सीखने के विकल्प है। streaming linear regression और streaming K-Means है।

कई मशीन सीखने की समस्या बैच समाधान के साथ ठीक काम करती है, शायद हर कुछ घंटों या दिनों में मॉडल को पुनः प्रशिक्षित करती है। इसे हल करने के लिए शायद रणनीतियां हैं।

एक विकल्प एक आदर्श मॉडल हो सकता है जहां आप अपने एएलएस के परिणामों को एक और मॉडल के साथ जोड़ते हैं जो अदृश्य फिल्मों के बारे में भविष्यवाणियां करने में मदद करता है।

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

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

5

संपादित करें: निम्नलिखित मेरे लिए काम किया क्योंकि मेरे पास फीडबैक रेटिंग थी और नए उपयोगकर्ता के लिए उत्पादों को रैंकिंग में केवल दिलचस्प था। अधिक जानकारी here


आप वास्तव में नए उपयोगकर्ताओं को प्रशिक्षित मॉडल का उपयोग कर के लिए पूर्वानुमान (यह अपडेट किए बिना) प्राप्त कर सकते हैं:

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

यानी यदि आप उपयोगकर्ता लेटेन्ट मैट्रिक्स हैं और आपका उत्पाद अव्यक्त मैट्रिक्स है, तो मैं मॉडल में उपयोगकर्ता के लिए, आपको स्कोर करके स्कोर प्राप्त होता है: u_i * v किसी नए उपयोगकर्ता के लिए, आपके पास एक गुप्त प्रतिनिधित्व नहीं है, इसलिए पूर्ण प्रतिनिधित्व पूर्ण_यू करें और करें: full_u * v^t * v यह नए उपयोगकर्ताओं के लिए गुप्त कारकों का अनुमान लगाएगा और उचित अनुशंसाएं देनी चाहिए (यदि मॉडल पहले से ही मौजूदा उपयोगकर्ताओं के लिए उचित सिफारिशें देता है)

प्रशिक्षण के प्रश्न का उत्तर देने के लिए, यह आपको मॉडल के भारी गणना करने के बिना नए उपयोगकर्ताओं के लिए भविष्यवाणियों की गणना करने की अनुमति देता है, जिसे आप केवल थोड़ी देर में ही कर सकते हैं। तो आप रात में प्रसंस्करण बैच कर रहे हैं और दिन के दौरान नए उपयोगकर्ता के लिए भविष्यवाणी कर सकते हैं।

नोट: MLLIB आप मैट्रिक्स यू और वी

+0

मैंने जोड़ा है इस पर आधारित एक नई पोस्ट: http://stackoverflow.com/questions/41537470/als-model-how-to-generate-full-u-vt-v –