paint-brush
কিভাবে মেশিন লার্নিং ছাড়া একটি বেসিক রেকমেন্ডেশন ইঞ্জিন তৈরি করবেনদ্বারা@thestartupdeveloper
699 পড়া
699 পড়া

কিভাবে মেশিন লার্নিং ছাড়া একটি বেসিক রেকমেন্ডেশন ইঞ্জিন তৈরি করবেন

দ্বারা Aditya Kumar11m2024/03/18
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

এই নিবন্ধটি মেশিন লার্নিং মডেল ছাড়াই একটি সুপারিশ ইঞ্জিনের বিকাশের বিষয়ে আলোচনা করে, মূল প্রয়োজনীয়তা, সিস্টেম আর্কিটেকচার এবং ব্যবহৃত সরঞ্জামগুলির অন্তর্দৃষ্টি প্রদান করে। ব্যবহারকারীর আগ্রহ ক্যাপচার করার জন্য, উচ্চ মানের সুপারিশ তৈরি করা এবং সর্বোত্তম সিস্টেম কার্যকারিতা নিশ্চিত করার জন্য কৌশলগুলি আবিষ্কার করুন৷
featured image - কিভাবে মেশিন লার্নিং ছাড়া একটি বেসিক রেকমেন্ডেশন ইঞ্জিন তৈরি করবেন
Aditya Kumar HackerNoon profile picture
0-item


সুপারিশ ব্যবস্থা আমাদের জীবনের একটি অবিচ্ছেদ্য এবং অপরিহার্য অংশ হয়ে উঠেছে। এই বুদ্ধিমান অ্যালগরিদমগুলি আমাদের অনলাইন অভিজ্ঞতাগুলিকে আকার দিতে, আমরা যে সামগ্রী ব্যবহার করি, আমরা যে পণ্যগুলি কিনি এবং আমরা যে পরিষেবাগুলি অন্বেষণ করি তা প্রভাবিত করে৷ আমরা Netflix- এর মতো প্ল্যাটফর্মে বিষয়বস্তু স্ট্রিম করছি, Spotify- এ নতুন মিউজিক আবিষ্কার করছি বা অনলাইনে কেনাকাটা করছি না কেন, সুপারিশ সিস্টেমগুলি আমাদের মিথস্ক্রিয়াকে ব্যক্তিগতকৃত এবং উন্নত করার জন্য নীরবে পর্দার আড়ালে কাজ করছে।


এই সুপারিশ সিস্টেমগুলির অনন্য উপাদান হল ঐতিহাসিক আচরণ এবং ব্যবহারকারীর নিদর্শনগুলির উপর ভিত্তি করে আমাদের পছন্দগুলি বোঝার এবং ভবিষ্যদ্বাণী করার ক্ষমতা। আমাদের অতীতের পছন্দগুলি বিশ্লেষণ করে, এই সিস্টেমগুলি আমাদের আগ্রহের সাথে সারিবদ্ধ বিষয়বস্তু/পণ্যগুলির সাথে আমাদের পরিচয় করিয়ে দেওয়ার সময় আমাদের সময় এবং শ্রম সাশ্রয় করে, উপযোগী পরামর্শগুলি তৈরি করে৷ এটি ব্যবহারকারীর সন্তুষ্টি বাড়ায় এবং আবিষ্কারকে উৎসাহিত করে, নতুন এবং প্রাসঙ্গিক অফারগুলির সাথে আমাদের পরিচয় করিয়ে দেয় যা আমরা অন্যথায় সম্মুখীন হইনি।


উচ্চ স্তরে, বিকাশকারীরা বোঝেন যে এই অ্যালগরিদমগুলি মেশিন লার্নিং এবং গভীর শিক্ষার সিস্টেম দ্বারা চালিত হয় (আন্তঃপরিবর্তনযোগ্যভাবে নিউরাল নেটওয়ার্ক বলা হয়), কিন্তু আমি যদি আপনাকে বলি যে আপনার নিউরাল স্থাপনের যন্ত্রণার মধ্য দিয়ে না গিয়ে একটি সুপারিশ ইঞ্জিন তৈরি করার একটি উপায় আছে? নেট বা মেশিন লার্নিং মডেল?


