paint-brush
اسکرولنگ بند کریں، بلڈنگ شروع کریں: اپنی خود کی AI مووی تجویز کنندہ بنائیںکی طرف سے@superlinked
نئی تاریخ

اسکرولنگ بند کریں، بلڈنگ شروع کریں: اپنی خود کی AI مووی تجویز کنندہ بنائیں

کی طرف سے Superlinked11m2025/03/06
Read on Terminal Reader

بہت لمبا؛ پڑھنے کے لئے

جانیں کہ کس طرح ایک حسب ضرورت، AI سے چلنے والا سفارشی نظام بنانا ہے جو آپ کی اگلی پسندیدہ فلم کی درستگی کے ساتھ پیش گوئی کرتا ہے۔ اس ٹیوٹوریل میں، ہم آپ کی رہنمائی کریں گے کہ ویکٹر ڈیٹا بیس کا استعمال کرتے ہوئے فلم کی سفارش کا نظام بنانے کے عمل میں۔ آپ یہ سیکھیں گے کہ جدید AI سفارشی انجن کیسے کام کرتے ہیں اور Superlinked کے ساتھ اپنا سسٹم بنانے کا تجربہ حاصل کرتے ہیں۔
featured image - اسکرولنگ بند کریں، بلڈنگ شروع کریں: اپنی خود کی AI مووی تجویز کنندہ بنائیں
Superlinked HackerNoon profile picture
0-item
1-item

"میں نے کہا کہ میں ایک B-Movi dammit چاہتا ہوں!"

لامتناہی سکرولنگ کا خاتمہ (اور کیا دیکھنا ہے اس پر دلائل…)

Netflix کے ذریعے لامتناہی طور پر اسکرول کرتے ہوئے تھک گئے، یقین نہیں ہے کہ آگے کیا دیکھنا ہے؟ کیا ہوگا اگر آپ اپنا حسب ضرورت، AI سے چلنے والا سفارشی نظام بنا سکتے ہیں جو آپ کی اگلی پسندیدہ فلم کی درستگی کے ساتھ پیش گوئی کرتا ہے؟


اس ٹیوٹوریل میں، ہم آپ کو ویکٹر ڈیٹا بیس (VectorDBs) کا استعمال کرتے ہوئے فلم کی سفارش کا نظام بنانے کے عمل میں رہنمائی کریں گے۔ آپ سیکھیں گے کہ جدید AI سفارشی انجن کس طرح کام کرتے ہیں اور Superlinked کے ساتھ اپنا سسٹم بنانے کا تجربہ حاصل کریں گے۔


(سیدھا کوڈ پر جانا چاہتے ہیں؟ یہاں GitHub پر ہمارے ریپو کو دیکھیں۔ اپنے استعمال کے معاملے کے لیے تجویز کنندہ سسٹم آزمانے کے لیے تیار ہیں؟ یہاں ایک ڈیمو حاصل کریں۔)

آئیے سفارش کرتے ہیں!

ہم پورے مضمون میں اس نوٹ بک کی پیروی کریں گے۔ آپ Colab کا استعمال کر کے براہ راست اپنے براؤزر سے بھی کوڈ چلا سکتے ہیں۔


Netflix کا تجویز کردہ الگورتھم متعلقہ مواد کی تجویز کرنے کا ایک بہت اچھا کام کرتا ہے - اختیارات کے سراسر حجم کو دیکھتے ہوئے (2023 میں ~ 16k فلمیں اور ٹی وی پروگرام) اور اسے صارفین کو شوز کی تجویز کتنی جلدی کرنی پڑتی ہے۔ Netflix یہ کیسے کرتا ہے؟ ایک لفظ میں، معنوی تلاش ۔


معنوی تلاش صارف کے سوالات اور مووی/ٹی وی شو کی تفصیل کے پیچھے معنی اور سیاق و سباق (دونوں اوصاف اور کھپت کے پیٹرن) کو سمجھتی ہے، اور اس وجہ سے روایتی مطلوبہ الفاظ پر مبنی نقطہ نظر کے مقابلے اس کے سوالات اور سفارشات میں بہتر ذاتی نوعیت فراہم کر سکتی ہے۔


