ভেক্টর সদৃশতা অনুসন্ধান করা

এই বিষয়টি মিলভুস ব্যবহার করে এক্সটিটিগুলি অনুসন্ধান করা কীভাবে করবে তা নিয়ে।

মিলভুসে, ভেক্টর সদৃশতা অনুসন্ধান করা হয় কিভাবে বরাদ্দ মাপের (specified similarity measure) প্রযুক্তি এবং যে কুয়েরি ভেক্টর উপর ভেক্টরগুলির মধ্যে দূরত্বগুলি গণনা করে এবং সবচেয়ে মোটা ফলাফলগুলি ফিরিয়ে দেয়। আপনি স্কেলার বা প্রাথমিক কি ফিল্টার করার জন্য বুলিয়ান অভিব্যক্তি নির্ধারণ করে মিশিঃ সার্চ চালাতে পারেন।

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

সংগ্রহ লোড করা

মিলভুসের মধ্যে সবগুলি অনুসন্ধান এবং ক্যুয়ারি প্রক্রিয়া মেমোরিতে সঞ্চালিৎ হয়। ভেক্টর সদৃশতা অনুসন্ধান চালানোর আগে, সংগ্রহটি মেমোরিতে লোড করুন।

from pymilvus import Collection
collection = Collection("book")      # বিদ্যমান সংগ্রহ পাওয়া যাচ্ছে।
collection.load()

অনুসন্ধান প্যারামিটার প্রস্তুত করা

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

search_params = {
    "metric_type": "L2",
    "offset": 5,
    "ignore_growing": False,
    "params": {"nprobe": 10}
}
প্যারামিটার বর্ণনা
metric_type ভেক্টর সদৃশতা অনুসন্ধানের সময় ভেক্টরগুলির মধ্যে দূরত্ব নামানোর জন্য ব্যবহৃত পদ্ধতি। এটি ইনডেক্স নির্মাণ প্রক্রিয়ার সময় নির্ধারিত পদ্ধতির চেয়ে অবশ্যই সমান হতে হবে। অধিক তথ্যের জন্য অনুসন্ধানযোগ্যতা মাপকে দেখুন।
offset অনুসন্ধানের সময় পার হবার জন্য এবং 'অনুসন্ধান' পদ্ধতি এর 'limit' এর যোগফল আকর্ষণ করতে নাই। যেমন, যদি আপনি কুয়েরি ভেক্টরগুলির 9তম এবং 10ম নিকটতম প্রতিষ্ঠানগুলি জানতে চান, তাহলে 'limit' কে 2 এবং 'offset' কে 8 নির্ধারণ করুন।
ignore_growing ভেক্টর সদৃশতা অনুসন্ধানের সময় বৃদ্ধিয়মান খন্ড অগ্রাহ্য করতে হবে কিনা। ডিফল্ট মান হলো মিলভুস .
params নির্ধারিত ইনডেক্স টাইপের স্পেসিফিক অনুসন্ধান প্যারামিটার। আপেনডিক্স নির্মাণের প্রক্রিয়া বোঝার জন্য ভেক্টর ইনডেক্স দেখুন। ক্ষমতাময় অপশনগুলি যেমন - nprobe চিন্হাদের সংখ্যা অনুসন্ধান করতে। এই প্যারামিটার শুধুমাত্র বিভ্রান্তের ইনডেক্স টাইপ সেট করা সময় উপলভ্য। মানটি ইন্ডেক্স নির্মাণ প্রক্রিয়ার সময় নির্ধারিত এর চেয়ে কম হতে হবে। - ef প্যারামিটারটি অনুসন্ধান পরিসীমার এলাকা দেখায়। এই প্যারামিটারটি শুধুমাত্র 'HNSW' ইন্ডেক্স টাইপ সেট করা সময় উপলভ্য। মানটি 'top_k' এবং '32768' এর মধ্যে থাকতে হবে। - radius এক্সিরত প্রতিষ্ঠানের সাথে ভেক্টরগুলির পূর্বে সবচেয়ে সান্নিধিকভাবে সামান্যতা থাকে। - range_filter ব্যবহৃত হয় এমন ফিল্টারের জন্য যা ফিল্টার ফিল্ড ভ্যালু যা কুয়ারি ভেক্টরের সাথে সামান্যতা পড়ে।

ভেক্টর অনুসন্ধান করা

