تاریکی کی AI سے چلنے والی فوج یہ کھیل کی رات ہے، آپ کے دوست گیمز کی میز کے ارد گرد بیٹھے ہیں، یہ دیکھنے کے لیے انتظار کر رہے ہیں کہ وہ کون سا Dungeons & Dragons (D&D) کردار بنیں گے اور جس تلاش میں وہ شروع ہوں گے۔ آج رات، آپ Dungeon Master (کہانی سنانے والے اور گائیڈ) ہیں، اپنے کھلاڑیوں کو للکارنے اور ان کا دل موہ لینے کے لیے سنسنی خیز مقابلوں کے ماہر ہیں۔ آپ کے قابل اعتماد ڈی اینڈ ڈی مونسٹر مینوئل میں مخلوقات شامل ہیں۔ بے شمار اختیارات میں سے ہر صورت حال کے لیے کامل عفریت کی تلاش بہت زیادہ ہو سکتی ہے۔ مثالی دشمن کو اس لمحے کی ترتیب، مشکل اور بیانیہ سے مطابقت رکھنے کی ضرورت ہے۔ ہزاروں کیا ہوگا اگر ہم ایک ایسا ٹول بنا سکیں جو فوری طور پر ہر منظر نامے کے لیے سب سے زیادہ موزوں عفریت کو تلاش کرے۔ ایک ، اس بات کو یقینی بناتا ہے کہ ہر تصادم ممکن حد تک عمیق اور دلچسپ ہے؟ ٹول جو بیک وقت متعدد عوامل پر غور کرتا ہے آئیے اپنی ایک جستجو کا آغاز کریں: ملٹی ایٹریبیوٹ ویکٹر سرچ کی طاقت کا استعمال کرتے ہوئے، حتمی مونسٹر فائنڈنگ سسٹم بنائیں! ویکٹر کی تلاش سے مخلوق پیدا کرنا، ایسا کیوں؟ معلومات کی بازیافت میں ایک انقلاب کی نمائندگی کرتی ہے۔ ویکٹر ایمبیڈنگ - سیاق و سباق اور معنوی معنی کو مدنظر رکھتے ہوئے - ویکٹر کی تلاش کو زیادہ متعلقہ اور درست نتائج دینے، نہ صرف ساختہ بلکہ غیر ساختہ ڈیٹا اور متعدد زبانوں، اور پیمانے کو ہینڈل کرنے کا اختیار دیتا ہے۔ لیکن حقیقی دنیا کی ایپلی کیشنز میں اعلیٰ معیار کے جوابات پیدا کرنے کے لیے، ہمیں اکثر اپنے ڈیٹا آبجیکٹ کی مخصوص خصوصیات کے لیے مختلف وزن تفویض کرنے کی ضرورت ہوتی ہے۔ ویکٹر کی تلاش ملٹی انتساب ویکٹر کی تلاش کے لیے دو عام طریقے ہیں۔ دونوں الگ الگ ڈیٹا آبجیکٹ کے ہر وصف کو سرایت کرکے شروع کرتے ہیں۔ ان دو طریقوں کے درمیان بنیادی فرق یہ ہے کہ ہماری ایمبیڈنگز کو کیسے اور ہے۔ ذخیرہ تلاش کیا جاتا نقطہ نظر - ہر ویکٹر ویکٹر کو الگ الگ ویکٹر اسٹورز میں اسٹور کریں (ایک فی وصف)، ہر ایک وصف کے لیے الگ تلاش کریں، تلاش کے نتائج کو یکجا کریں، اور بعد از عمل (مثلاً وزن) حسب ضرورت۔ سادہ اپروچ - تمام انتساب ویکٹرز کو ایک ہی ویکٹر اسٹور میں جوڑیں اور اسٹور کریں (سپر لنکڈ کی بلٹ ان فنکشنلٹی کا استعمال کرتے ہوئے)، جو ہمیں کی اجازت دیتا ہے، اٹینڈنٹ کی کارکردگی کے فوائد کے ساتھ۔ سپر لنکڈ کی استفسار کے وقت ہر ایک وصف کا وزن کرنے دیتی ہیں تاکہ مزید متعلقہ نتائج سامنے آئیں، بغیر کسی پوسٹ پروسیسنگ کے۔ سپر لنکڈ صرف ایک بار تلاش کرنے spaces ہمیں ذیل میں، ہم ملٹی ایٹریبیوٹ ویکٹر سرچ ٹول کو لاگو کرنے کے لیے ان دو طریقوں کا استعمال کریں گے - ایک Dungeons and Dragons Monster Finder! ہمارے سادہ نفاذ، خاص طور پر دوسرا، یہ واضح کرے گا کہ کس طرح زیادہ طاقتور اور لچکدار تلاش کے نظام بنائے جائیں، جو پیچیدہ، کثیر جہتی سوالات کو آسانی کے ساتھ ہینڈل کر سکتے ہیں، چاہے آپ کے استعمال کا معاملہ کچھ بھی ہو۔ اگر آپ ویکٹر مماثلت کی تلاش میں نئے ہیں، تو پریشان نہ ہوں! ہم نے آپ کا احاطہ کیا ہے - ہمارے دیکھیں۔ بلڈنگ بلاکس کے مضامین ٹھیک ہے، چلو عفریت کا شکار کرتے ہیں! ڈیٹا سیٹ سب سے پہلے، ہم ایک بڑے لینگویج ماڈل (LLM) کا اشارہ دے کر، راکشسوں کا ایک چھوٹا مصنوعی ڈیٹا سیٹ تیار کریں گے: Generate two JSON lists: 'monsters' and 'queries'. 1. 'monsters' list: Create 20 unique monsters with the following properties: - name: A distinctive name - look: Brief description of appearance (2-3 sentences) - habitat: Where the monster lives (2-3 sentences) - behavior: How the monster acts (2-3 sentences) Ensure some monsters share similar features while remaining distinct. 2. 'queries' list: Create 5 queries to search for monsters: - Each query should be in the format: {look: "...", habitat: "...", behavior: "..."} - Use simple, brief descriptions (1-3 words per field) - Make queries somewhat general to match multiple monsters Output format: { "monsters": [ {"name": "...", "look": "...", "habitat": "...", "behavior": "..."}, ... ], "queries": [ {"look": "...", "habitat": "...", "behavior": "..."}, ... ] } آئیے ہمارے LLM کے تیار کردہ ڈیٹاسیٹ کے نمونے پر ایک نظر ڈالیں۔ نوٹ: LLM جنریشن غیر فیصلہ کن ہے، اس لیے آپ کے نتائج مختلف ہو سکتے ہیں۔ ہمارے پہلے پانچ راکشس یہ ہیں: # نام دیکھو مسکن سلوک 0 Luminoth چمکتے پنکھوں اور اینٹینا کے ساتھ کیڑے جیسی مخلوق گھنے جنگلات اور جنگلات جن میں بائولومینسنٹ نباتات ہیں۔ بات چیت کرنے اور شکار کو اپنی طرف متوجہ کرنے کے لیے آرام دہ روشنی کے نمونوں کا اخراج کرتا ہے۔ 1 ایکوا Wraith بہتے پانی سے بنی پارباسی انسانی شکل دریا، جھیلیں اور ساحلی علاقے آبی ذخائر کے ساتھ گھل مل جانے کے لیے شکل بدلتی ہے اور کرنٹ کو کنٹرول کرتی ہے۔ 2 اسٹون ہارٹ گولم بڑے پیمانے پر ہیومنائڈ جو آپس میں جڑی ہوئی چٹان کی شکلوں پر مشتمل ہے۔ چٹانی پہاڑ اور قدیم کھنڈرات صدیوں سے ہائبرنیٹ کرتا ہے، اپنے علاقے کی حفاظت کے لیے بیدار ہوتا ہے۔ 3 سرگوشی کا سایہ چمکتی آنکھوں کے ساتھ سایہ دار، بے ساختہ وجود تاریک جنگلات اور لاوارث عمارتیں۔ خوف پر کھانا کھلاتا ہے اور پریشان کن سچائیوں کو وسوسہ دیتا ہے۔ 4 زیفیر ڈانسر چمکدار پنکھوں کے ساتھ خوبصورت ایویئن مخلوق اونچی پہاڑی چوٹیاں اور ہوا سے بہنے والے میدان ساتھیوں کو اپنی طرف متوجہ کرنے کے لیے مسحور کن فضائی ڈسپلے بناتا ہے۔ ...اور ہمارے پیدا کردہ سوالات: دیکھو مسکن رویہ 0 چمکنے والا تاریک جگہیں۔ ہلکی ہیرا پھیری 1 عنصری انتہائی ماحول ماحولیاتی کنٹرول 2 شکل بدلنا متنوع مناظر وہم تخلیق 3 کرسٹل معدنیات سے بھرپور علاقے توانائی جذب 4 ایتھریل ماحولیاتی دماغ پر اثر انداز ہونا اصل ڈیٹا سیٹ اور استفسار کی مثالیں دیکھیں۔ یہاں بازیافت آئیے پیرامیٹرز مرتب کریں جو ہم اپنے دونوں طریقوں میں استعمال کریں گے - بولی اور سپر لنکڈ - نیچے۔ ہم اپنے ویکٹر ایمبیڈنگ اس کے ساتھ تیار کرتے ہیں: sentence-transformers/all-mpnet-base-v2. سادگی کی خاطر، ہم اپنے آؤٹ پٹ کو ٹاپ 3 میچوں تک محدود کر دیں گے۔ (مکمل کوڈ کے لیے، بشمول ضروری درآمدات اور مددگار افعال، دیکھیں۔) نوٹ بک LIMIT = 3 MODEL_NAME = "sentence-transformers/all-mpnet-base-v2" اب، آئیے اپنی کثیر الصفات عفریت کی تلاش جاری رکھیں! سب سے پہلے، ہم نقطہ نظر کی کوشش کریں گے. بولی بولی نقطہ نظر اپنے سادہ انداز میں، ہم صفات کو آزادانہ طور پر سرایت کرتے ہیں اور انہیں مختلف اشاریوں میں محفوظ کرتے ہیں۔ استفسار کے وقت، ہم تمام اشاریہ جات پر متعدد kNN-تلاشیں چلاتے ہیں، اور پھر اپنے تمام جزوی نتائج کو یکجا کرتے ہیں۔ ہم کلاس کی وضاحت کرتے ہوئے شروع کرتے ہیں۔ NaiveRetriever ہمارے -generated embeddings کا استعمال کرتے ہوئے، ہمارے ڈیٹاسیٹ پر مماثلت پر مبنی تلاش کرنے کے لیے۔ all-mpnet-base-v2 class NaiveRetriever: def __init__(self, data: pd.DataFrame): self.model = SentenceTransformer(MODEL_NAME) self.data = data.copy() self.ids = self.data.index.to_list() self.knns = {} for key in self.data: embeddings = self.model.encode(self.data[key].values) knn = NearestNeighbors(metric="cosine").fit(embeddings) self.knns[key] = knn def search_key(self, key: str, value: str, limit: int = LIMIT) -> pd.DataFrame: embedding = self.model.encode(value) knn = self.knns[key] distances, indices = knn.kneighbors( [embedding], n_neighbors=limit, return_distance=True ) ids = [self.ids[i] for i in indices[0]] similarities = (1 - distances).flatten() # by definition: # cosine distance = 1 - cosine similarity result = pd.DataFrame( {"id": ids, f"score_{key}": similarities, key: self.data[key][ids]} ) result.set_index("id", inplace=True) return result def search(self, query: dict, limit: int = LIMIT) -> pd.DataFrame: results = [] for key, value in query.items(): if key not in self.knns: continue result_key = self.search_key(key, value, limit=limit) result_key.drop(columns=[key], inplace=True) results.append(result_key) merged_results = pd.concat(results, axis=1) merged_results["score"] = merged_results.mean(axis=1, skipna=False) merged_results.sort_values("score", ascending=False, inplace=True) return merged_results naive_retriever = NaiveRetriever(df.set_index("name")) آئیے اوپر ہماری تیار کردہ فہرست سے پہلا سوال استعمال کریں، اور اپنے استعمال کرتے ہوئے راکشسوں کو تلاش کریں: naive_retriever query = { 'look': 'glowing', 'habitat': 'dark places', 'behavior': 'light manipulation' } naive_retriever.search(query) ہماری naive_retriever ہر ایک خصوصیت کے لیے درج ذیل تلاش کے نتائج لوٹاتا ہے: آئی ڈی سکور_لکھ دیکھو سرگوشی کا سایہ 0.503578 چمکتی آنکھوں کے ساتھ سایہ دار، بے ساختہ وجود ریت کا طوفان جن 0.407344 چمکتی ہوئی علامتوں کے ساتھ ریت کا گھومتا ہوا بھنور Luminoth 0.378619 چمکتے پنکھوں اور اینٹینا کے ساتھ کیڑے جیسی مخلوق بہت اچھے! ہمارے لوٹے ہوئے عفریت کے نتائج متعلقہ ہیں - ان سب میں کچھ "چمکنے والی" خصوصیت ہے۔ آئیے دیکھتے ہیں کہ جب ہم دیگر دو صفات کو تلاش کرتے ہیں تو بولی نقطہ نظر کیا واپس آتا ہے۔ آئی ڈی سکور_رہائش مسکن سرگوشی کا سایہ 0.609567 تاریک جنگلات اور لاوارث عمارتیں۔ فنگل نیٹ ورک 0.438856 زیر زمین غاریں اور گیلے جنگلات Thornvine Elemental 0.423421 زیادہ بڑھے ہوئے کھنڈرات اور گھنے جنگل آئی ڈی سکور_رویہ سلوک زندہ گریفٹی 0.385741 ماحول کے ساتھ گھل مل جانے کے لیے شکل بدلتی ہے اور روغن جذب کرتی ہے۔ کرسٹل ونگ ڈریک 0.385211 قیمتی جواہرات کو ذخیرہ کرتا ہے اور روشنی کو طاقتور بیم میں بدل سکتا ہے۔ Luminoth 0.345566 بات چیت کرنے اور شکار کو اپنی طرف متوجہ کرنے کے لیے آرام دہ روشنی کے نمونوں کا اخراج کرتا ہے۔ تمام بازیافت شدہ راکشس مطلوبہ صفات کے مالک ہیں۔ پہلی نظر میں، سادہ تلاش کے نتائج امید افزا لگ سکتے ہیں۔ لیکن ہمیں ایسے راکشسوں کو تلاش کرنے کی ضرورت ہے جو حامل ہوں۔ آئیے اپنے نتائج کو ضم کرتے ہیں یہ دیکھنے کے لیے کہ ہمارے راکشس اس مقصد کو حاصل کرنے میں کتنی اچھی کارکردگی کا مظاہرہ کرتے ہیں: بیک وقت تینوں صفات کے آئی ڈی سکور_لکھ سکور_رہائش سکور_رویہ سرگوشی کا سایہ 0.503578 0.609567 ریت کا طوفان جن 0.407344 Luminoth 0.378619 0.345566 فنگل نیٹ ورک 0.438856 Thornvine Elemental 0.423421 زندہ گریفٹی 0.385741 کرسٹل ونگ ڈریک 0.385211 اور یہاں، بولی اپروچ کی حدیں واضح ہو جاتی ہیں۔ آئیے اندازہ لگاتے ہیں: وصف کے لحاظ سے مطابقت: : تین راکشسوں کو بازیافت کیا گیا تھا (فسپرنگ شیڈ، سینڈ اسٹورم جین، اور لومینوت)۔ look : نتائج سے صرف ایک عفریت متعلقہ تھا (سرگوشی کا سایہ)۔ habitat look : نتائج سے صرف ایک عفریت متعلقہ تھا (Luminoth)، لیکن یہ کے لیے متعلقہ سے مختلف ہے۔ behavior look habitat مجموعی مطابقت: بیک وقت تینوں صفات کے لیے کوئی ایک راکشس بازیافت نہیں کیا گیا۔ نتائج بکھرے ہوئے ہیں: مختلف راکشس مختلف صفات کے لیے متعلقہ ہیں۔ مختصراً، بولی تلاش کا طریقہ ایسے راکشسوں کو تلاش کرنے میں ناکام رہتا ہے جو ایک ساتھ تمام معیارات کو پورا کرتے ہیں۔ آئیے اسے 3 کے بجائے 6 راکشس فی انتساب کے ساتھ آزماتے ہیں۔ آئیے ایک نظر ڈالتے ہیں کہ یہ نقطہ نظر کیا پیدا کرتا ہے: ہو سکتا ہے کہ ہم ہر ایک وصف کے لیے مزید راکشسوں کو فعال طور پر بازیافت کر کے اس مسئلے کو حل کر سکیں؟ آئی ڈی سکور_لکھ سکور_رہائش سکور_رویہ سرگوشی کا سایہ 0.503578 0.609567 ریت کا طوفان جن 0.407344 0.365061 Luminoth 0.378619 0.345566 نیبولا جیلی فش 0.36627 0.259969 ڈریم ویور آکٹوپس 0.315679 کوانٹم فائر فلائی 0.288578 فنگل نیٹ ورک 0.438856 Thornvine Elemental 0.423421 مسٹ فینٹم 0.366816 0.236649 اسٹون ہارٹ گولم 0.342287 زندہ گریفٹی 0.385741 کرسٹل ونگ ڈریک 0.385211 ایکوا Wraith 0.283581 اب ہم نے 13 راکشسوں کو بازیافت کیا ہے (ہمارے چھوٹے ڈیٹاسیٹ کے آدھے سے زیادہ!)، اور ایک ہی مسئلہ ہے: ان تینوں صفات کے لیے ان میں سے کسی ایک کو بھی بازیافت نہیں کیا گیا۔ اب بھی بازیافت شدہ راکشسوں کی تعداد میں اضافہ (6 سے زیادہ) ہمارا مسئلہ حل ، لیکن اس سے اضافی مسائل پیدا ہوتے ہیں: کر سکتا ہے پیداوار میں، مزید نتائج کی بازیافت (متعدد kNN تلاشیں) تلاش کے وقت کو نمایاں طور پر بڑھاتا ہے۔ ہر نئی خصوصیت کے لیے جو ہم متعارف کراتے ہیں، ایک "مکمل" عفریت تلاش کرنے کے ہمارے امکانات - ہماری استفسار میں موجود تمام صفات کے ساتھ - تیزی سے کم ہو جاتے ہیں۔ اسے روکنے کے لیے، ہمیں بہت سے قریبی پڑوسیوں (راکشسوں) کو بازیافت کرنا ہوگا، جس سے بازیافت شدہ راکشسوں کی کل تعداد تیزی سے بڑھ رہی ہے۔ ہمارے پاس اب بھی کوئی گارنٹی نہیں ہے کہ ہم ان راکشسوں کو بازیافت کریں گے جو ہماری تمام مطلوبہ صفات کے مالک ہیں۔ اگر ہم ایسے راکشسوں کو بازیافت کرنے کا انتظام کرتے ہیں جو ایک ہی وقت میں تمام معیارات کو پورا کرتے ہیں، تو ہمیں اضافی اوور ہیڈ مصالحتی نتائج کو خرچ کرنا پڑے گا۔ خلاصہ یہ کہ قابل عمل کثیر الصفات کی تلاش کے لیے، خاص طور پر پروڈکشن میں سادہ طریقہ بہت غیر یقینی اور غیر موثر ہے۔ سپر لنک شدہ نقطہ نظر آئیے اپنے دوسرے نقطہ نظر کو لاگو کرتے ہیں یہ دیکھنے کے لیے کہ آیا یہ بولی سے بہتر کام کرتا ہے۔ سب سے پہلے، ہم اسکیما، اسپیس، انڈیکس، اور استفسار کی وضاحت کرتے ہیں: @schema class Monster: id: IdField look: String habitat: String behavior: String monster = Monster() look_space = TextSimilaritySpace(text=monster.look, model=MODEL_NAME) habitat_space = TextSimilaritySpace(text=monster.habitat, model=MODEL_NAME) behavior_space = TextSimilaritySpace(text=monster.behavior, model=MODEL_NAME) monster_index = Index([look_space, habitat_space, behavior_space]) monster_query = ( Query( monster_index, weights={ look_space: Param("look_weight"), habitat_space: Param("habitat_weight"), behavior_space: Param("behavior_weight"), }, ) .find(monster) .similar(look_space.text, Param("look")) .similar(habitat_space.text, Param("habitat")) .similar(behavior_space.text, Param("behavior")) .limit(LIMIT) ) default_weights = { "look_weight": 1.0, "habitat_weight": 1.0, "behavior_weight": 1.0 } اب، ہم ایگزیکیوٹر شروع کرتے ہیں اور ڈیٹا اپ لوڈ کرتے ہیں: monster_parser = DataFrameParser(monster, mapping={monster.id: "name"}) source: InMemorySource = InMemorySource(monster, parser=monster_parser) executor = InMemoryExecutor(sources=[source], indices=[monster_index]) app = executor.run() source.put([df]) آئیے وہی استفسار چلائیں جو ہم نے اوپر اپنے سادہ انداز کے نفاذ میں چلایا تھا: query = { 'look': 'glowing', 'habitat': 'dark places', 'behavior': 'light manipulation' } app.query( monster_query, limit=LIMIT, **query, **default_weights ) آئی ڈی سکور دیکھو مسکن سلوک سرگوشی کا سایہ 0.376738 چمکتی آنکھوں کے ساتھ سایہ دار، بے ساختہ وجود تاریک جنگلات اور لاوارث عمارتیں۔ خوف پر کھانا کھلاتا ہے اور پریشان کن سچائیوں کو وسوسہ دیتا ہے۔ Luminoth 0.340084 چمکتے پنکھوں اور اینٹینا کے ساتھ کیڑے جیسی مخلوق گھنے جنگلات اور جنگلات جن میں بائولومینسنٹ نباتات ہیں۔ بات چیت کرنے اور شکار کو اپنی طرف متوجہ کرنے کے لیے آرام دہ روشنی کے نمونوں کا اخراج کرتا ہے۔ زندہ گریفٹی 0.330587 دو جہتی، رنگین مخلوق جو چپٹی سطحوں پر رہتی ہے۔ شہری علاقوں، خاص طور پر دیواریں اور بل بورڈز ماحول کے ساتھ گھل مل جانے کے لیے شکل بدلتی ہے اور روغن جذب کرتی ہے۔ اور آواز! اس بار، ہمارے سب سے اوپر آنے والے راکشسوں میں سے ہر ایک اس اسکور میں اعلیٰ درجہ پر ہے جو ان تینوں خصوصیات میں سے ایک قسم کے "مطلب" کی نمائندگی کرتا ہے جو ہم چاہتے ہیں کہ ہمارے عفریت کو حاصل ہو۔ آئیے ہر عفریت کے اسکور کو تفصیل سے توڑتے ہیں: آئی ڈی دیکھو مسکن سلوک کل سرگوشی کا سایہ 0.167859 0.203189 0.005689 0.376738 Luminoth 0.126206 0.098689 0.115189 0.340084 زندہ گریفٹی 0.091063 0.110944 0.12858 0.330587 ہمارے دوسرے اور تیسرے نتائج، Luminoth اور Living Graffiti، دونوں مطلوبہ تینوں خصوصیات کے مالک ہیں۔ سرفہرست نتیجہ، Whispering Shade، اگرچہ یہ روشنی کی ہیرا پھیری کے معاملے میں کم متعلقہ ہے - جیسا کہ اس کے اسکور (0.006) سے ظاہر ہوتا ہے، اس میں "چمکتی ہوئی" خصوصیات اور ایک تاریک ماحول ہے جو اس کی (0.168) اور (0.203) اسکور کو بہت زیادہ بناتا ہے۔ اعلی، اسے سب سے زیادہ کل سکور (0.377) دیتا ہے، جو اسے مجموعی طور پر سب سے زیادہ متعلقہ عفریت بناتا ہے۔ کیا بہتری ہے! behavior look habitat کیا ہم اپنے نتائج کو نقل کر سکتے ہیں؟ آئیے ایک اور استفسار کرنے کی کوشش کریں اور معلوم کریں۔ query = { 'look': 'shapeshifting', 'habitat': 'varied landscapes', 'behavior': 'illusion creation' } آئی ڈی سکور دیکھو مسکن سلوک مسٹ فینٹم 0.489574 ایتھریل، دھند نما ہیومنائڈ جس میں شفٹنگ خصوصیات ہیں۔ دلدل، مورز، اور دھند زدہ ساحلی پٹی۔ وہم اور وسوسوں سے مسافروں کو گمراہ کرتا ہے۔ زیفیر ڈانسر 0.342075 چمکدار پنکھوں کے ساتھ خوبصورت ایویئن مخلوق اونچی پہاڑی چوٹیاں اور ہوا سے بہنے والے میدان ساتھیوں کو اپنی طرف متوجہ کرنے کے لیے مسحور کن فضائی ڈسپلے بناتا ہے۔ سرگوشی کا سایہ 0.337434 چمکتی آنکھوں کے ساتھ سایہ دار، بے ساختہ وجود تاریک جنگلات اور لاوارث عمارتیں۔ خوف پر کھانا کھلاتا ہے اور پریشان کن سچائیوں کو وسوسہ دیتا ہے۔ بہت اچھا! ہمارے نتائج ایک بار پھر بہترین ہیں۔ کیا ہوگا اگر ہم اپنے ڈیٹاسیٹ سے کسی مخصوص عفریت سے ملتے جلتے راکشسوں کو تلاش کرنا چاہتے ہیں؟ آئیے اسے ایک عفریت کے ساتھ آزمائیں جسے ہم نے ابھی تک نہیں دیکھا ہے - ہارمونک کورل۔ ہم اس عفریت کے لیے صفات نکال اور دستی طور پر استفسار کے پیرامیٹرز بنا سکتے ہیں۔ لیکن Superlinked کے پاس ایک طریقہ ہے جسے ہم استفسار آبجیکٹ پر استعمال کر سکتے ہیں۔ چونکہ ہر عفریت کی شناخت اس کا نام ہے، اس لیے ہم اپنی درخواست کا اظہار اس طرح کر سکتے ہیں: سکتے ہیں with_vector app.query( monster_query.with_vector(monster, "Harmonic Coral"), **default_weights, limit=LIMIT ) آئی ڈی سکور دیکھو مسکن سلوک ہارمونک کورل 1 برانچنگ، موسیقی کے آلے کی طرح کی ساخت جس میں ہلتے ہوئے ٹینڈرلز ہیں۔ اتھلے سمندر اور سمندری تالاب بات چیت کرنے اور جذبات کو متاثر کرنے کے لیے پیچیدہ دھنیں تخلیق کرتا ہے۔ ڈریم ویور آکٹوپس 0.402288 خیموں کے ساتھ سیفالوپڈ جو اورورا کی طرح چمکتے ہیں۔ گہری سمندری خندقیں اور پانی کے اندر غار قریبی مخلوق کے خوابوں کو متاثر کرتا ہے۔ ایکوا Wraith 0.330869 بہتے پانی سے بنی پارباسی انسانی شکل دریا، جھیلیں اور ساحلی علاقے آبی ذخائر کے ساتھ گھل مل جانے کے لیے شکل بدلتی ہے اور کرنٹ کو کنٹرول کرتی ہے۔ سب سے اوپر نتیجہ سب سے زیادہ متعلقہ ہے، ہارمونک کورل خود، جیسا کہ توقع کی گئی ہے۔ دیگر دو عفریت جو ہماری تلاش سے حاصل ہوئے ہیں وہ ہیں Dreamweaver Octopus اور Aqua Wraith۔ دونوں ہارمونک کورل کے ساتھ اہم موضوعاتی ( ) عناصر کا اشتراک کرتے ہیں: انتساب آبی رہائش گاہیں ( ) habitat ان کے ماحول پر اثر انداز ہونے یا اس میں ہیرا پھیری کرنے کی صلاحیت ( ) behavior متحرک یا سیال بصری خصوصیات ( ) look وصف وزن فرض کریں، اب، کہ ہم وصف کو زیادہ اہمیت دینا چاہتے ہیں۔ سپر لنکڈ فریم ورک ہمیں استفسار کے وقت وزن کو آسانی سے ایڈجسٹ کرنے دیتا ہے۔ آسان موازنہ کے لیے، ہم ہارمونک کورل سے ملتے جلتے راکشسوں کی تلاش کریں گے، لیکن اپنے وزن کو موافق کے ساتھ۔ look look weights = { "look_weight": 1.0, "habitat_weight": 0, "behavior_weight": 0 } app.query( monster_query.with_vector(monster, "Harmonic Coral"), limit=LIMIT, **weights ) آئی ڈی سکور دیکھو مسکن سلوک ہارمونک کورل 0.57735 برانچنگ، موسیقی کے آلے کی طرح کی ساخت جس میں ہلتے ہوئے ٹینڈرلز ہیں۔ اتھلے سمندر اور سمندری تالاب بات چیت کرنے اور جذبات کو متاثر کرنے کے لیے پیچیدہ دھنیں تخلیق کرتا ہے۔ Thornvine Elemental 0.252593 جڑی ہوئی بیلوں اور کانٹوں کے جسم کے ساتھ پودوں کی طرح کی مخلوق زیادہ بڑھے ہوئے کھنڈرات اور گھنے جنگل تیزی سے بڑھتا ہے اور پودوں کی زندگی کو کنٹرول کرتا ہے۔ پلازما ناگ 0.243241 کڑکتی توانائی سے بنی سانپ جیسی مخلوق بجلی کے طوفان اور پاور پلانٹس بجلی کے کرنٹوں پر فیڈ کرتا ہے اور شارٹ سرکٹ ٹیکنالوجی کر سکتا ہے۔ ہمارے تمام نتائج (مناسب طور پر) ایک جیسے ہوتے ہیں - "ہلتے ہوئے ٹینڈرلز کے ساتھ شاخیں"، "مڑی ہوئی بیلوں اور کانٹوں کے جسم کے ساتھ پودوں کی طرح کی جاندار"، "سانپ کی طرح"۔ اب، آئیے ایک اور تلاش کرتے ہیں، ظاہری شکل کو نظر انداز کرتے ہوئے، اور اس کے بجائے ایسے راکشسوں کی تلاش کرتے ہیں جو بیک وقت اور کے لحاظ سے ایک جیسے ہوتے ہیں: habitat behavior weights = { "look_weight": 0, "habitat_weight": 1.0, "behavior_weight": 1.0 } آئی ڈی سکور دیکھو مسکن سلوک ہارمونک کورل 0.816497 برانچنگ، موسیقی کے آلے کی طرح کی ساخت جس میں ہلتے ہوئے ٹینڈرلز ہیں۔ اتھلے سمندر اور سمندری تالاب بات چیت کرنے اور جذبات کو متاثر کرنے کے لیے پیچیدہ دھنیں تخلیق کرتا ہے۔ ڈریم ویور آکٹوپس 0.357656 خیموں کے ساتھ سیفالوپڈ جو ارورہ کی طرح چمکتے ہیں۔ گہری سمندری خندقیں اور پانی کے اندر غار قریبی مخلوق کے خوابوں کو متاثر کرتا ہے۔ مسٹ فینٹم 0.288106 ایتھریل، دھند نما ہیومنائڈ جس میں شفٹنگ خصوصیات ہیں۔ دلدل، مورز، اور دھند زدہ ساحلی پٹی۔ وہم اور وسوسوں سے مسافروں کو گمراہ کرتا ہے۔ ایک بار پھر، Superlinked اپروچ بہت اچھے نتائج پیدا کرتا ہے۔ تینوں راکشس پانی والے ماحول میں رہتے ہیں اور دماغ پر قابو پانے کی صلاحیتوں کے مالک ہیں۔ آخر میں، آئیے ایک اور تلاش کرنے کی کوشش کرتے ہیں، تینوں صفات کو مختلف طریقے سے وزن کرتے ہوئے - ایسے راکشسوں کو تلاش کرنے کے لیے جو ہارمونک کورل کے مقابلے میں کچھ ملتے جلتے نظر آتے ہیں، بہت مختلف رہائش گاہوں میں رہتے ہیں، اور بہت ملتے جلتے سلوک کے مالک ہیں: weights = { "look_weight": 0.5, "habitat_weight": -1.0, "behavior_weight": 1.0 } آئی ڈی سکور دیکھو مسکن سلوک ہارمونک کورل 0.19245 برانچنگ، موسیقی کے آلے کی طرح کی ساخت جس میں ہلتے ہوئے ٹینڈرلز ہیں۔ اتھلے سمندر اور سمندری تالاب بات چیت کرنے اور جذبات کو متاثر کرنے کے لیے پیچیدہ دھنیں تخلیق کرتا ہے۔ Luminoth 0.149196 چمکتے پنکھوں اور اینٹینا کے ساتھ کیڑے جیسی مخلوق گھنے جنگلات اور جنگلات جن میں بائولومینسنٹ نباتات ہیں۔ بات چیت کرنے اور شکار کو اپنی طرف متوجہ کرنے کے لیے آرام دہ روشنی کے نمونوں کا اخراج کرتا ہے۔ زیفیر ڈانسر 0.136456 چمکدار پنکھوں کے ساتھ خوبصورت ایویئن مخلوق اونچی پہاڑی چوٹیاں اور ہوا سے بہنے والے میدان ساتھیوں کو اپنی طرف متوجہ کرنے کے لیے مسحور کن فضائی ڈسپلے بناتا ہے۔ ایک بار پھر عظیم نتائج! ہمارے دو دیگر بازیافت شدہ راکشس - Luminoth اور Zephyr Dancer - ہارمونک کورل کی طرح برتاؤ رکھتے ہیں اور ہارمونک کورل سے مختلف رہائش گاہوں میں رہتے ہیں۔ وہ ہارمونک کورل سے بھی بہت مختلف نظر آتے ہیں۔ (جبکہ ہارمونک کورل کے ٹینڈرلز اور لومینوتھ کا اینٹینا کچھ اسی طرح کی خصوصیات ہیں، ہم نے صرف وزن کو 0.5 تک کم کیا، اور دونوں راکشسوں کے درمیان مماثلت وہیں ختم ہو جاتی ہے۔) look_weight آئیے دیکھتے ہیں کہ انفرادی صفات کے لحاظ سے ان راکشسوں کے مجموعی اسکور کیسے نکلتے ہیں: آئی ڈی دیکھو مسکن سلوک کل ہارمونک کورل 0.19245 -0.3849 0.3849 0.19245 Luminoth 0.052457 -0.068144 0.164884 0.149196 زیفیر ڈانسر 0.050741 -0.079734 0.165449 0.136456 (-1.0) کو منفی طور پر وزن دے کر، ہم جان بوجھ کر اسی طرح کے مسکن والے راکشسوں کو "دور دھکیلتے" ہیں اور اس کی بجائے سطحی راکشسوں کو جن کے ماحول ہارمونک کورل سے مختلف ہیں - جیسا کہ Luminoth's اور Zephyr Dancer کے منفی اسکور میں دیکھا گیا ہے۔ Luminoth's اور Zephyr Dancer کے اسکور نسبتاً زیادہ ہیں، جو ہارمونک کورل سے ان کے رویے کی مماثلت کی نشاندہی کرتے ہیں۔ ان کے کے اسکور مثبت لیکن کم ہیں، جو ہارمونک کورل سے لیکن انتہائی بصری مماثلت کی عکاسی کرتے ہیں۔ habitat_weight habitat behavior look کچھ مختصراً، کو -1.0 تک اور 0.5 تک کم کرنے کی ہماری حکمت عملی لیکن 1.0 پر رکھنے کی حکمت عملی ایسے راکشسوں کو سرفیس کرنے میں کارگر ثابت ہوتی ہے جو ہارمونک کورل کے ساتھ کلیدی طرز عمل کی خصوصیات کا اشتراک کرتے ہیں لیکن ان کا ماحول بہت مختلف ہے اور کم از کم کچھ مختلف نظر آتے ہیں۔ habitat_weight look_weight behavior_weight نتیجہ ملٹی ایٹریبیوٹ ویکٹر کی تلاش معلومات کی بازیافت میں ایک اہم پیشرفت ہے، جو بنیادی معنوی مماثلت کی تلاش کے مقابلے میں زیادہ درستگی، سیاق و سباق کی تفہیم اور لچک پیش کرتی ہے۔ پھر بھی، ہمارا سادہ طریقہ (اوپر) - انتساب ویکٹرز کو الگ سے ذخیرہ کرنا اور تلاش کرنا، نتائج کو یکجا کرنا - قابلیت، باریک بینی اور کارکردگی میں محدود ہے جب ہمیں ایک ساتھ متعدد صفات کے ساتھ اشیاء کو بازیافت کرنے کی ضرورت ہوتی ہے۔ (مزید برآں، متعدد kNN تلاشوں میں مربوط ویکٹر کے ساتھ ایک ہی تلاش سے زیادہ وقت لگتا ہے۔) پھر اس طرح کے منظرناموں کو ہینڈل کرنے کے لیے، یہ بہتر ہے کہ اپنے تمام ویکٹر ویکٹرز کو ایک ہی ویکٹر اسٹور میں اسٹور کریں اور کریں، استفسار کے وقت اپنے اوصاف کو وزن دیں۔ سپر لنکڈ اپروچ کسی بھی ایپلیکیشن کے لیے سادہ طریقہ سے زیادہ درست، موثر اور توسیع پذیر ہے جس کے لیے تیز، قابل بھروسہ، باریک بینی، ملٹی ایٹریبیوٹ ویکٹر بازیافت کی ضرورت ہوتی ہے - چاہے آپ کے استعمال کا معاملہ آپ کے ای کامرس میں حقیقی دنیا کے ڈیٹا چیلنجوں سے نمٹ رہا ہو یا سفارشی نظام۔ ... یا کچھ بالکل مختلف، جیسے راکشسوں سے لڑنا۔ ایک ہی تلاش تعاون کرنے والے اینڈری پیکونوف، مصنف Mór Kapronczay، ایڈیٹر اصل میں شائع ہوا۔ یہاں