لیکن معنوی تلاش کو کچھ چیلنجز درپیش ہیں - ان میں سب سے اہم: 1) درست تلاش کے نتائج کو یقینی بنانا، 2) تشریحی، اور 3) اسکیل ایبلٹی - ایسے چیلنجز کو حل کرنا پڑے گا جن سے کسی بھی کامیاب مواد کی سفارش کی حکمت عملی ہوگی۔ Superlinked کی لائبریری کا استعمال کرتے ہوئے، آپ ان مشکلات پر قابو پا سکتے ہیں۔


اس آرٹیکل میں، ہم آپ کو دکھائیں گے کہ کس طرح سپر لنکڈ لائبریری کا استعمال آپ کی اپنی سیمینٹک تلاش کو ترتیب دینے اور اپنی ترجیحات کی بنیاد پر متعلقہ فلموں کی فہرست تیار کرنے کے لیے کریں ۔

سیمنٹک تلاش - چیلنجز

سیمنٹک تلاش ویکٹر کی تلاش میں بہت زیادہ اہمیت دیتی ہے لیکن ڈویلپرز کے لیے ویکٹر ایمبیڈنگ کے تین اہم چیلنجز پیش کرتی ہے:

  • معیار اور مطابقت : اس بات کو یقینی بنانے کے لیے کہ آپ کی ایمبیڈنگز آپ کے ڈیٹا کے معنوی معنی کو درست طریقے سے حاصل کرتی ہیں، سرایت کرنے کی تکنیک، تربیتی ڈیٹا، اور ہائپر پیرامیٹر کے محتاط انتخاب کی ضرورت ہے۔ خراب معیار کی سرایت غلط تلاش کے نتائج اور غیر متعلقہ سفارشات کا باعث بن سکتی ہے۔


  • تشریح : اعلی جہتی ویکٹر کی جگہیں اتنی پیچیدہ ہیں کہ آسانی سے سمجھی جا سکتی ہیں۔ ان کے اندر انکوڈ شدہ رشتوں اور مماثلتوں کے بارے میں بصیرت حاصل کرنے کے لیے، ڈیٹا سائنسدانوں کو ان کا تصور اور تجزیہ کرنے کے طریقے تیار کرنے ہوں گے۔


  • اسکیل ایبلٹی : اعلی جہتی سرایتوں کا انتظام اور پروسیسنگ، خاص طور پر بڑے ڈیٹا سیٹس میں، کمپیوٹیشنل وسائل کو دبا سکتا ہے اور تاخیر کو بڑھا سکتا ہے۔ پیداواری ماحول میں اسکیل ایبلٹی اور حقیقی وقت کی کارکردگی کو یقینی بنانے کے لیے اشاریہ سازی، بازیافت، اور مماثلت کی گنتی کے لیے موثر طریقے ضروری ہیں۔


سپر لنکڈ لائبریری آپ کو ان چیلنجوں سے نمٹنے کے قابل بناتی ہے۔ ذیل میں، ہم ایک مواد کا تجویز کنندہ بنائیں گے (خاص طور پر فلموں کے لیے)، جو ہمارے پاس دی گئی فلم کے بارے میں موجود معلومات سے شروع کرتے ہوئے، اس معلومات کو ملٹی موڈل ویکٹر کے طور پر سرایت کریں گے، اپنی تمام فلموں کے لیے تلاش کے قابل ویکٹر انڈیکس بنائیں گے، اور پھر اپنے نتائج کو بہتر بنانے اور اچھی فلموں کی سفارشات پر پہنچنے کے لیے استفسار کے وزن کا استعمال کریں گے۔ آئیے اس میں داخل ہوں۔

سپر لنکڈ کے ساتھ ایک تیز اور قابل اعتماد تلاش کا تجربہ بنانا

ذیل میں، آپ Superlinked لائبریری کے درج ذیل عناصر کا استعمال کرتے ہوئے Netflix مووی ڈیٹاسیٹ پر ایک سیمینٹک تلاش کریں گے۔

  • Recency space - آپ کے ڈیٹا کی تازگی (کرنسی اور مطابقت) کو سمجھنے کے لیے، نئی فلموں کی شناخت کرنا۔
  • متن کی مماثلت کی جگہ - فلم کے بارے میں آپ کے پاس موجود میٹا ڈیٹا کے مختلف ٹکڑوں کی تشریح کرنے کے لیے، جیسے کہ تفصیل، عنوان، اور صنف۔
  • استفسار کے وقت کا وزن - جب آپ استفسار کرتے ہیں تو آپ کو یہ منتخب کرنے دیتا ہے کہ آپ کے ڈیٹا میں سب سے اہم کیا ہے، اس طرح پورے ڈیٹاسیٹ کو دوبارہ ایمبیڈ کرنے، پوسٹ پروسیسنگ کرنے، یا حسب ضرورت رینکنگ ماڈل (یعنی تاخیر کو کم کرنا) کی ضرورت کے بغیر آپٹمائزنگ کریں۔