এই প্রশ্নটি বিশেষভাবে প্রারম্ভিক এবং মধ্য-পর্যায়ের স্টার্টআপগুলির প্রসঙ্গে প্রাসঙ্গিক কারণ তাদের মডেলগুলিকে প্রশিক্ষণ দেওয়ার জন্য তাদের কাছে প্রচুর স্ট্রাকচার্ড ডেটা নেই। এবং আমরা ইতিমধ্যে জানি, বেশিরভাগ মেশিন লার্নিং মডেল সঠিক প্রশিক্ষণের ডেটা ছাড়া সঠিক ভবিষ্যদ্বাণী দেবে না।


আমি সম্প্রতি একটি জন্য একটি মৌলিক সুপারিশ ইঞ্জিন তৈরি এবং স্থাপন করেছি ভয়েস-প্রথম সামাজিক নেটওয়ার্ক , যা আমাদের মূল মেট্রিক্সে 40% লাফিয়েছে। এই ব্লগটি লেখার সময়, সিস্টেমটি প্রতি মাসে 30 মিলিয়নেরও বেশি সুপারিশ তৈরি করছে। যদিও এই সুপারিশ সিস্টেমটি একটি সামাজিক নেটওয়ার্কের জন্য তৈরি করা হয়েছিল, আপনি যেকোন ব্যবহারের ক্ষেত্রে মৌলিক আর্কিটেকচার প্রয়োগ করতে পারেন, যেমন পণ্যের সুপারিশ, সঙ্গীত সুপারিশ, পাঠ্য এবং ভিডিও প্ল্যাটফর্মে বিষয়বস্তু সুপারিশ বা অন্য কিছু। আমাকে সমস্যা বিবৃতি বর্ণনা করে শুরু করা যাক.


প্রকৌশল দৃষ্টিকোণ থেকে সমস্যা বিবৃতি

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


একটি উচ্চ স্তরে, আমাদের প্রকৌশল দৃষ্টিকোণ থেকে নিম্নলিখিত প্রয়োজনীয়তা ছিল -


  1. সিস্টেমটি কীওয়ার্ড আকারে ব্যবহারকারীর আগ্রহ ক্যাপচার করতে সক্ষম হওয়া উচিত। সিস্টেমটি নির্দিষ্ট কীওয়ার্ডের সাথে ব্যবহারকারীর আগ্রহের স্তরকে শ্রেণীবদ্ধ করতে সক্ষম হওয়া উচিত।


  2. সিস্টেমটি অন্য ব্যবহারকারীদের প্রতি ব্যবহারকারীর আগ্রহ ক্যাপচার করতে সক্ষম হওয়া উচিত। এটি অন্য ব্যবহারকারীর দ্বারা তৈরি সামগ্রীতে ব্যবহারকারীর আগ্রহের স্তরকে শ্রেণিবদ্ধ করতে সক্ষম হওয়া উচিত।


  3. সিস্টেমটি ব্যবহারকারীর আগ্রহের উপর ভিত্তি করে উচ্চ-মানের সুপারিশ তৈরি করতে সক্ষম হওয়া উচিত।


  4. সিস্টেমটি নিশ্চিত করতে সক্ষম হওয়া উচিত যে ব্যবহারকারীর দ্বারা ইতিমধ্যে দেখা/প্রত্যাখ্যান করা সুপারিশগুলি X সংখ্যক দিনের জন্য পুনরায় প্রদর্শিত হবে না।


  5. একই ক্রিয়েটরদের পোস্টগুলি একই পৃষ্ঠায় গোষ্ঠীভুক্ত না হয় তা নিশ্চিত করার জন্য সিস্টেমের যুক্তি থাকা উচিত । একটি ব্যবহারকারী যদি দশটি পোস্ট (আমাদের পৃষ্ঠার আকার) ব্যবহার করে তবে সেগুলি বিভিন্ন নির্মাতাদের থেকে হওয়া উচিত তা নিশ্চিত করার জন্য সিস্টেমের যথাসাধ্য চেষ্টা করা উচিত।


  6. সিস্টেম দ্রুত হতে হবে. P99 লেটেন্সির 150 মিলিসেকেন্ডের কম।


  7. অন্যান্য সমস্ত অ-কার্যকর প্রয়োজনীয়তা, যেমন উচ্চ প্রাপ্যতা, মাপযোগ্যতা, নিরাপত্তা, নির্ভরযোগ্যতা, রক্ষণাবেক্ষণ, ইত্যাদি পূরণ করা উচিত।