ভেক্টর অনুসন্ধানের জন্য Milvus ব্যবহার করুন। একটি নির্দিষ্ট পার্টিশনে অন্তর্ভুক্ত অনুসন্ধান করতে, পার্টিশনের নামের একটি তালিকা নির্দিষ্ট করুন।

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

results = collection.search(
    data=[[0.1, 0.2]], 
    anns_field="book_intro", 
    param=search_params,
    limit=10,
    expr=None,
    output_fields=['title'],
    consistency_level="Strong"
)

results[0].ids

results[0].distances

hit = results[0][0]
hit.entity.get('title')
প্যারামিটার বর্ণনা
data অনুসন্ধানের জন্য ব্যবহৃত ভেক্টর।
anns_field অনুসন্ধান করার ক্ষেত্রের নাম।
param সূচনা প্রকারের অনুসন্ধানের জন্য নির্দিষ্ট অনুসন্ধান প্যারামিটার। অধিক তথ্যের জন্য, ভেক্টর সূচনা দেখুন।
limit ফলাফল প্রদানের সংখ্যা। এই মানটি, সাথে param এর অফসেট, ১৬,৩৮৪ এর চেয়ে কম হতে হবে।
expr বৈশিষ্ট্যগুলির ফিল্টারিং জন্য বুলিয়ান এক্সপ্রেশন। বিস্তৃত তথ্যের জন্য, বুলিয়ান এক্সপ্রেশন নিয়ম দেখুন।
output_fields (ঐচ্ছিক) ফিল্ডের নামগুলি ফেরত দেওয়ার জন্য নাম। ভেক্টর ফিল্ড বর্তমানে সমর্থিত নয়।
consistency_level (ঐচ্ছিক) অনুসন্ধানের জন্য স্থিতিশীলতা স্তর।

সবচেয়ে সারির মূল্য এবং সবচেয়ে মিলিরপার্স্ট ভেক্টরদের দূরত্ব পরীক্ষা করুন।

results[0].ids
results[0].distances

অনুসন্ধান সম্পন্ন হলে, Milvus এ লোড করা সংগ্রহটি মেমোরি ব্যবহার কমানোর জন্য মুক্তি দিন।

collection.release()

সীমানা

বৈশিষ্ট্য সর্বাধিক সীমা
সংগ্রহের নামের দৈর্ঘ্য ২৫৫ অক্ষর
সংগ্রহে পার্টিশনের সংখ্যা ৪,০৯৬
সংগ্রহে ফিল্ডের সংখ্যা ২৫৬
সংগ্রহে শার্ড সংখ্যা ২৫৬
ভেক্টর মাত্রা ৩২,৭৬৮
শীর্ষ কে ১৬,৩৮৪
ইনপুট ভেক্টর ১৬,৩৮৪

মিশিত অনুসন্ধান করা

মিশিত অনুসন্ধান মৌলিকভাবে একটি ভেক্টর অনুসন্ধান এর সাথে বৈশিষ্ট্য ফ

ভেক্টর ফিল্টারিং রেঞ্জ কনফিগার করা

মিলভাসে সাধারণ ভেক্টর অনুসন্ধানের তুলনায়, একটি বিশেষ অনুসন্ধান পরিসীমা আপনির কোনো নির্দিষ্ট অনুসন্ধান ফলাফল পেতে নতুন দুইটি প্যারামিটার, radius এবং range_filter, পরিচালিত করে।

radius দিয়ে নির্ধারণ করা হয় যে কোনো ভেক্টর যথাযথ মনে হবে কোনো সমিতি বিন্যাসে। একটি অপ্রয়োজনীয় range_filter প্রায়ই উপযুক্ত radius এর সাথে ব্যবহৃত করা হয় যাতে নির্দিষ্ট ব্যাপ্তিতে অনুসন্ধান ভেক্টর মান ফিল্টার করা যায়। radius এবং range_filter এর উভয় প্যারামিটার তে ডেটা টাইপ FLOAT হয়। এই দুটি প্যারামিটার ঠিক করে সম্পূর্ণ অনুসন্ধানের নির্ভরতা এবং কার্যকরতা সমতুল্য করে।

সাধারণভাবে, সদৃশতা ভেক্টর মান এবং অনুসন্ধান ভেক্টর মান মধ্যে দূরত্ব দ্বারা পরিমাপ করা হয়। বিভিন্ন দূরত্ব পরিমাপ নির্বাচন করা তো radius এবং range_filter এর কনফিগারেশনে গুরুত্বপূর্ণ প্রভাব ফেলবে।