Netflix ڈیٹاسیٹ، اور ہم اس کے ساتھ کیا کریں گے۔

فلموں کی کامیابی کے ساتھ تجویز کرنا زیادہ تر مشکل ہے کیونکہ بہت سارے اختیارات ہیں (> 2023 میں 9000 ٹائٹلز)، اور صارفین فوری طور پر مانگ کے مطابق سفارشات چاہتے ہیں۔ آئیے کوئی ایسی چیز تلاش کرنے کے لیے ڈیٹا پر مبنی نقطہ نظر اختیار کریں جو ہم دیکھنا چاہتے ہیں۔ فلموں کے ہمارے ڈیٹاسیٹ میں، ہم جانتے ہیں:

  • تفصیل
  • سٹائل
  • عنوان
  • ریلیز_سال


ہم ان ان پٹس کو ایمبیڈ کر سکتے ہیں، اور اپنی ایمبیڈنگز کے اوپر ایک ویکٹر انڈیکس لگا سکتے ہیں، ایسی جگہ بنا سکتے ہیں جسے ہم لفظی طور پر تلاش کر سکتے ہیں۔


ایک بار جب ہمارے پاس اپنی انڈیکس شدہ ویکٹر کی جگہ ہو جائے تو ہم کریں گے:

  • سب سے پہلے، فلموں کو براؤز کریں، ایک خیال کے ذریعے فلٹر کیا گیا (دلی رومانوی کامیڈی)
  • اس کے بعد، کچھ ان پٹ فیلڈز میں میچز کو زیادہ اہمیت دیتے ہوئے نتائج کو موافقت کریں (یعنی وزن
  • پھر، ہر ایک کے لیے مختلف تلاش کی اصطلاحات کے ساتھ تفصیل، صنف، اور عنوان میں تلاش کریں۔
  • اور، ایک ایسی فلم تلاش کرنے کے بعد جو قریب ہے لیکن قطعی مماثل نہیں ہے، اس فلم کو بطور حوالہ استعمال کرتے ہوئے ارد گرد بھی تلاش کریں۔

انسٹالیشن اور ڈیٹا سیٹ کی تیاری

آپ کا پہلا قدم لائبریری کو انسٹال کرنا اور مطلوبہ کلاسز کو درآمد کرنا ہے۔


(نوٹ: ذیل میں، alt.renderers.enable(“mimetype”) کو alt.renderers.enable('colab') میں تبدیل کریں اگر آپ اسے google colab میں چلا رہے ہیں۔ اگر آپ github میں چلا رہے ہیں تو "mimetype" رکھیں۔)


 %pip install superlinked==5.3.0 from datetime import timedelta, datetime import altair as alt import os import pandas as pd from superlinked.evaluation.charts.recency_plotter import RecencyPlotter from superlinked.framework.common.dag.context import CONTEXT_COMMON, CONTEXT_COMMON_NOW from superlinked.framework.common.dag.period_time import PeriodTime from superlinked.framework.common.schema.schema import schema from superlinked.framework.common.schema.schema_object import String, Timestamp from superlinked.framework.common.schema.id_schema_object import IdField from superlinked.framework.common.parser.dataframe_parser import DataFrameParser from superlinked.framework.dsl.executor.in_memory.in_memory_executor import ( InMemoryExecutor, InMemoryApp, ) from superlinked.framework.dsl.index.index import Index from superlinked.framework.dsl.query.param import Param from superlinked.framework.dsl.query.query import Query from superlinked.framework.dsl.query.result import Result from superlinked.framework.dsl.source.in_memory_source import InMemorySource from superlinked.framework.dsl.space.text_similarity_space import TextSimilaritySpace from superlinked.framework.dsl.space.recency_space import RecencySpace alt.renderers.enable("mimetype") # NOTE: to render altair plots in colab, change 'mimetype' to 'colab' alt.data_transformers.disable_max_rows() pd.set_option("display.max_colwidth", 190)


ہمیں ڈیٹا سیٹ کو تیار کرنے کی بھی ضرورت ہے - ٹائم کنسٹنٹ کی وضاحت کریں، ڈیٹا کا URL لوکیشن سیٹ کریں، ڈیٹا اسٹور ڈکشنری بنائیں، CSV کو پانڈا ڈیٹا فریم میں پڑھیں، ڈیٹا فریم اور ڈیٹا کو صاف کریں تاکہ اسے صحیح طریقے سے تلاش کیا جا سکے، اور فوری تصدیق اور جائزہ کریں۔ (تفصیلات کے لیے سیل 3 اور 4 دیکھیں۔)


اب جبکہ ڈیٹاسیٹ تیار ہو گیا ہے، آپ Superlinked لائبریری کا استعمال کرتے ہوئے اپنی بازیافت کو بہتر بنا سکتے ہیں۔

ویکٹر تلاش کے لیے انڈیکس تیار کرنا

سپر لنکڈ کی لائبریری بنیادی بلڈنگ بلاکس کا ایک سیٹ پر مشتمل ہے جسے ہم انڈیکس بنانے اور بازیافت کا انتظام کرنے کے لیے استعمال کرتے ہیں۔ آپ ان بلڈنگ بلاکس کے بارے میں مزید تفصیل سے یہاں پڑھ سکتے ہیں۔


سسٹم کو اپنے ڈیٹا کے بارے میں بتانے کے لیے سب سے پہلے آپ کو اپنی اسکیما کی وضاحت کرنے کی ضرورت ہے۔

 # accommodate our inputs in a typed schema @schema class MovieSchema: description: String title: String release_timestamp: Timestamp genres: String id: IdField movie = MovieSchema()


اس کے بعد، آپ Spaces کا استعمال یہ بتانے کے لیے کرتے ہیں کہ ایمبیڈ کرتے وقت آپ ڈیٹا کے ہر حصے کے ساتھ کیسا سلوک کرنا چاہتے ہیں۔ کون سی جگہیں استعمال کی جاتی ہیں اس کا انحصار آپ کے ڈیٹا ٹائپ پر ہوتا ہے۔ ہر اسپیس کو ڈیٹا کو سرایت کرنے کے لیے بہتر بنایا گیا ہے تاکہ بازیافت کے نتائج کے اعلی ترین ممکنہ معیار کو واپس کیا جا سکے۔


خلائی تعریفوں میں، ہم بیان کرتے ہیں کہ ہمارے ڈیٹا میں معنوی رشتوں کی عکاسی کرنے کے لیے ان پٹس کو کیسے سرایت کرنا چاہیے۔


 # textual fields are embedded using a sentence-transformers model description_space = TextSimilaritySpace( text=movie.description, model="sentence-transformers/paraphrase-MiniLM-L3-v2" ) title_space = TextSimilaritySpace( text=movie.title, model="sentence-transformers/paraphrase-MiniLM-L3-v2" ) genre_space = TextSimilaritySpace( text=movie.genres, model="sentence-transformers/paraphrase-MiniLM-L3-v2" ) # release date are encoded using our recency space # periodtimes aim to reflect notable breaks in our scores recency_space = RecencySpace( timestamp=movie.release_timestamp, period_time_list=[ PeriodTime(timedelta(days=4 * YEAR_IN_DAYS)), PeriodTime(timedelta(days=10 * YEAR_IN_DAYS)), PeriodTime(timedelta(days=40 * YEAR_IN_DAYS)), ], negative_filter=-0.25, ) movie_index = Index(spaces=[description_space, title_space, genre_space, recency_space])


ایک بار جب آپ اپنی اسپیس سیٹ کر لیتے ہیں اور اپنا انڈیکس بنا لیتے ہیں، تو آپ اپنے سوالات کو ترتیب دینے کے لیے لائبریری کے سورس اور ایگزیکیوٹر حصوں کا استعمال کرتے ہیں۔ نوٹ بک میں سیل 10-13 دیکھیں۔


اب جبکہ سوالات تیار ہو چکے ہیں، آئیے سوالات کو چلانے اور وزن کو ایڈجسٹ کرکے بازیافت کو بہتر بنانے کی طرف بڑھتے ہیں۔

Recency کو سمجھنا، اور اسے Superlinked میں استعمال کرنے کا طریقہ

Recency space آپ کو ترجیحی طور پر اپنے ڈیٹا سیٹ سے پرانے یا نئے ریلیزز کو کھینچ کر آپ کے استفسار کے نتائج کو تبدیل کرنے دیتی ہے۔ ہم 4، 10، اور 40 سال کو اپنے مدت کے اوقات کے طور پر استعمال کرتے ہیں تاکہ ہم مزید عنوانات کے ساتھ سال دے سکیں - سیل 5 دیکھیں)۔