আবার, এটি সমস্যা বিবৃতিগুলির একটি অত্যন্ত অতি সরলীকৃত তালিকা। বাস্তবে, নথিগুলি 3000+ শব্দের ছিল কারণ তারা আমাদের বিদ্যমান সিস্টেমে এই সুপারিশ ইঞ্জিনকে একীভূত করার সময় অনেকগুলি প্রান্তের কেস এবং কর্নার কেসগুলিকে কভার করে। এর সমাধানের দিকে এগিয়ে যাওয়া যাক।


সমাধান - সুপারিশ ইঞ্জিনের উচ্চ-স্তরের কাজ

আমি একে একে সমস্যার সমাধান নিয়ে আলোচনা করব এবং তারপর পুরো সিস্টেমের সামগ্রিক কাজ বর্ণনা করব।

আমাদের প্রথম সমস্যা হল ব্যবহারকারীর আগ্রহগুলি ক্যাপচার করা এবং একটি নির্দিষ্ট আগ্রহের সাথে তাদের আগ্রহের স্তরকে সংজ্ঞায়িত করা৷

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


নমুনা সামাজিক গ্রাফ


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


এই আগ্রহের কীওয়ার্ডগুলি প্রধানত বিশেষ্য। এই কীওয়ার্ড (বিশেষ্য) মধ্যে একটি পোস্টের বিষয়বস্তু ভেঙ্গে নিচে একটি সিস্টেম আছে. এটি AWS বোঝা দ্বারা চালিত; একটি প্রাকৃতিক-ভাষা প্রক্রিয়াকরণ (NLP) পরিষেবা যা মেশিন লার্নিং ব্যবহার করে পাঠ্যকে সত্তা, মূল বাক্যাংশ, ইত্যাদিতে বিভক্ত করতে। আবার, আপনি এটি সম্পন্ন করার জন্য যে কোনও পরিচালিত NLP পরিষেবা (বেশ কিছু উপলব্ধ) ব্যবহার করতে পারেন। আপনাকে আপনার মেশিন-লার্নিং মডেলগুলি শিখতে বা স্থাপন করার দরকার নেই! আপনি যদি ইতিমধ্যেই মেশিন লার্নিং বুঝতে পারেন, তাহলে আপনি পরীক্ষা করতে পারেন ওপেন সোর্স এনএলপি মডেলের পাশাপাশি Huggingface-এ .


আমাদের দ্বিতীয় সমস্যা হল ব্যবহারকারীর আগ্রহের উপর ভিত্তি করে উচ্চ-মানের সুপারিশ তৈরি করা

নিম্নলিখিত চিত্রটি সিস্টেমটি কীভাবে কাজ করে তার একটি সরলীকৃত উচ্চ-স্তরের উপস্থাপনা।

সুপারিশ সিস্টেম কিভাবে কাজ করে তার সরলীকৃত উচ্চ-স্তরের উপস্থাপনা।


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


আমাকে ধাপে ধাপে ব্যাখ্যা করা যাক:


ধাপ 1 - পোস্টের বিষয়বস্তুকে ভেক্টর এম্বেডিং-এ রূপান্তর করা

এই সুপারিশগুলি তৈরি করতে, প্রথমে, আমাদের একটি পোস্টের বিষয়বস্তুকে এমন কিছুতে রূপান্তর করতে হবে - ভেক্টর এমবেডিং . LLM-এর ব্র্যান্ডিংয়ে সাম্প্রতিক উন্নতির সাথে, OpenAI (ChatGPT-এর নির্মাতা) এবং ভেক্টর ডাটাবেস , ভেক্টর এম্বেডিং একটি দৈনন্দিন শব্দ হয়ে উঠছে। তারা কী এবং কীভাবে কাজ করে তার বিশদ বিবরণে আমি যাব না, তবে আমি তাদের সম্পর্কে আরও পড়ার পরামর্শ দিচ্ছি। কিন্তু একটি ফিডের জন্য কার্যকর প্রার্থী তৈরি করার ক্ষেত্রে বিষয়বস্তুর গোপনীয়তা এবং সংযম (অপবিত্র শব্দ, অপব্যবহার, যৌন বিষয়বস্তু, হয়রানি, ব্লক করা ব্যবহারকারীদের ফিল্টার করা ইত্যাদি) এর মতো বিষয়গুলির জন্যও অ্যাকাউন্ট করতে হবে।