উদাহরণস্বরূপ, L2 দূরত্বের ক্ষেত্রে, অনুসন্ধান ফলাফলগুলি ক্ষেত্রে, radius থেকে কম দূরত্বের ভেক্টর মান ভিত্তিক ফিল্টার করা হতে হবে। এটা কারণ L2 দূরত্বে, ক্ষেত্রের ক্ষেত্রে, ছোট দূরত্বগুলি বেশি সমীপতা প্রদর্শন করে। এই জ্ঞানের সাথে, আপনি আপনার যদি কিছুটা মোটামুটি সমান ভেক্টরগুলি ফিল্টার করতে চান, তবে আপনি সুনির্দিষ্ট একটি কার্যকর range_filter মান সুনির্দিষ্ট করতে পারেন যা radius এর থেকে কম।

search_params = {
    "metric_type": "L2",
    "params": {
        "radius": 10.0,
        "range_filter" : 5.0
    }
}

IP দূরত্বের ক্ষেত্রে, স্কেনারিও বিপরীত। IP দূরত্বে, বড় দূরত্ব সমীপতা সূচিত করে। অতএব, L2 দূরত্বে প্যারামিটার radius এবং range_filter মান আপসিত হ। অন্য কথায়, IP দূরত্ব বিপরীত ভাবে ভেক্টরগুলির radius এবং range_filter মান শক্তিশালী হলেও। এবং ফলের ভেক্টরগুলির দূরত্ব radius এর চেয়ে বেশি হয়, কিন্তু range_filter এর সাথে বরাবর থাকতে হবে।

search_params = {
    "metric_type": "IP",
    "params": {
        "radius": 0.8,
        "range_filter" : 1.0
    }
}

রেঞ্জ অনুসন্ধান করা

দূরত্ব মাপ প্রকারে ভিত্তি করে radius এবং range_filter সূচনা করে প্রদত্ত ব্যাপ্তিতে ফলাফল ভেক্টরের ব্যাপ্তি সংজ্ঞায়িত করা যেতে পারে।

L2 দূরত্বে ভিত্তি করে প্রায়ই উপযুক্ত পেয়ার '5.0' এবং '10.0' এর ভেক্টরের মধ্যে সদৃশতা এর রেঞ্জে সংস্করণ করুন:

search_param = {
  "data": [[0.1, 0.2]], # অনুসন্ধান ভেক্টর
  "anns_field": "book_intro", # অনুসন্ধান করা ফিল্ড
  "param": { "metric_type": "L2", "params": { "nprobe": 10, "radius": 10.0, "range_filter" : 5.0 }, "offset": 0 },
  "limit": 2,
  "output_fields": ["int64", "float"]  # ফিরে দেওয়ার জন্য ক্ষেত্র
}

res = collection.search(**search_param)

IP দূরত্বে ভিত্তি করে প্রায়ই উপযুক্ত পেয়ার '1.0' এবং '0.8' এর ভেক্টরের মধ্যে সদৃশতার উপর রেঞ্জ অনুসন্ধান করুন:

search_param = {
  "data": [[0.1, 0.2]], # অনুসন্ধান ভেক্টর
  "anns_field": "book_intro", # অনুসন্ধান করা ফিল্ড
  "param": {"metric_type": "IP", "params": { "nprobe": 10, "radius": 0.8, "range_filter" : 1.0 }, "offset": 0 },
  "limit": 2,
  "output_fields": ["int64", "float"]  # ফিরে দেওয়ার জন্য ক্ষেত্র
}

res = collection.search(**search_param)

সারংশ

মিলভাসে, রেঞ্জ অনুসন্ধান এমন ভেক্টর ফলাফল ফিরে দেয় যা নির্দিষ্ট দূরতির রেঞ্জের মধ্যে সমল হয়। এই কাজগুলির সম্পূর্ণ করার জন্য radius এবং range_filter দুটি প্যারামিটারগুলির সূচনা করা হয়। নীচের টেবিলটি বিভিন্ন দূরত্ব পরিমাপের জন্য এই দুই প্যারামিটারের কনফিগারেশন সংক্ষেপণ করে।

দূরত্ব পরিমাপের প্রকার কনফিগারেশন
L2 এবং অন্যান্য দূরত্ব range_filter <= দূরত্ব < radius
IP এবং কোসাইন দূরত্ব radius < দূরত্ব <= range_filter