4، 10، اور 40 سالوں میں اسکور میں وقفوں کو دیکھیں۔ 40 سال سے زیادہ پرانے عنوانات کو negative_filter اسکور ملتا ہے۔

مدت کے لحاظ سے تازہ ترین اسکورز

مختلف سوالات کے وقت کے وزن کا استعمال کرتے ہوئے تلاش کے نتائج کا جائزہ لینا اور ان کو بہتر بنانا

آئیے نوٹ بک میں اپنے نتائج پیش کرنے کے لیے ایک فوری استعمال کے فنکشن کی وضاحت کرتے ہیں۔


 def present_result( result: Result, cols_to_keep: list[str] = ["description", "title", "genres", "release_year", "id"], ) -> pd.DataFrame: # parse result to dataframe df: pd.DataFrame = result.to_pandas() # transform timestamp back to release year df["release_year"] = [ datetime.fromtimestamp(timestamp).year for timestamp in df["release_timestamp"] ] return df[cols_to_keep]


سادہ اور اعلیٰ درجے کے سوالات

سپر لنکڈ لائبریری آپ کو مختلف قسم کے سوالات کرنے دیتی ہے۔ یہاں ہم دو کی وضاحت کرتے ہیں۔ ہماری دونوں قسم کے استفسارات (سادہ اور جدید) مجھے اپنی ترجیحات کے مطابق انفرادی جگہوں (تفصیل، عنوان، نوع، اور یقیناً تازہ کاری) کا وزن کرنے دیں۔ ان کے درمیان فرق یہ ہے کہ ایک سادہ استفسار کے ساتھ، میں ایک سوال کا متن سیٹ کرتا ہوں اور پھر اسی طرح کے نتائج کو تفصیل، عنوان اور صنف کی جگہوں پر ظاہر کرتا ہوں۔