ভেক্টর এমবেডিং তৈরি করার জন্য, আপনি আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে যে কোনো বিশিষ্ট এমবেডিং মডেল যেমন OpenAI এমবেডিং মডেল , অ্যামাজন টাইটান বা কোনো ওপেন-সোর্স টেক্সট এমবেডিং মডেল ব্যবহার করতে পারেন। আমরা Amazon Titan এর বন্ধুত্বপূর্ণ মূল্য, কর্মক্ষমতা এবং অপারেশনাল সহজতার কারণে এর সাথে গিয়েছিলাম।


ধাপ 2 - ব্যবহারকারীর আগ্রহ জিজ্ঞাসা করুন

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


সুতরাং, সমস্ত ব্যবহারকারীর আগ্রহের একটি বড় তালিকা পেতে আপনার ব্যবসায়িক ব্যবহারের ক্ষেত্রে এবং আপনি যে আচরণটি চালাতে এবং একাধিক অনুসন্ধান চালাতে চান তার জন্য উপযুক্ত যুক্তি চয়ন করুন৷


ধাপ 3 - পাওয়া আগ্রহের উপর ভিত্তি করে একটি ANN অনুসন্ধান করুন

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


ধাপ 4 - অর্ডার সহ একটি ক্যাশে ডাটাবেসে ফলাফল সংরক্ষণ করুন।

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


ব্যবহারকারীর একটি নির্দিষ্ট সুপারিশের ক্রম নির্ধারণের জন্য, আমরা নিম্নলিখিত বিষয়গুলিতে ফ্যাক্টর করেছি -


  1. এই ব্যবহারকারীর জন্য একটি নির্দিষ্ট আগ্রহের (বা অন্য ব্যবহারকারী) সাথে সম্পর্কের শক্তি : এটি একটি গাণিতিক সূত্র দ্বারা নির্ধারিত হয় যা সামাজিক গ্রাফ থেকে বিভিন্ন ডেটা পয়েন্ট নেয়। এই সবই হল এনগেজমেন্ট ডেটা যেমন শেষ লাইকের টাইমস্ট্যাম্প, তৈরি করা লাইকের সংখ্যা, শেষ কমেন্ট ইত্যাদি। ব্যবহারকারীর এনগেজমেন্ট আচরণ কোনো কিছুতে তাদের আগ্রহের সূচক।


  2. প্ল্যাটফর্মে পোস্টের জনপ্রিয়তা: এটি নির্ধারণ করার জন্য, আমরা একটি অ্যালগরিদম তৈরি করেছি যা বিভিন্ন বিষয় যেমন এনগেজমেন্ট, এনগেজমেন্ট-টু-ইমপ্রেশন রেশিও, এনগেজমেন্ট স্কোর তৈরি করতে অনন্য ব্যবহারকারীর সংখ্যা ইত্যাদি গ্রহণ করে। একটি প্ল্যাটফর্ম স্তরে পোস্ট করুন।


কিছু ফিডে, আমরা জনপ্রিয়তাকে অগ্রাধিকার দিই; অন্যদের মধ্যে, আমরা সামাজিক গ্রাফকে অগ্রাধিকার দিই। তবে বেশিরভাগই, তাদের সবই দুটির একটি স্বাস্থ্যকর মিশ্রণ।


কিভাবে সিস্টেম কাজ করে

