নতুন ব্যবহারকারীদের জন্য সুপারিশ: ALS স্পার্ক করুন


10

প্রশ্নটি

আমি স্পার্কে প্রশিক্ষিত একটি ALS মডেলটিতে একজন নতুন ব্যবহারকারীর জন্য রেটিংটি কীভাবে পূর্বাভাস করব? (নতুন = প্রশিক্ষণের সময় দেখা যায় না)

সমস্যাটি

আমি এখানে অফিসিয়াল স্পার্ক ALS টিউটোরিয়াল অনুসরণ করছি:

http://ampcamp.berkeley.edu/big-data-mini-course/movie-recommendation-with-mllib.html

আমি একটি শালীন এমএসই দিয়ে একটি ভাল সুপারিশকারী তৈরি করতে সক্ষম তবে আমি কীভাবে মডেলটিতে নতুন ডেটা ইনপুট করবেন তা নিয়ে লড়াই করছি। টিউটোরিয়াল প্রশিক্ষণের আগে প্রথম ব্যবহারকারীর রেটিং পরিবর্তন করে তবে এটি সত্যই হ্যাক। তারা নিম্নলিখিত ইঙ্গিত দেয়:

9.2। মেট্রিক্সের কারণগুলি বাড়িয়ে তোলা:

এই টিউটোরিয়ালে, আমরা প্রশিক্ষণের সেটটিতে আপনার রেটিংগুলি যুক্ত করব। আপনার জন্য সুপারিশ পাওয়ার আরও ভাল উপায় হ'ল প্রথমে একটি ম্যাট্রিক্স ফ্যাক্টেরাইজেশন মডেলকে প্রশিক্ষণ দেওয়া এবং তারপরে আপনার রেটিংগুলি ব্যবহার করে মডেলটিকে বাড়ানো। যদি এটি আপনার কাছে আকর্ষণীয় মনে হয় তবে আপনি ম্যাট্রিক্স ফ্যাক্টরাইজেশন মডেলের বাস্তবায়নটি একবার দেখে নিতে পারেন এবং কীভাবে নতুন ব্যবহারকারী এবং নতুন চলচ্চিত্রের জন্য মডেলটি আপডেট করবেন।

বাস্তবায়ন যদিও আমাকে কিছুটা সাহায্য করে না। আদর্শভাবে, আমি এমন কিছু সন্ধান করছি:

predictions = model.predictAllNew(newinput)

তবে এ জাতীয় পদ্ধতি নেই। আমি গিয়ে মূল আরডিডি সংশোধন করতে পারতাম, তবে আমি মনে করি এটির জন্য আমাকে মডেলটি পুনরায় প্রশিক্ষণ করতে হবে, সুতরাং এটি একটি আদর্শ সমাধানও হবে না। অবশ্যই আরও একটি মার্জিত উপায় আছে?

আমি এখন যেখানে আছি:

আমি মনে করি নতুন ভেক্টরের সুপ্ত প্রতিনিধিত্ব খুঁজে পাওয়া দরকার। মতে মূল কাগজ আমরা তাই মত এই গনা করতে পারেন:

এক্সতোমার দর্শন লগ করা=(ওয়াইটিসিতোমার দর্শন লগ করাওয়াই+ +λআমি)-1ওয়াইটিসিতোমার দর্শন লগ করাপি(তোমার দর্শন লগ করা)

কিন্তু যখন আমি কাগজে মানগুলি ব্যবহার করে গণনা করি, তখন এটি মডেলের মানগুলির সাথে মেলে না। আমি আলফা এবং নিয়মিতকরণের প্যারামিটারটি ঠিক করেছি, তবে আমি মনে করি এমএলএলআইবি ইমপ্লেন্টেশনটির আলাদা বাস্তবায়ন রয়েছে। এটি এখানে সংজ্ঞায়িত হয়েছে (দেখুন 1304 লাইন), তবে স্কালায় পারদর্শী নয়, এটি আমার পক্ষে প্রকৌশলীকে বিপরীত করা খুব কঠিন ...সিতোমার দর্শন লগ করা