ایک جدید استفسار کے ساتھ، میرے پاس زیادہ باریک کنٹرول ہے۔ اگر میں چاہوں تو، میں وضاحت، عنوان، اور صنف کی جگہوں میں سے ہر ایک میں مختلف سوالات کے متن درج کر سکتا ہوں۔ استفسار کا کوڈ یہ ہے:


 query_text_param = Param("query_text") simple_query = ( Query( movie_index, weights={ description_space: Param("description_weight"), title_space: Param("title_weight"), genre_space: Param("genre_weight"), recency_space: Param("recency_weight"), }, ) .find(movie) .similar(description_space.text, query_text_param) .similar(title_space.text, query_text_param) .similar(genre_space.text, query_text_param) .limit(Param("limit")) ) advanced_query = ( Query( movie_index, weights={ description_space: Param("description_weight"), title_space: Param("title_weight"), genre_space: Param("genre_weight"), recency_space: Param("recency_weight"), }, ) .find(movie) .similar(description_space.text, Param("description_query_text")) .similar(title_space.text, Param("title_query_text")) .similar(genre_space.text, Param("genre_query_text")) .limit(Param("limit")) )


سادہ سوال

سادہ سوالات میں، میں اپنے سوال کا متن سیٹ کرتا ہوں اور میرے لیے ان کی اہمیت کے لحاظ سے مختلف وزن لگاتا ہوں۔


 result: Result = app.query( simple_query, query_text="Heartfelt romantic comedy", description_weight=1, title_weight=1, genre_weight=1, recency_weight=0, limit=TOP_N, ) present_result(result) 


سادہ سوال کے نتائج 1