আপনি উপরের চিত্র থেকে দেখতে পাচ্ছেন, সিস্টেমটি ইচ্ছাকৃতভাবে খুব সহজ রাখা হয়েছে। সিস্টেম কিভাবে কাজ করে তা নিচে দেওয়া হল-


  1. যখন ব্যবহারকারী A একটি পোস্ট তৈরি করে, পোস্ট পরিষেবা, সেই পোস্টটি সংরক্ষণ করার পরে, একটি পাব/সাব ইভেন্টকে একটি সারিতে ট্রিগার করে, যা প্রার্থী তৈরির জন্য একটি ব্যাকগ্রাউন্ড পরিষেবা দ্বারা প্রাপ্ত হয়। আমরা ব্যাবহার করি Google পাব/সাব পাব/সাব কার্যকারিতার জন্য।


  2. এই ব্যাকগ্রাউন্ড পরিষেবাটি অ্যাসিঙ্ক্রোনাসভাবে গ্রহণ করে এবং পূর্বে আলোচনা করা কার্যকারিতাগুলি সম্পাদন করে - গোপনীয়তা পরীক্ষা, সংযম চেক এবং কীওয়ার্ড জেনারেশন এবং তারপর ভেক্টর এমবেডিং তৈরি করে এবং ভেক্টর ডাটাবেসে সঞ্চয় করে। আমরা ব্যবহার করছি আমাদের ভেক্টর ডাটাবেস হিসাবে AstraDB (পরে আলোচনা করা হয়েছে)।


  3. যখনই কোনো ব্যবহারকারী আমাদের প্রধান NoSQL ডাটাবেস আপডেট করার পরে (লাইক/মন্তব্য/শেয়ার, ইত্যাদি) নিযুক্ত হন, পোস্ট-সার্ভিস সুপারিশ ইঞ্জিন পরিষেবায় একটি পাব/সাব ইভেন্ট ট্রিগার করে।


  4. এই সুপারিশ ইঞ্জিন পরিষেবা গ্রাফ ডাটাবেস আপডেট করে এবং তারপর ANN অনুসন্ধান এবং Redis ডাটাবেস আপডেট করার মাধ্যমে কাছাকাছি রিয়েল-টাইমে ব্যবহারকারীর প্রস্তাবিত ফিড আপডেট করে। সুতরাং, ব্যবহারকারীরা যত বেশি ইন্টারঅ্যাক্ট করবে, তত ভাল ফিড পেতে থাকবে। সুপারিশগুলি কীওয়ার্ডের একটি নির্দিষ্ট তালিকার প্রতি পক্ষপাতদুষ্ট নয় তা নিশ্চিত করার জন্য চেক রয়েছে ৷ আমরা গ্রাফ ডাটাবেস জিজ্ঞাসা করার সময় এই চেকগুলি সঞ্চালিত হয়। এই পরিষেবাটি অ্যাসিঙ্ক্রোনাসভাবে এনগেজমেন্ট স্কোর আপডেট করে। এনগেজমেন্ট স্কোরগুলিও পোস্টটি দেখার ব্যবহারকারীদের উপর পুনরায় গণনা করা হয়।


  5. যেহেতু উপরের সমস্ত পদক্ষেপগুলি পর্দার পিছনে অ্যাসিঙ্ক্রোনাসভাবে সম্পাদিত হয়, তাই এই গণনাগুলি শেষ-ব্যবহারকারীর অভিজ্ঞতার উপর কোন প্রভাব ফেলে না।


  6. ফিডটি শেষ পর্যন্ত একটি ফিড পরিষেবার মাধ্যমে শেষ ব্যবহারকারীকে পরিবেশন করা হয়। যেহেতু এই পরিষেবাটি শুধুমাত্র redis এবং আমাদের প্রধান NoSQL ডাটাবেসের উপর একটি সন্ধান করে ( DyanmoDB ), এর P99 লেটেন্সি 110 মিলিসেকেন্ডের কম। এই উভয় ডাটাবেসই স্কেল নির্বিশেষে একক-অঙ্কের মিলিসেকেন্ড লেটেন্সিতে ক্যোয়ারী ফলাফল প্রদান করে।


