जैसा कि हम ivi ऑनलाइन सिनेमा में नवीनतम कैटलॉग की अनुशंसा करते हैं (+ पायथन कोड)

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

इस लेख में, मैं सामग्री के "कोल्ड स्टार्ट" की समस्या के बारे में बात करूंगा। यदि आप यह जानने में रुचि रखते हैं कि हम उस सामग्री को कैसे सुझाते हैं जो हाल ही में कैटलॉग में जोड़ी गई है और उपयोगकर्ताओं से प्रतिक्रिया प्राप्त करने के लिए प्रबंधन नहीं करती है, तो बिल्ली का स्वागत करें।


लेख में केरस का उपयोग करके पायथन कोड का एक प्रतिलिपि प्रस्तुत करने योग्य नमूना होगा।

कंटेंट कोल्ड स्टार्ट: प्रॉब्लम स्टेटमेंट


सिफारिशें कैसे काम करती हैं? लगभग इस प्रकार है:


हम अनुशंसाओं के लिए निम्नलिखित पाइपलाइन का उपयोग करते हैं:

  • उपयोगकर्ता-सामग्री मैट्रिक्स के रूप में सामग्री दृश्य लोड लोड करें
  • मशीन सीखने जादू बॉक्स लागू होते हैं
  • कैटलॉग सुविधाओं की प्रत्येक इकाई के लिए बॉक्स से बाहर निकलें
  • हम अनुशंसाओं के लिए सामग्री की सुविधाओं का उपयोग करते हैं

कोल्ड स्टार्ट मॉडल ट्रेनिंग पाइपलाइन के सभी चरण इस रिपॉजिटरी github.com/ivi-ru/hydra में पाए जा सकते हैं
हमें निम्न प्रकार से अंतर्निहित लाइब्रेरी का उपयोग करके सामग्री सुविधाएँ मिलती हैं

train_model.py
import implicit import numpy as np from scipy.sparse import load_npz #   user-item user_item_views_coo = load_npz('/srv/data/user_item_interactions.npz') als_params = { 'factors': 40, 'regularization': 0.1, 'num_threads': 3, 'iterations': 5} print('  ALS-') als_model = implicit.als.AlternatingLeastSquares(**als_params) als_model.fit(user_item_views_coo.T) als_factors = als_model.item_factors print('ALS- ,   ', als_factors.shape) als_factors_filename = '/srv/data/fair_als_factors.npy' np.save(als_factors_filename, als_factors,allow_pickle=True) print('   ', als_factors_filename) 


हाल ही में सेवा पर निकली सामग्री की सिफारिश कैसे करें? ऐसी सामग्री में कोई दृश्य नहीं होगा (या बहुत कम विचार होंगे) - इसका मतलब है कि मशीन सीखने के जादू बॉक्स के निकास में ऐसी सामग्री के लिए कोई विशेषताएं नहीं होंगी और यह उपयोगकर्ता की सिफारिशों में प्रकट नहीं होगा। उपयोगकर्ता-सामग्री इंटरैक्शन के आधार पर जो सुविधाएँ हमें मिलती हैं, उन्हें सहयोगी कहा जाता है।

इस प्रकार, हम एक ठंडी शुरुआत की समस्या पर आते हैं: हम ऐसी सामग्री की सिफारिश कैसे कर सकते हैं जिसमें उपयोगकर्ता की प्रतिक्रिया नहीं है? यह संभव है, उदाहरण के लिए, एक नई सामग्री को यादृच्छिक आउटपुट में मिलाने और "कार्बनिक" दृश्य एकत्र होने तक प्रतीक्षा करें।

एक अन्य विकल्प एक मॉडल का निर्माण करना है जो "ठंड" सामग्री की सुविधाओं का अनुमान लगा सकता है।

हमने दूसरा रास्ता तय किया और हम जहां आए थे

कोल्ड स्टार्ट 1.0


ठंड की शुरुआत की समस्या को हल करने के लिए, हमें उन सामग्री विशेषताओं द्वारा मदद की जाती है, जो नई सामग्री के बारे में पहले से ज्ञात हैं, उदाहरण के लिए

  • व्यक्ति: निर्देशक, पटकथा लेखक, कलाकार
  • कंटेंट जॉनर: एक्शन, कॉमेडी आदि।
  • श्रेणी: फीचर फिल्म, कार्टून, वृत्तचित्र
  • संपादक टैग

संपादकीय टैग विशेषताओं के एक परिमित (आमतौर पर कई सौ) सेट के रूप में सामग्री का एक संक्षिप्त विवरण है। नीचे बीवर ज़ोंबी सामग्री टैग का एक सेट है


पहले सन्निकटन में, हमने कोल्ड स्टार्ट की समस्या को निम्नानुसार हल किया:

  • प्रत्येक "ठंड" सामग्री के लिए, टैग द्वारा इसे जितना संभव हो उतना पोंछें
  • समान सामग्री की सहयोगी विशेषताएं लें
  • ठंड सामग्री की सहयोगी विशेषताएं अपने "गर्म" पड़ोसियों की सुविधाओं का औसत है