আমার বর্তমান প্রচেষ্টা:

V = model.productFeatures().map(lambda x: (x[1])).collect() #product latent matrix Y

Cui =  alpha * np.abs(newinput)
Cui =  (1. + Cui) / (Cui)
Cui[np.where(newinput == 0)] = 0
Cui = np.diag(Cui)

lambdaI = len(np.where(newinput!=0)) * regularization_parameter * np.eye(np.shape(V)[1]) #
term   = np.dot(np.dot(Vt,Cui),V)+lambdaI
term   = np.dot(np.linalg.inv(term),Vt)
term   = np.dot(term,Cui)
term   = np.dot(term,newinput)
latentinput = term

তবে এটি মেলে না।

উত্তর:


9

এখানে প্রচুর প্রশ্ন। প্রথমত, কোনও ডেটাবিহীন সত্যিকারের নতুন ব্যবহারকারীর জন্য, কোনও সুপারিশকারী মডেল ব্যবহার করার উপায় নেই। যদি আপনার ব্যবহারকারীর সম্পর্কে আক্ষরিক কোনও তথ্য না থাকে তবে কেবলমাত্র কিছু করতে পারেন তা হ'ল কিছু ডিফল্ট সুপারিশ।

অবশ্যই, একবার আপনি কোনো ডেটা আছে, এবং আপনি যদি ব্যবহারকারীর নিগমবদ্ধ মডেল পুনর্নির্মাণের পারে, আপনি সুপারিশ করতে পারেন। আপনি স্পার্কে এটি করতে পারেন তবে আপনি এটি ইতিমধ্যে জানেন। রানটাইমের সময় আপনার নতুন ব্যবহারকারীদের সম্পর্কে তথ্য যুক্ত করার প্রয়োজন হলে এটি খুব বেশি সময় নিতে পারে। আপনি যে কৌশলটি চান তা "ফোল্ড-ইন" নামে পরিচিত, ব্যবহারকারী ব্যবহারকারী যে আইটেমগুলির সাথে ইন্টারেক্ট করে সেই আইটেমটি দিয়ে নতুন ব্যবহারকারী ভেক্টরটি (আনুমানিক) কী তা নির্ধারণ করতে ব্যবহৃত হয়। এটি কেবল কিছু লিনিয়ার বীজগণিত এবং আপনার দেওয়া সমীকরণটি অনুসরণ করে।

আমি একটি পুরানো স্লাইড খনন করেছি যা সাহায্য করতে পারে:

ALS ফোল্ড-ইন

"কিউ" আসলে আলাদা নয়। নেতিবাচক ইনপুট কেস পরিচালনা করতে আমি একটি 'এক্সটেনশন' যুক্ত করেছি, তবে ইতিবাচক ইনপুটটির ক্ষেত্রে এটি একই।

এখানে ভাঁজটির একটি বাস্তবায়ন রয়েছে, যদিও আমি মনে করি এটি অত্যধিক মূল্যবান হতে খুব ঘন হবে:

https://github.com/OryxProject/oryx/blob/2c01d496f93f2825a076eb7fe492aa39a5290aa6/app/oryx-app-common/src/main/java/com/cloudera/oryx/app/als/ALSUtils.java#L74

কোনও ব্যবহারকারী-আইটেম ইন্টারঅ্যাকশন দ্বারা নিহিত নতুন ব্যবহারকারী ভেক্টর গণনা করা মোটামুটি সহজ লিনিয়ার বীজগণিত। আমি যে জটিল অংশটি পেয়েছি তা স্থির করে দিচ্ছে যে এটি কতটা ওজন করা উচিত।

আশা করি এটি সঠিক দিকের দিকে ধাক্কা।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.