ব্যবহৃত সরঞ্জাম এবং প্রযুক্তি

  1. কিছু সেবা লেখা আছে প্রোগ্রামিং ভাষা যান , অন্যদের মধ্যে লেখা হয়েছে নোডজেএস (টাইপস্ক্রিপ্ট সহ)।


  2. আমরা ব্যবহার করছি Datastax দ্বারা AstraDB আমাদের ভেক্টর ডাটাবেস হিসাবে। আমরা এই সিদ্ধান্তে পৌঁছেছি অন্যান্য একাধিক ডেটাবেস যেমন পাইনকোন, মিলভাস এবং ওয়েভিয়েট মূল্যায়ন করার পরে। ভেক্টর এবং অন্যান্য ডেটা টাইপের উপর চমৎকার ক্যোয়ারী এবং ইন্ডেক্সিং ক্ষমতা ছাড়াও, এটি একটি পকেট-বান্ধব সার্ভারহীন মূল্য পরিকল্পনা অফার করে। এটি একটি ক্যাসান্ড্রা ইঞ্জিনের উপরে চলে, যা আমরা আমাদের প্ল্যাটফর্মের অন্যান্য বৈশিষ্ট্যগুলিতে ডাটাবেস হিসাবে ব্যবহার করি এবং এটি একটি CQL ক্যোয়ারী ইন্টারফেস দেয়, যা খুব বিকাশকারী-বান্ধব। আমি অত্যন্ত আপনার ভেক্টর ব্যবহারের ক্ষেত্রে এটি চেষ্টা করার পরামর্শ দিই।


  3. আমরা ব্যাবহার করি গুগল পাব/সাব আমাদের অ্যাসিঙ্ক্রোনাস যোগাযোগের জন্য কারণ, আমাদের বর্তমান স্কেলে (কয়েক লক্ষ মোট ব্যবহারকারী, কয়েক হাজার দৈনিক সক্রিয় ব্যবহারকারী), এটি অত্যন্ত সাশ্রয়ী। আমি প্রতি সেকেন্ডে হাজার হাজার ইভেন্ট সহ কয়েক লাখ ব্যবহারকারীর স্কেলে এটি চালিয়েছি। এটি ভাল কাজ করে, এবং এটি ব্যবহার এবং প্রসারিত করা অনায়াসে।


  4. রেডিস - গতি, সরলতা এবং শক্তিশালী ডেটা কাঠামো। আমি মনে করি না যে 2024 সালে কেন রিডিস করা হয়েছে তা নিয়ে আলোচনা করার দরকার আছে।


  5. ডায়নামোডিবি - আবার, এটি অত্যন্ত স্কেলযোগ্য এবং ব্যবহার করা সহজ, এবং আমরা এটিকে সার্ভারহীন মোডে চালাই যেখানে প্রতি মিনিটে কয়েক হাজার প্রশ্ন থাকা সত্ত্বেও, আমাদের মোট বিল বেশ কম। এটি খুব শক্তিশালী ইন্ডেক্সিং ক্ষমতা এবং পঠন এবং লেখার ক্ষেত্রে একক-অঙ্কের মিলিসেকেন্ড লেটেন্সি অফার করে।


ভবিষ্যতে সমস্যার সমাধান হবে

আপনি যেমন কল্পনা করতে পারেন, যেকোন ব্যবহারের ক্ষেত্রে একটি মৌলিক সুপারিশ ইঞ্জিন তৈরি করতে এই একই সেটআপটি টুইক করা যেতে পারে। কিন্তু, যেহেতু আমাদের একটি সোশ্যাল নেটওয়ার্ক, তাই এই সিস্টেমটিকে আরও দক্ষ করে তোলার জন্য আমাদের কিছু পরিবর্তনের প্রয়োজন হবে।


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


  2. বিভিন্ন কীওয়ার্ড এবং ব্যবহারকারীদের মধ্যে সম্পর্ক সূক্ষ্ম-টিউন করা উচিত এবং আরও দানাদার করা উচিত। তারা এখন খুব উচ্চ পর্যায়ে আছে. কিন্তু তাদের আরও গভীর হতে হবে। সুপারিশগুলি প্রথমে পরিমার্জিত করার জন্য আমাদের গ্রাফে দ্বিতীয় এবং তৃতীয়-ডিগ্রির সম্পর্কগুলি অন্বেষণ করতে হবে।


  3. আমরা এখনই আমাদের এমবেডিং মডেলগুলিতে কোনও সূক্ষ্ম-টিউনিং করছি না৷ অদূর ভবিষ্যতে আমাদের এটি করতে হবে।


শেষ নোট

আমি আশা করি আপনি এই ব্লগ সহায়ক খুঁজে পেয়েছেন. আপনার যদি কোন প্রশ্ন, সন্দেহ বা পরামর্শ থাকে, অনুগ্রহ করে নির্দ্বিধায় আমার সাথে যোগাযোগ করুন টুইটার , লিঙ্কডইন বা ইনস্টাগ্রাম . আপনার বন্ধু এবং সহকর্মীদের সাথে এই নিবন্ধটি শেয়ার করবেন না.


এছাড়াও এখানে প্রকাশিত.