منهنجو نالو پاول پارڪهومينڪو آهي، ۽ مان هڪ ايم ايل ڊولپر آهيان. هن آرٽيڪل ۾، مان Yandex.Zen جي ڊيزائن جي وضاحت ڪرڻ چاهيان ٿو ۽ انهن ٽيڪنيڪل سڌارن کي شيئر ڪرڻ چاهيان ٿو جيڪي سفارشن جي معيار کي بهتر بڻايو آهي. هن پوسٽ ۾، توهان سکندا ته ڪيئن صرف چند ملي سيڪنڊن ۾ لکين دستاويزن مان سڀ کان وڌيڪ لاڳاپيل دستاويز ڳولڻ؛ ڪيئن هڪ وڏي ميٽرڪس (لکين ڪالمن ۽ لکين قطارن تي مشتمل) کي مسلسل فيڪٽرائيز ڪجي ته جيئن نوان دستاويز ڏهن منٽن ۾ پنهنجا ویکٹر حاصل ڪن؛ ۽ وڊيوز لاءِ سٺي ویکٹر نمائندگي حاصل ڪرڻ لاءِ يوزر-آرٽيڪل ميٽرڪس فيڪٽرائيزيشن کي ڪيئن ٻيهر استعمال ڪجي.

اسان جي سفارش ڊيٽابيس ۾ مختلف فارميٽ جا لکين دستاويز شامل آهن: اسان جي پليٽ فارم تي ٺاهيل ٽيڪسٽ آرٽيڪل ۽ ٻاهرين ويب سائيٽن، وڊيوز، داستانن، ۽ مختصر پوسٽن تان ورتل. اهڙي سروس کي ترقي ڪرڻ ۾ ڪيترائي ٽيڪنيڪل چئلينج پيش اچن ٿا. هتي انهن مان ڪجهه آهن:
- ڪمپيوٽيشنل ڪمن کي ورهايو: سڀئي ڳرا ڪم آف لائن ڪريو، ۽ صرف تيز ماڊل ايپليڪيشن کي حقيقي وقت ۾ انجام ڏيو، ته جيئن جوابي وقت 100-200 ايم ايس جي اندر هجي.
- جلدي استعمال ڪندڙ جي ڪارنامن کي شامل ڪريو. ان لاءِ ضروري آهي ته سڀئي واقعا فوري طور تي سفارش ڪندڙ تائين پهچائيا وڃن ۽ ماڊل جي ڪارڪردگي تي اثر انداز ٿين.
- فيڊ کي اهڙي طرح ٺاهيو ته اهو جلدي نون استعمال ڪندڙن جي رويي سان مطابقت رکي. نون استعمال ڪندڙن کي محسوس ڪرڻ گهرجي ته انهن جي موٽ سفارشن تي اثر انداز ٿئي ٿي.
- جلدي سمجھو ته ڪنهن کي نئون مضمون سفارش ڪجي.
- نئين مواد جي مسلسل ابھرڻ تي جلدي جواب ڏيو. هر روز ڏهه هزار مضمون شايع ٿين ٿا، ۽ انهن مان ڪيترن ئي (مثال طور، خبرون) جي عمر محدود هوندي آهي. اهو انهن کي فلمن، موسيقي، ۽ ٻين ڊگهي عرصي واري ۽ مهانگي تيار ڪيل مواد کان ڌار ڪري ٿو.
- علم کي هڪ ڊومين کان ٻئي ڊومين ڏانهن منتقل ڪريو. جيڪڏهن هڪ سفارش ڪندڙ سسٽم وٽ ٽيڪسٽ آرٽيڪلز لاءِ تربيت يافته ماڊل آهن ۽ اسان وڊيوز شامل ڪريون ٿا، ته اسان نئين مواد جي قسمن جي درجه بندي کي بهتر بڻائڻ لاءِ موجوده ماڊلز کي ٻيهر استعمال ڪري سگهون ٿا.
مان توهان کي ٻڌائيندس ته اسان انهن مسئلن کي ڪيئن حل ڪيو.
اميدوارن جي چونڊ
اسان ڪيئن ڪجهه ملي سيڪنڊن ۾ هزارين عنصر پاران غور هيٺ دستاويزن جي تعداد کي گهٽائي سگهون ٿا، بغير درجه بندي جي معيار تي عملي طور تي ڪو به اثر نه پوندو؟
فرض ڪريو ته اسان ڪيترن ئي ايم ايل ماڊلز کي تربيت ڏني آهي، انهن جي بنياد تي خاصيتون پيدا ڪيون آهن، ۽ هڪ ٻيو ماڊل تربيت ڏني آهي جيڪو استعمال ڪندڙ لاءِ دستاويزن جي درجه بندي ڪري ٿو. اهو سڀ ڪجهه سٺو ۽ سٺو هوندو، پر اسان صرف حقيقي وقت ۾ سڀني دستاويزن لاءِ سڀني خاصيتن کي ڳڻپ نٿا ڪري سگهون جيڪڏهن انهن ۾ لکين آهن، ۽ سفارشون 100-200 ايم ايس ۾ پيدا ڪرڻ جي ضرورت آهي. مقصد اهو آهي ته لکين جو هڪ ذيلي سيٽ چونڊيو وڃي جيڪو استعمال ڪندڙ لاءِ درجه بندي ڪيو ويندو. هن مرحلي کي عام طور تي اميدوار جي چونڊ سڏيو ويندو آهي. ان جون ڪيتريون ئي گهرجون آهن. پهرين، چونڊ تمام تيز هجڻ گهرجي، درجه بندي جي عمل لاءِ ممڪن حد تائين وقت ڇڏيندي. ٻيو، درجه بندي لاءِ دستاويزن جي تعداد کي گهٽائي، اسان کي ممڪن حد تائين گهڻا لاڳاپيل دستاويز رکڻ گهرجن.
اسان جي اميدوار جي چونڊ جو عمل وقت سان گڏ ترقي ڪئي آهي، ۽ هاڻي اسان هڪ گھڻ-مرحلي طريقي تي پهچي چڪا آهيون:

پهرين، سڀني دستاويزن کي گروپن ۾ ورهايو ويو آهي، ۽ هر گروپ مان سڀ کان وڌيڪ مشهور دستاويز چونڊيا ويا آهن. گروپ سائيٽون، موضوع، يا ڪلسٽر ٿي سگهن ٿا. هر استعمال ڪندڙ لاءِ، سڀ کان وڌيڪ لاڳاپيل گروپ انهن جي تاريخ جي بنياد تي چونڊيا ويندا آهن، ۽ انهن گروپن مان بهترين دستاويز چونڊيا ويندا آهن. اسان حقيقي وقت ۾ استعمال ڪندڙ لاءِ سڀ کان وڌيڪ لاڳاپيل دستاويز چونڊڻ لاءِ kNN انڊيڪس پڻ استعمال ڪندا آهيون. kNN انڊيڪس ٺاهڻ جا ڪيترائي طريقا آهن، پر اسان جو بهترين ڪم ڪري ٿو. (Hierarchical Navigable Small World Graphs). هي هڪ hierarchical ماڊل آهي جيڪو اسان کي ڪجهه ملي سيڪنڊن ۾ لکين جي ڊيٽابيس مان هڪ صارف لاءِ N ويجھا ویکٹر ڳولڻ جي اجازت ڏئي ٿو. اسان پهريان پنهنجي پوري دستاويز ڊيٽابيس کي آف لائن انڊيڪس ڪريون ٿا. جيئن ته انڊيڪس ڳولا ڪافي تيز آهي، جيڪڏهن ڪيترائي مضبوط ايمبيڊنگ آهن، ته اسان ڪيترائي انڊيڪس ٺاهي سگهون ٿا (هر ايمبيڊنگ لاءِ هڪ انڊيڪس) ۽ حقيقي وقت ۾ انهن مان هر هڪ تائين رسائي حاصل ڪري سگهون ٿا.
اسان وٽ هر استعمال ڪندڙ لاءِ ڏهه هزار دستاويز بچيا آهن. اهو اڃا تائين سڀني خاصيتن کي ڳڻڻ لاءِ تمام وڏو آهي، تنهن ڪري هن مرحلي تي اسان هلڪو وزن جي درجه بندي استعمال ڪندا آهيون - گهٽ خاصيتن سان ڳري درجه بندي جو هڪ هلڪو وزن وارو ماڊل. مقصد اهو اڳڪٿي ڪرڻ آهي ته ڪهڙا دستاويز ڳري ماڊل جي چوٽي تي هوندا. سڀ کان وڌيڪ اڳڪٿي ڪندڙ قدر وارا دستاويز ڳري ماڊل ۾ استعمال ڪيا ويندا، جيڪو آخري درجه بندي جو مرحلو آهي. هي طريقو اسان کي اجازت ڏئي ٿو ته هڪ صارف لاءِ غور ڪيل دستاويزن جي ڊيٽابيس کي ڏهه ملي سيڪنڊن ۾ لکين کان هزارين تائين گهٽائي سگهون.
ALS رن ٽائم قدم
ڪلڪ ڪرڻ کان فوري پوءِ صارف جي راءِ کي ڪيئن حساب ۾ رکجي؟
سفارشن ۾ هڪ اهم عنصر صارف جي راءِ جي جواب جو وقت آهي. اهو خاص طور تي نون استعمال ڪندڙن لاءِ اهم آهي: جڏهن ڪو ماڻهو پهريون ڀيرو سفارش سسٽم استعمال ڪرڻ شروع ڪري ٿو، ته انهن کي مختلف موضوعن تي دستاويزن جي هڪ غير ذاتي فيڊ پيش ڪئي ويندي آهي. جيئن ئي اهي پنهنجو پهريون ڪلڪ ڪندا آهن، اهو ضروري آهي ته فوري طور تي ان کي حساب ۾ رکيو وڃي ۽ انهن جي دلچسپين مطابق ترتيب ڏني وڃي. جيڪڏهن سڀني عنصرن کي آف لائن حساب ڪيو وڃي، ته دير جي ڪري هڪ تيز سسٽم جواب ناممڪن هوندو. تنهن ڪري، حقيقي وقت ۾ صارف جي عملن کي پروسيس ڪرڻ ضروري آهي. هن مقصد لاءِ، اسان صارف جي ویکٹر نمائندگي ٺاهڻ لاءِ رن ٽائم تي ALS قدم استعمال ڪندا آهيون.
فرض ڪريو ته اسان وٽ سڀني دستاويزن لاءِ هڪ ویکٹر نمائندگي آهي. مثال طور، اسان ELMo، BERT، يا ٻين مشين لرننگ ماڊلز استعمال ڪندي آرٽيڪل ٽيڪسٽ جي بنياد تي آف لائن ايمبيڊنگ ٺاهي سگهون ٿا. اسان سسٽم ۾ انهن جي رابطي جي بنياد تي ساڳئي جاءِ ۾ استعمال ڪندڙن جي ویکٹر نمائندگي ڪيئن حاصل ڪري سگهون ٿا؟
استعمال ڪندڙ دستاويز ميٽرڪس جي ٺهڻ ۽ خراب ٿيڻ جو عام اصولفرض ڪريو ته اسان وٽ m استعمال ڪندڙ ۽ n دستاويز آهن. ڪجهه استعمال ڪندڙن لاءِ، ڪجهه دستاويزن ڏانهن انهن جا رويا معلوم آهن. پوءِ هي معلومات m x n ميٽرڪس جي طور تي پيش ڪري سگهجي ٿي: قطارون استعمال ڪندڙن سان ۽ ڪالمن دستاويزن سان ملن ٿيون. جيئن ته گھڻا دستاويز استعمال ڪندڙ پاران نه ڏٺا ويا آهن، گھڻا ميٽرڪس سيل خالي رهندا، جڏهن ته ٻيا ڀرجي ويندا. هر واقعي لاءِ (پسند، ناپسند، ڪلڪ)، ميٽرڪس جي هڪ قدر آهي - پر اچو ته هڪ آسان ماڊل تي غور ڪريون جنهن ۾ هڪ پسند 1 سان ۽ هڪ ناپسند 1 سان ملندو آهي.
اچو ته ميٽرڪس کي ٻن حصن ۾ ورهايون: P (m x d) ۽ Q (d x n)، جتي d ویکٹر نمائندگي جي طول و عرض آهي (عام طور تي هڪ ننڍڙو انگ). پوءِ، هر شئي هڪ d-dimensional ویکٹر سان مطابقت رکي ٿي (صارف P ميٽرڪس ۾ هڪ قطار آهي، ۽ دستاويز Q ميٽرڪس ۾ هڪ ڪالم آهي). اهي ویکٹر لاڳاپيل شين جا ايمبيڊنگ هوندا. اڳڪٿي ڪرڻ لاءِ ته ڇا صارف ڪو دستاويز پسند ڪندو، توهان صرف انهن جي ايمبيڊنگ کي ضرب ڏئي سگهو ٿا.