अजगर में, यह कुछ इस तरह दिखता है
 for row in new_items_neighbors: neighbors_als_indices = row.neighbors_ids[:self.cold_start_neighbors_count] neighbors_average_factors = item_factors[neighbors_als_indices].mean(axis=0) #       ALS item_factors[row.new_item_als_index] = neighbors_average_factors 



इस विधि ने किसी तरह काम किया , लेकिन इसमें दो कमियां थीं:

  • कमजोर एक्स्टेंसिबिलिटी: यह जोड़ना मुश्किल है, उदाहरण के लिए, मॉडल में पोस्टर की समानता
  • कोई भी टैग में समान सामग्री के लिए ALS सुविधाओं की समानता की गारंटी नहीं देता है, और इसके बिना, औसत का उपयोग करना अजीब लगता है


हमें एहसास हुआ कि आप अब और नहीं रह सकते, और एक अधिक पारदर्शी और विस्तार योग्य मॉडल के साथ आए।

कोल्ड स्टार्ट मॉडल को फिर से बनाना



हेयर्सिस्टिक्स (जैसे औसत) का उपयोग करके एएलएस सामग्री सुविधाओं की गणना करने के बजाय, हम एक तंत्रिका नेटवर्क को प्रशिक्षित कर सकते हैं जो सहयोगी सामग्री सुविधाओं की भविष्यवाणी करेगा - उदाहरण के लिए, संपादक टैग द्वारा। एक समान मॉडल पहले ही हैबर के यहाँ दिखाई दिया , और यैंडेक्स से पहले Spotify संगीत सेवा ने एक समान मॉडल के बारे में बात की


मॉडल प्रोटोटाइप कोड ivi रिपॉजिटरी में उपलब्ध है , ठंड शुरू करने के लिए तंत्रिका नेटवर्क निम्नानुसार है:

cold_start_model.py
 def _get_model(self, dims: List[int]) -> Sequential: model = Sequential() model.add( Dense( units=dims[1], activation='linear', input_dim=dims[0], kernel_initializer=WeightInitializer.custom_normal, bias_initializer='zeros' ) ) model.compile( loss=lambda y_true, y_pred: K.sum(K.square(y_pred - y_true), axis=-1), optimizer=optimizers.Adam(lr=self.learning_rate, decay=self.decay) ) return model 


इस प्रयोग को लागू करते समय आपको किन कठिनाइयों का सामना करना पड़ा?

  • यह नेटवर्क को प्रशिक्षित करने के लिए काफी मुश्किल हो गया है: विशेषताएं एक-हॉट एन्कोडेड हैं, और इनपुट परत के बड़े आयाम के कारण नेटवर्क खराब रूप से प्रशिक्षित है। मुझे सुविधाओं का सावधानीपूर्वक चयन करना था, अंत में हम केवल श्रेणियों, शैलियों का उपयोग करते हैं, और संपादक टैग से हम tf-idf का उपयोग करके सबसे "महत्वपूर्ण" का चयन करते हैं
  • पाइपेन पैकेज मैनेजर का उपयोग करके केरेस को स्थापित करने में परेशानी: अजगर, पर्यावरण नहीं जा रहा था, मुझे तीसरे पक्ष के मैक्सवॉली पैकेज को खत्म करना पड़ा, जो कि केरे के साथ दोस्ती नहीं करता था

प्रयोग के परिणाम



नतीजतन, हमने नई कार्यक्षमता को थोड़ा कम कर दिया, जो कि एक दो स्प्रिंट के लिए, डेवलपर ने लगभग 100 घंटे बिताए - और यह हमारी परियोजना पर उत्पादन में तंत्रिका नेटवर्क का उपयोग करने का पहला अनुभव है। यह समय इस प्रकार वितरित किया गया था:

  • लेख पढ़ने और प्रोटोटाइप विकास के लिए 60 घंटा
  • प्रोटोटाइप को प्रोजेक्ट कोड बेस में एकीकृत करने के लिए 30 घंटे
  • नए मॉडल की तैनाती पर 10 घंटे - अजगर को अजगर के वातावरण में घसीटना हमारे विशिष्ट निर्भरता (जैसे मैक्सवोलपी) के कारण इतना सरल नहीं था

हमें आगे के प्रयोगों के लिए जगह मिली - तंत्रिका नेटवर्क का उपयोग आपको न केवल संपादक टैग पर, बल्कि अन्य विशेषताओं पर भी सीखने की अनुमति देता है: चित्र, स्क्रिप्ट, उपयोगकर्ता टिप्पणियाँ, फुटेज, आदि।

Source: https://habr.com/ru/post/hi478694/


All Articles