ہمارے نتائج میں کچھ عنوانات ہیں جو میں پہلے ہی دیکھ چکا ہوں۔ میں اپنے نتائج کو حالیہ عنوانات کی طرف متعصب کرنے کے لیے رجعت پسندی کو وزن دے کر اس سے نمٹ سکتا ہوں۔ وزن کو ایک یونٹ کی رقم کے لیے معمول بنایا جاتا ہے (یعنی، تمام وزن کو ایڈجسٹ کیا جاتا ہے تاکہ وہ ہمیشہ مجموعی طور پر 1 تک پہنچ جائیں)، لہذا آپ کو اس بات کی فکر کرنے کی ضرورت نہیں ہے کہ آپ انہیں کیسے سیٹ کرتے ہیں۔


 result: Result = app.query( simple_query, query_text="Heartfelt romantic comedy", description_weight=1, title_weight=1, genre_weight=1, recency_weight=3, limit=TOP_N, ) present_result(result) 


سادہ سوال کے نتائج 1

میرے نتائج (اوپر) اب تمام 2021 کے بعد کے ہیں۔


سادہ استفسار کا استعمال کرتے ہوئے، میں کسی بھی مخصوص جگہ (تفصیل، عنوان، نوع، یا تازہ کاری) کا وزن کر سکتا ہوں تاکہ نتائج واپس کرتے وقت اسے زیادہ شمار کیا جا سکے۔ آئیے اس کے ساتھ تجربہ کریں۔ ذیل میں، ہم صنف اور کم وزن والے عنوان کو زیادہ وزن دیں گے - میرے استفسار کا متن بنیادی طور پر کچھ اضافی سیاق و سباق کے ساتھ صرف ایک صنف ہے۔ میں اپنی رجعت پسندی کو برقرار رکھتا ہوں کیونکہ میں اب بھی چاہوں گا کہ میرے نتائج حالیہ فلموں کی طرف متعصب ہوں۔


 result = app.query( simple_query, query_text="Heartfelt romantic comedy", description_weight=1, title_weight=0.1, genre_weight=2, recency_weight=1, limit=TOP_N, ) present_result(result)


یہ استفسار ریلیز کے سال کو تھوڑا پیچھے دھکیلتا ہے تاکہ مجھے مزید صنف کے وزن والے نتائج (نیچے) مل سکیں۔


سادہ سوال کے نتائج 3

اعلی درجے کی استفسار

اعلی درجے کی استفسار مجھے اور بھی بہتر کنٹرول فراہم کرتا ہے۔ میں تجدید پر کنٹرول رکھتا ہوں، لیکن وضاحت، عنوان، اور صنف کے لیے تلاش کے متن کی بھی وضاحت کر سکتا ہوں، اور ہر ایک کو اپنی ترجیحات کے مطابق ایک مخصوص وزن تفویض کر سکتا ہوں، فی ذیل میں (اور سیلز 19-21 )

 result = app.query( advanced_query, description_query_text="Heartfelt lovely romantic comedy for a cold autumn evening.", title_query_text="love", genre_query_text="drama comedy romantic", description_weight=0.2, title_weight=3, genre_weight=1, recency_weight=5, limit=TOP_N, ) present_result(result)


ایک مخصوص فلم کا استعمال کرتے ہوئے تلاش کریں۔

کہو کہ میری آخری فلم کے نتائج میں، مجھے ایک ایسی فلم ملی جسے میں نے پہلے ہی دیکھا ہے اور میں کچھ ایسا ہی دیکھنا چاہتا ہوں۔ آئیے فرض کریں کہ مجھے وائٹ کرسمس پسند ہے، 1954 کی ایک رومانٹک کامیڈی (id = tm16479) جس میں گلوکار-رقاص ایک اسٹیج شو کے لیے اکٹھے ہو رہے ہیں تاکہ مہمانوں کو ورمونٹ کی ایک کشمکش سرائے کی طرف متوجہ کیا جا سکے۔ Advanced_query میں ایک اضافی with_vector شق (ایک movie_id پیرامیٹر کے ساتھ) شامل کرنے سے، with_movie_query مجھے اس فلم (یا کوئی بھی فلم جو مجھے پسند ہے) کا استعمال کرتے ہوئے تلاش کرنے دیتا ہے، اور مجھے الگ الگ ذیلی تلاش کے استفسار کے متن اور وزن کا مکمل کنٹرول فراہم کرتا ہے۔