هڪ ممڪن ميٽرڪس فيڪٽرائيزيشن طريقو ALS (Alternating Least Squares) آهي. اسين هيٺ ڏنل نقصان جي فنڪشن کي بهتر بڻائينداسين:

هتي rui استعمال ڪندڙ u جو دستاويز i سان رابطو آهي، qi دستاويز i جو ویکٹر آهي، pu استعمال ڪندڙ u جو ویکٹر آهي.
پوءِ سراسري چورس غلطي جي لحاظ کان بهترين استعمال ڪندڙ ویکٹر (مقرر ٿيل دستاويز ویکٹر سان) تجزياتي طور تي لاڳاپيل لڪير ريگريشن کي حل ڪندي مليو آهي.
ان کي "ALS قدم" سڏيو ويندو آهي. ALS الگورتھم پاڻ ۾ متبادل طور تي هڪ ميٽرڪس (استعمال ڪندڙ ۽ مضمون) کي درست ڪرڻ ۽ ٻئي کي اپڊيٽ ڪرڻ، بهترين حل ڳولڻ تي مشتمل آهي.
خوشقسمتيءَ سان، صارف جي ویکٹر نمائندگي ڳولڻ هڪ تمام تيز آپريشن آهي جيڪو ویکٹر هدايتن کي استعمال ڪندي رن ٽائم تي ڪري سگهجي ٿو. هي چال صارف جي راءِ کي فوري طور تي درجه بندي ۾ شامل ڪرڻ جي اجازت ڏئي ٿي. اميدوار جي چونڊ کي بهتر بڻائڻ لاءِ ساڳي ايمبيڊنگ کي kNN انڊيڪس ۾ استعمال ڪري سگهجي ٿو.
ورهايل تعاوني فلٽرنگ
وڌندڙ ورهايل ميٽرڪس فيڪٽرائيزيشن ڪيئن ڪجي ۽ نون مضمونن جي ویکٹر نمائندگي کي جلدي ڪيئن ڳوليو وڃي؟
مواد سفارش جي سگنلن جو واحد ذريعو ناهي. ٻيو اهم ذريعو تعاوني ڊيٽا آهي. سٺي درجه بندي جون خاصيتون روايتي طور تي صارف-دستاويز ميٽرڪس جي خرابي مان حاصل ڪري سگهجن ٿيون. جڏهن ته، اهڙي خرابي کي لاڳو ڪرڻ جي ڪوشش ڪندي، اسان کي ڪيترن ئي مسئلن جو سامنا ٿيو:
1. اسان وٽ لکين دستاويز ۽ لکين استعمال ڪندڙ آهن. سڄو ميٽرڪس هڪ مشين تي نه ٿو اچي، ۽ ڊمپوزيشن ۾ تمام گهڻو وقت لڳندو.
2. سسٽم ۾ موجود گهڻن مواد جي عمر گهٽ هوندي آهي: دستاويز صرف ڪجهه ڪلاڪن لاءِ لاڳاپيل رهندا آهن. تنهن ڪري، انهن جي ویکٹر نمائندگي کي جلد کان جلد تعمير ڪرڻ ضروري آهي.
3. جيڪڏهن توهان دستاويز جي شايع ٿيڻ کان فوري طور تي ڊڪپوزيشن ٺاهيندا آهيو، ته ان کي ڪافي استعمال ڪندڙن پاران جائزو وٺڻ جو وقت نه هوندو. تنهن ڪري، ان جي ویکٹر نمائندگي گهڻو ڪري خراب هوندي.
4. جيڪڏهن ڪنهن صارف ڪنهن پوسٽ کي پسند يا ناپسند ڪيو آهي، ته اسان ان کي فوري طور تي بريڪ ڊائون ۾ شامل نه ڪري سگهنداسين.
انهن مسئلن کي حل ڪرڻ لاءِ، اسان بار بار وڌندڙ اپڊيٽس سان استعمال ڪندڙ-ڊاڪيومينٽ ميٽرڪس جي ورهايل ڊڪپوزيشن کي لاڳو ڪيو. اهو ڪيئن ڪم ڪندو آهي؟
فرض ڪريو ته اسان وٽ N مشينن جو هڪ ڪلسٽر آهي (N سئو ۾ آهي) ۽ اسان انهن جي وچ ۾ هڪ ميٽرڪس جو ورهايل ڊڪپوزيشن ڪرڻ چاهيون ٿا جيڪو هڪ مشين تي نه ٿو اچي. سوال اهو آهي ته: اسان هي ڊڪپوزيشن ڪيئن ڪري سگهون ٿا ته جيئن، هڪ طرف، هر مشين وٽ ڪافي ڊيٽا هجي ۽ ٻئي طرف، حساب آزاد هجن؟

اسين مٿي بيان ڪيل ALS ڊڪمپوزيشن الگورتھم استعمال ڪنداسين. اچو ته غور ڪريون ته ڪيئن هڪ ALS قدم کي ورهايل طريقي سان انجام ڏيون - باقي قدم ساڳيا هوندا. فرض ڪريو ته اسان وٽ هڪ مقرر دستاويز ميٽرڪس آهي ۽ اسان هڪ صارف ميٽرڪس ٺاهڻ چاهيون ٿا. اهو ڪرڻ لاءِ، اسان ان کي قطارن جي لحاظ کان N حصن ۾ ورهائينداسين، هر حصي ۾ تقريبن ساڳئي تعداد ۾ قطارون هونديون. اسان هر مشين ۾ لاڳاپيل قطارن جي غير خالي سيلز کي ورهائينداسين، انهي سان گڏ پوري دستاويز کي ايمبيڊنگ ميٽرڪس. جيئن ته هي ڊيٽا تمام وڏو نه آهي، ۽ صارف-دستاويز ميٽرڪس عام طور تي تمام گهٽ هوندا آهن، هي ڊيٽا هڪ عام مشين تي فٽ ٿيندو.
هي چال ڪيترن ئي دورن تائين ورجائي سگهجي ٿي جيستائين ماڊل هڪجهڙائي نه ڪري، متبادل طور تي مقرر ٿيل ميٽرڪس کي تبديل ڪري. پر پوءِ به، ميٽرڪس جي خراب ٿيڻ ۾ ڪيترائي ڪلاڪ لڳي سگهن ٿا. ۽ اهو نئين دستاويزن لاءِ جلدي ايمبيڊنگ حاصل ڪرڻ ۽ انهن جي ايمبيڊنگ کي اپڊيٽ ڪرڻ جو مسئلو حل نٿو ڪري جن بابت ماڊل ٺاهڻ وقت ٿوري معلومات موجود هئي.
اسان کي تيزيءَ سان وڌندڙ ماڊل اپڊيٽ لاڳو ڪرڻ ۾ مدد ملي. اچو ته فرض ڪريون ته اسان وٽ هڪ موجوده تربيت يافته ماڊل آهي. ان جي تربيت کان وٺي، نوان مضمون شامل ڪيا ويا آهن جن سان اسان جي استعمال ڪندڙن رابطو ڪيو آهي، انهي سان گڏ اهي مضمون جن سان تربيت دوران ڪجهه رابطو ٿيو هو. انهن مضمونن لاءِ جلدي ايمبيڊنگ حاصل ڪرڻ لاءِ، اسان ماڊل جي پهرين وڏي پيماني تي تربيت دوران حاصل ڪيل يوزر ايمبيڊنگ استعمال ڪندا آهيون ۽ هڪ مقرر صارف ميٽرڪس سان دستاويز ميٽرڪس جي حساب سان هڪ واحد ALS قدم انجام ڏيندا آهيون. هي اسان کي دستاويز جي اشاعت جي ڪجهه منٽن اندر ڪافي جلدي ايمبيڊنگ حاصل ڪرڻ ۽ نئين دستاويزن جي ايمبيڊنگ کي بار بار اپڊيٽ ڪرڻ جي اجازت ڏئي ٿو.
انهي ڳالهه کي يقيني بڻائڻ لاءِ ته سفارشون فوري طور تي انساني عملن تي ٻڌل هجن، اسان رن ٽائم تي آف لائن حاصل ڪيل صارف ايمبيڊنگ استعمال نٿا ڪريون. ان جي بدران، اسان هڪ ALS قدم انجام ڏيون ٿا ۽ موجوده صارف ویکٹر حاصل ڪريون ٿا.
ٻئي ڊومين علائقي ڏانهن منتقل ڪريو
وڊيو جي ویکٹر نمائندگي ٺاهڻ لاءِ ٽيڪسٽ آرٽيڪلز تي صارف جي راءِ کي ڪيئن استعمال ڪجي؟
شروعات ۾، اسان صرف ٽيڪسٽ آرٽيڪلز جي سفارش ڪئي، تنهن ڪري اسان جا ڪيترائي الگورتھم هن قسم جي مواد جي مطابق ٺهيل آهن. جڏهن ته، ٻين قسمن جي مواد کي شامل ڪندي، اسان کي اسان جي ماڊلز کي ترتيب ڏيڻ جي ضرورت محسوس ٿي. اسان وڊيو کي مثال طور استعمال ڪندي هن مسئلي کي ڪيئن حل ڪيو؟ هڪ آپشن اهو هو ته سڀني ماڊلز کي شروع کان ٻيهر تربيت ڏني وڃي. پر اهو وقت وٺندڙ آهي، ۽ ڪجهه الگورتھم تربيتي نموني جي سائيز تي مطالبو ڪري رهيا آهن، جيڪو اڃا تائين نئين مواد جي قسمن لاءِ ڪافي مقدار ۾ موجود ناهي انهن جي خدمت تي عمر جي شروعاتي مرحلن ۾.
اسان هڪ مختلف طريقو اختيار ڪيو ۽ وڊيوز لاءِ ٽيڪسٽ ماڊل ٻيهر استعمال ڪيا. ساڳي ALS چال اسان کي وڊيو ویکٹر نمائندگي ٺاهڻ ۾ مدد ڪئي. اسان ٽيڪسٽ آرٽيڪلز جي بنياد تي يوزر ویکٹر نمائندگي ورتي ۽ وڊيو ويو ڊيٽا استعمال ڪندي ALS قدم انجام ڏنو. هن طريقي سان، اسان آساني سان هڪ وڊيو ویکٹر نمائندگي حاصل ڪئي. رن ٽائم تي، اسان صرف ٽيڪسٽ آرٽيڪلز ۽ وڊيو ویکٹر مان حاصل ڪيل يوزر ویکٹر جي وچ ۾ هڪجهڙائي جو حساب ڪريون ٿا.
ٿڪل
حقيقي وقت جي سفارش واري نظام جي بنيادي ترقي ۾ ڪيترائي چئلينج شامل آهن. ان کي ڊيٽا کي تيزيءَ سان پروسيس ڪرڻ ۽ ان کي مؤثر طريقي سان استعمال ڪرڻ لاءِ مشين لرننگ طريقن کي لاڳو ڪرڻ جي ضرورت آهي؛ پيچيده ورهايل نظام ٺاهڻ جيڪي گهٽ ۾ گهٽ وقت ۾ صارف سگنلن ۽ نئين مواد يونٽن کي پروسيس ڪرڻ جي قابل هجن؛ ۽ ٻيا ڪيترائي ڪم.
موجوده نظام ۾، جنهن جي ڊيزائن مون بيان ڪئي آهي، صارف لاءِ سفارشن جو معيار انهن جي سرگرمي ۽ استعمال جي مدت سان گڏ وڌي ٿو. پر يقيناً، اهو پڻ آهي جتي مکيه چئلينج آهي: سسٽم لاءِ فوري طور تي ڪنهن ماڻهو جي مفادن کي سمجهڻ ڏکيو آهي جنهن مواد سان گهڻو رابطو نه ڪيو آهي. نون استعمال ڪندڙن لاءِ سفارشون بهتر ڪرڻ اسان جو اهم مقصد آهي. اسان الگورتھم کي بهتر بڻائڻ جاري رکنداسين ته جيئن يقيني بڻائي سگهجي ته لاڳاپيل مواد صارف جي فيڊ تائين وڌيڪ جلدي پهچي ۽ غير لاڳاپيل مواد نه ڏيکاريو وڃي.
جو ذريعو: www.habr.com