سب سے پہلے، ہم اپنا movie_id پیرامیٹر شامل کرتے ہیں:

 with_movie_query = advanced_query.with_vector(movie, Param("movie_id"))


اور پھر میں اپنے دیگر ذیلی تلاش کے سوالات کو یا تو خالی یا جو بھی سب سے زیادہ متعلقہ ہو، کسی بھی وزن کے ساتھ جو معنی خیز ہو۔ آئیے کہتے ہیں کہ میری پہلی استفسار سے وہ نتائج آتے ہیں جو وائٹ کرسمس کے اسٹیج پرفارمنس/بینڈ کے پہلو کی عکاسی کرتے ہیں ( سیل 24 دیکھیں)، لیکن میں ایسی فلم دیکھنا چاہتا ہوں جو زیادہ فیملی پر مبنی ہو۔ میں اپنے نتائج کو مطلوبہ سمت میں تراشنے کے لیے ایک description_query_text درج کر سکتا ہوں۔

 result = app.query( with_movie_query, description_query_text="family", title_query_text="", genre_query_text="", description_weight=1, title_weight=0, genre_weight=0, recency_weight=0, description_query_weight=1, movie_id="tm16479", limit=TOP_N, ) present_result(result) 


اعلی درجے کے سوال کے نتائج 1

لیکن اب جب میں اپنے نتائج دیکھ رہا ہوں، مجھے احساس ہوا کہ میں حقیقت میں ہلکے پھلکے اور مضحکہ خیز چیز کے موڈ میں ہوں۔ آئیے اس کے مطابق میرے استفسار کو ایڈجسٹ کریں:


 Result = app.query( with_movie_query, description_query_text="", title_query_text="", genre_query_text="comedy", description_weight=1, title_weight=0, genre_weight=2, recency_weight=0, description_query_weight=1, movie_id="tm16479", limit=TOP_N, ) present_result(result) 


اعلی درجے کے سوال کے نتائج 2

ٹھیک ہے، وہ نتائج بہتر ہیں. میں ان میں سے ایک کو چنوں گا۔ پاپکارن پر رکھو!

نتیجہ

سپر لنکڈ آپ کے بازیافت کے معیار کو جانچنا، دوبارہ بیان کرنا اور بہتر بناتا ہے۔ اوپر، ہم نے آپ کو بتایا ہے کہ سپر لنکڈ لائبریری کو ویکٹر اسپیس پر سیمینٹک تلاش کرنے کے لیے کس طرح استعمال کیا جائے، جس طرح سے Netflix کرتا ہے، اور درست، متعلقہ فلم کے نتائج واپس کرتا ہے۔ ہم نے یہ بھی دیکھا ہے کہ اپنے نتائج کو کیسے ٹھیک کیا جائے، وزن اور تلاش کی اصطلاحات کو درست کیا جائے جب تک کہ ہم صحیح نتیجہ تک نہ پہنچ جائیں۔


اب، خود نوٹ بک کو آزمائیں، اور دیکھیں کہ آپ کیا حاصل کر سکتے ہیں!

اسے خود آزمائیں - کوڈ اور ڈیمو حاصل کریں!

  • 💾 کوڈ پکڑیں : ہمارے GitHub ریپو میں مکمل عمل درآمد کو یہاں دیکھیں ۔ . اسے فورک کریں، اسے موافقت دیں، اور اسے اپنا بنائیں!


  • 🚀 اسے ایکشن میں دیکھیں : اسے حقیقی دنیا کے سیٹ اپ میں کام کرتا دیکھنا چاہتے ہیں؟ ایک فوری ڈیمو بُک کریں، اور دریافت کریں کہ کس طرح Superlinked آپ کی سفارشات کو سپرچارج کر سکتا ہے۔ اب ایک ڈیمو حاصل کریں !


تجویز کردہ انجن ہمارے مواد کو دریافت کرنے کے طریقے کو تشکیل دے رہے ہیں۔ چاہے وہ فلمیں ہوں، موسیقی ہوں، یا پروڈکٹس، ویکٹر کی تلاش مستقبل ہے — اور اب آپ کے پاس اپنا بنانے کے لیے ٹولز ہیں۔


مصنف: Mór Kapronczay