ভেক্টর অনুসন্ধান জেনারেটিভ এআই টুলিংয়ের একটি গুরুত্বপূর্ণ উপাদান কারণ পুনরুদ্ধার অগমেন্টেড জেনারেশন (RAG) কীভাবে পছন্দ করে
2023 ভেক্টর অনুসন্ধান পণ্য এবং প্রকল্পগুলিতে একটি বিস্ফোরণ দেখেছে, তাদের মধ্যে নির্বাচন করা একটি গুরুতর প্রচেষ্টা করে তুলেছে। আপনি বিকল্পগুলি নিয়ে গবেষণা করার সাথে সাথে আপনাকে নিম্নলিখিত কঠিন সমস্যাগুলি এবং সেগুলি সমাধানের বিভিন্ন পদ্ধতি বিবেচনা করতে হবে৷ এখানে, আমি আপনাকে এই চ্যালেঞ্জগুলির মধ্য দিয়ে হেঁটে যাবো এবং বর্ণনা করব কিভাবে DataStax Astra DB এবং Apache Cassandra-এর জন্য আমাদের ভেক্টর অনুসন্ধান বাস্তবায়নের জন্য DataStax তাদের মোকাবেলা করেছে।
এই কঠিন সমস্যার মূলে রয়েছে গবেষকরা যাকে বলে "
অনেক ভেক্টর অনুসন্ধান অ্যালগরিদম একটি একক মেশিনে মেমরিতে ফিট করা ডেটাসেটের জন্য ডিজাইন করা হয়েছিল এবং এটি এখনও একমাত্র দৃশ্য
অন্য যেকোনো ডোমেনের মতো, স্কেল-আউটের জন্য প্রতিলিপি এবং পার্টিশন উভয়ই প্রয়োজন, সেইসাথে মৃত প্রতিলিপিগুলি প্রতিস্থাপন, নেটওয়ার্ক পার্টিশনের পরে সেগুলি মেরামত করা এবং আরও অনেক কিছু পরিচালনা করার জন্য সাবসিস্টেম প্রয়োজন।
এটি আমাদের জন্য একটি সহজ ছিল: স্কেল-আউট প্রতিলিপি হল ক্যাসান্দ্রার রুটি এবং মাখন, এবং এটিকে নতুন-ইন-ক্যাসান্ড্রা-5.0 SAI (স্টোরেজ-সংযুক্ত সূচক – দেখুন
"আবর্জনা সংগ্রহ" দ্বারা, আমি সূচী থেকে অপ্রচলিত তথ্য মুছে ফেলার অর্থ - মুছে ফেলা সারিগুলি পরিষ্কার করা এবং সারিগুলির সাথে কাজ করা যার সূচীকৃত ভেক্টর মান পরিবর্তিত হয়েছে৷ এটি উল্লেখ করার মতো মনে হতে পারে না - এটি রিলেশনাল ডাটাবেস জগতে চল্লিশ বছর ধরে একটি কমবেশি সমাধান করা সমস্যা - তবে ভেক্টর সূচকগুলি অনন্য।
মূল সমস্যা হল যে সমস্ত অ্যালগরিদম যা আমরা জানি সেগুলি কম-বিলম্বিত অনুসন্ধান এবং উচ্চ-রিকল ফলাফল উভয়ই গ্রাফ-ভিত্তিক। অন্যান্য অনেক ভেক্টর ইনডেক্সিং অ্যালগরিদম উপলব্ধ রয়েছে -
গ্রাফ সূচীগুলির সাথে চ্যালেঞ্জ হল যে একটি সারি বা নথি পরিবর্তন হলে আপনি পুরানো (ভেক্টর-সম্পর্কিত) নোডটি ছিঁড়ে ফেলতে পারবেন না; যদি আপনি এটি কয়েকবার বেশি করেন, তাহলে আপনার গ্রাফটি আর BFS (প্রস্থ-প্রথম অনুসন্ধান) একটি কোয়েরি ভেক্টরের সাথে বৃহত্তর সাদৃশ্যপূর্ণ এলাকার দিকে নির্দেশ করার উদ্দেশ্য সম্পাদন করতে সক্ষম হবে না।
তাই এই আবর্জনা সংগ্রহ করার জন্য আপনাকে কিছু সময়ে আপনার সূচীগুলি পুনর্নির্মাণ করতে হবে, কিন্তু কখন-এবং কীভাবে-আপনি এটি সংগঠিত করবেন? পরিবর্তন করার সময় আপনি যদি সর্বদা সবকিছু পুনর্নির্মাণ করেন, তাহলে আপনি সম্পাদিত শারীরিক লেখাগুলি ব্যাপকভাবে বৃদ্ধি করবেন; একে রাইট এম্পলিফিকেশন বলা হয়। অন্যদিকে, আপনি যদি কখনও পুনর্নির্মাণ না করেন তবে আপনি অনুসন্ধানের সময় অপ্রচলিত সারিগুলি ফিল্টার করার জন্য অতিরিক্ত কাজ করবেন ("পড়ুন পরিবর্ধন")।
এটি আরেকটি সমস্যা স্থান যা ক্যাসান্দ্রা বছরের পর বছর ধরে কাজ করছে। যেহেতু SAI সূচকগুলি মূল স্টোরেজ লাইফসাইকেলের সাথে সংযুক্ত, তাই তারা ক্যাসান্দ্রাতেও অংশগ্রহণ করে
DataStax Astra DB ক্লাউড অ্যাপ্লিকেশন ওয়ার্কলোডের জন্য একটি প্ল্যাটফর্ম প্রদান করতে Apache Cassandra-তে তৈরি করে।
এর মানে হল কাজের চাপ যা হল:
প্রতি সেকেন্ডে হাজার হাজার থেকে লক্ষাধিক অনুরোধ, সাধারণত কয়েকটি সারি পুনরুদ্ধার করার জন্য। এই কারণে আপনি Snowflake-এ Netflix চালাতে পারেননি, এমনকি যদি আপনি এটি সামর্থ্য করতে পারেন: Snowflake এবং অনুরূপ বিশ্লেষণাত্মক সিস্টেমগুলি শুধুমাত্র কয়েকটি সমবর্তী অনুরোধগুলি পরিচালনা করার জন্য ডিজাইন করা হয়েছে যেগুলি প্রতিটি কয়েক সেকেন্ড থেকে মিনিট বা তারও বেশি সময় ধরে চলে৷
মেমরির চেয়ে বড় যদি আপনার ডেটাসেট একটি একক মেশিনে মেমরিতে ফিট করে তবে আপনি কোন সরঞ্জামগুলি ব্যবহার করেন তা প্রায় বিবেচ্য নয়৷ Sqlite, MongoDB, MySQL - তারা সব ঠিকঠাক কাজ করবে। বিষয়গুলি আরও চ্যালেঞ্জিং হয়ে ওঠে যখন এটি হয় না - এবং খারাপ খবর হল যে ভেক্টর এম্বেডিংগুলি সাধারণত কয়েক KB হয়, বা সাধারণ ডাটাবেস নথির চেয়ে বড় আকারের অর্ডারের কাছাকাছি, তাই আপনি তুলনামূলকভাবে দ্রুত মেমরির চেয়ে বড় হয়ে যাবেন৷
অ্যাপ্লিকেশানের মূল আপনি যদি আপনার ডেটা হারিয়ে ফেলেন তবে আপনি যত্ন না করেন, কারণ এটি তেমন গুরুত্বপূর্ণ নয় বা আপনি এটিকে রেকর্ডের প্রকৃত উত্স থেকে পুনর্নির্মাণ করতে পারেন, তাহলে আপনি কোন সরঞ্জামগুলি ব্যবহার করেন তাতে আবার কিছু যায় আসে না৷ Cassandra, এবং Astra DB-এর মতো ডেটাবেসগুলি আপনার ডেটা উপলভ্য এবং টেকসই রাখার জন্য তৈরি করা হয়েছে তা যাই হোক না কেন।
আমি উপরে উল্লেখ করেছি যে সুপরিচিত
একটি সম্পর্কিত সমস্যা হল যে অ্যান-বেঞ্চমার্কগুলি একবারে শুধুমাত্র এক ধরণের অপারেশন করে: প্রথমে, এটি সূচক তৈরি করে, তারপরে এটি জিজ্ঞাসা করে। অনুসন্ধানের সাথে সংযুক্ত আপডেটগুলির সাথে মোকাবিলা করা ঐচ্ছিক - এবং সম্ভবত একটি প্রতিবন্ধকতাও; আপনি যদি জানেন যে আপনাকে আপডেটের সাথে মোকাবিলা করতে হবে না, আপনি অনেক সরলীকরণ অনুমান করতে পারেন যা কৃত্রিম মানদণ্ডে ভাল দেখায়।
আপনি যদি আপনার সূচকের সাথে একাধিক সমসাময়িক ক্রিয়াকলাপ করতে সক্ষম হন বা এটি তৈরি হওয়ার পরে এটি আপডেট করতে সক্ষম হন তবে এটি কীভাবে কাজ করে এবং কী ট্রেডঅফ জড়িত তা বোঝার জন্য আপনাকে আরও গভীরভাবে দেখতে হবে।
প্রথমত, সমস্ত সাধারণ-উদ্দেশ্য ভেক্টর ডাটাবেস যা আমি গ্রাফ-ভিত্তিক সূচী ব্যবহার সম্পর্কে জানি। কারণ প্রথম ভেক্টর সন্নিবেশিত হওয়ার সাথে সাথে আপনি একটি গ্রাফ সূচক অনুসন্ধান শুরু করতে পারেন। বেশিরভাগ অন্যান্য বিকল্পের জন্য আপনাকে অনুসন্ধান করার আগে সম্পূর্ণ সূচক তৈরি করতে হবে বা অন্তত কিছু পরিসংখ্যানগত বৈশিষ্ট্যগুলি শিখতে ডেটার একটি প্রাথমিক স্ক্যান করতে হবে।
যাইহোক, গ্রাফ সূচক বিভাগের মধ্যেও এখনও গুরুত্বপূর্ণ বাস্তবায়ন বিবরণ রয়েছে। উদাহরণস্বরূপ, আমরা প্রথমে ভেবেছিলাম যে আমরা লুসিনের HNSW সূচক বাস্তবায়ন ব্যবহার করে সময় বাঁচাতে পারি, যেভাবে MongoDB ইলাস্টিক এবং সোলার করে। কিন্তু আমরা দ্রুত শিখেছি যে লুসিন শুধুমাত্র একক-থ্রেডেড, অ-সমসাময়িক সূচক নির্মাণের প্রস্তাব দেয়। অর্থাত্, আপনি এটি তৈরি করা হওয়ার কারণে এটিকে জিজ্ঞাসা করতে পারবেন না (যা এই ডেটা কাঠামোটি ব্যবহার করার প্রাথমিক কারণগুলির মধ্যে একটি হওয়া উচিত!) বা একাধিক থ্রেডকে একই সাথে এটি তৈরি করার অনুমতি দিতে পারে না।
এইচএনএসডব্লিউ পেপার পরামর্শ দেয় যে একটি সূক্ষ্ম-দানাযুক্ত লকিং পদ্ধতি কাজ করতে পারে, তবে আমরা আরও ভাল হয়েছি এবং একটি নন-ব্লকিং সূচক তৈরি করেছি। এটি ওপেন সোর্স ইন
JVector অন্তত 32টি থ্রেডে রৈখিকভাবে সমবর্তী আপডেটগুলিকে স্কেল করে। এই গ্রাফটি x এবং y উভয় অক্ষে লগ-স্কেল করা হয়েছে, যা দেখায় যে থ্রেড গণনা দ্বিগুণ করা বিল্ড সময়কে অর্ধেক করে।
আরও গুরুত্বপূর্ণ, JVector-এর নন-ব্লকিং কনকারেন্সি আপডেটের সাথে অনুসন্ধানগুলিকে মিশ্রিত করে আরও বাস্তবসম্মত কাজের চাপকে উপকৃত করে। এখানে Astra DB-এর পারফরম্যান্সের (JVector ব্যবহার করে) বিভিন্ন ডেটাসেটের সাথে Pinecone-এর তুলনা করা হয়েছে। যদিও Astra DB একটি স্ট্যাটিক ডেটাসেটের জন্য Pinecone থেকে প্রায় 10% দ্রুত, এটি নতুন ডেটা ইন্ডেক্স করার সময় 8x থেকে 15x দ্রুত। আমরা উচ্চতর থ্রুপুট এবং কম লেটেন্সির জন্য তাদের সুপারিশের ভিত্তিতে পাইনেকোন (পড টাইপ: p2 এবং পড সাইজ: x8, প্রতি প্রতিলিপি 2 পড সহ) সহ সেরা উপলব্ধ পড টিয়ার বেছে নিয়েছি। পাইনকোন প্রকাশ করে না যে এটি কোন ভৌত সম্পদের সাথে সঙ্গতিপূর্ণ। Astra DB এর দিকে, আমরা ডিফল্ট PAYG স্থাপনার মডেলটি বেছে নিয়েছি এবং এটি সার্ভারহীন হওয়ায় সংস্থানগুলি বেছে নেওয়ার বিষয়ে চিন্তা করতে হবে না। ব্যবহার করে পরীক্ষা করা হয়েছিল
উচ্চতর স্মরণ এবং নির্ভুলতা বজায় রাখার সময় Astra DB এটি করে (
আমরা দিয়ে শুরু
একটি এইচএনএসডব্লিউ সূচক হল স্তরগুলির একটি সিরিজ, যেখানে বেস স্তরের উপরে প্রতিটি স্তর পূর্বের তুলনায় প্রায় 10% বেশি নোড। এটি উপরের স্তরগুলিকে এড়িয়ে যাওয়ার তালিকা হিসাবে কাজ করতে সক্ষম করে, যাতে সমস্ত ভেক্টর রয়েছে নীচের স্তরের ডান পাশের দিকে অনুসন্ধানকে শূন্য করতে দেয়।
যাইহোক, এই ডিজাইনের অর্থ হল (সমস্ত গ্রাফ সূচকের সাথে সাধারণ) আপনি "ডিস্ক ক্যাশে আমাদের বাঁচাবে" বলার থেকে দূরে থাকতে পারবেন না কারণ, সাধারণ ডাটাবেস কোয়েরি ওয়ার্কলোডের বিপরীতে, গ্রাফের প্রতিটি ভেক্টরের প্রায় সমান সুযোগ রয়েছে একটি অনুসন্ধানের সাথে প্রাসঙ্গিক হচ্ছে (ব্যতিক্রম উপরের স্তর, যা আমরা ক্যাশে করতে পারি এবং করতে পারি।)
উইকিপিডিয়া নিবন্ধের অংশগুলির (ডিস্কে প্রায় 120 জিবি) একটি 100M ভেক্টর ডেটাসেট পরিবেশন করার প্রোফাইলটি আমার ডেস্কটপে 64GB RAM সহ দেখতে কেমন ছিল, যখন আমরা লুসিন ব্যবহার করছিলাম:
ক্যাসান্ড্রা ডিস্কের বাইরে ভেক্টর পড়ার অপেক্ষায় তার প্রায় সমস্ত সময় ব্যয় করছে।
এই সমস্যাটি সমাধান করার জন্য, আমরা DiskANN নামে একটি আরও উন্নত অ্যালগরিদম প্রয়োগ করেছি এবং এটিকে একটি স্বতন্ত্র এমবেডেড ভেক্টর সার্চ ইঞ্জিন হিসাবে ওপেন সোর্স করেছি,
এখানে HNSW বনাম DiskANN ক্লায়েন্ট/সার্ভারের কোনো উপাদান ছাড়াই বিশুদ্ধভাবে এম্বেড করা দৃশ্যের মতো দেখায়। এটি Lucene (HNSW) এবং JVector (DiskANN) এর অধীনে Deep100M ডেটাসেট অনুসন্ধানের গতি পরিমাপ করে। সূচক এবং কাঁচা ভেক্টর সহ লুসিন সূচক 55GB। JVector সূচক হল 64GB। অনুসন্ধানটি আমার 24GB MacBook-এ সঞ্চালিত হয়েছিল, যার প্রায় এক-তৃতীয়াংশ মেমরি রয়েছে যতটা RAM-তে সূচক ধরে রাখতে লাগবে।
ডাটাবেস সিস্টেমের প্রেক্ষাপটে কম্পোজেবিলিটি বলতে বোঝায় সুসংহতভাবে বিভিন্ন বৈশিষ্ট্য এবং ক্ষমতাকে নিরবিচ্ছিন্নভাবে একীভূত করার ক্ষমতা। ভেক্টর অনুসন্ধানের মতো নতুন ক্যাটাগরির ক্ষমতার একীকরণ নিয়ে আলোচনা করার সময় এটি বিশেষভাবে তাৎপর্যপূর্ণ। অ-খেলনা অ্যাপ্লিকেশন সবসময় উভয় ক্লাসিক প্রয়োজন হবে
সহজ বিবেচনা করুন
আরও বাস্তবসম্মত ব্যবহারের ক্ষেত্রে, আমাদের একজন সমাধান প্রকৌশলী সম্প্রতি এশিয়ার একটি কোম্পানির সাথে কাজ করছিলেন যেটি তাদের পণ্যের ক্যাটালগে শব্দার্থিক অনুসন্ধান যোগ করতে চেয়েছিল, কিন্তু শব্দ-ভিত্তিক ম্যাচিং সক্ষম করতেও চেয়েছিল। উদাহরণ স্বরূপ, ব্যবহারকারী যদি [“লাল” বল ভালভ] অনুসন্ধান করে, তাহলে তারা সেই আইটেমগুলিতে অনুসন্ধান সীমাবদ্ধ করতে চায় যার বিবরণ “লাল” শব্দটির সাথে মেলে, ভেক্টর এমবেডিংগুলি শব্দার্থগতভাবে যতই একই রকম হোক না কেন। তারপরে মূল নতুন ক্যোয়ারীটি (সেশন ম্যানেজমেন্ট, অর্ডার ইতিহাস এবং শপিং কার্ট আপডেটের মতো ক্লাসিক কার্যকারিতার উপরে) এইভাবে: পণ্যগুলিকে সেগুলির মধ্যে সীমাবদ্ধ করুন যাতে সমস্ত উদ্ধৃত পদ রয়েছে, তারপর ব্যবহারকারীর অনুসন্ধানের সাথে সর্বাধিক মিল খুঁজে পান
এই দ্বিতীয় উদাহরণটি এটি স্পষ্ট করে যে শুধুমাত্র যে অ্যাপ্লিকেশনগুলির জন্য ক্লাসিক ক্যোয়ারী কার্যকারিতা এবং ভেক্টর অনুসন্ধান উভয়েরই প্রয়োজন তা নয়, তবে তাদের প্রায়শই একই ক্যোয়ারীতে প্রতিটির উপাদান ব্যবহার করতে সক্ষম হতে হবে।
এই তরুণ ক্ষেত্রের শিল্পের বর্তমান অবস্থা হল আমি যাকে "স্বাভাবিক" ডাটাবেসে ক্লাসিক কোয়েরি, ভেক্টর ডাটাবেসে ভেক্টর ক্যোয়ারী, এবং তারপর দুটিকে একটি অ্যাডহক ফ্যাশনে একসাথে সেলাই করার চেষ্টা করা। একই সময়ে প্রয়োজনীয়। এটি ত্রুটি-প্রবণ, ধীর এবং ব্যয়বহুল; এটির একমাত্র গুণ হল যে আপনি এটিকে কার্যকর করতে পারবেন যতক্ষণ না আপনার কাছে একটি ভাল সমাধান রয়েছে।
Astra DB-তে, আমরা ক্যাসান্দ্রা SAI-এর উপরে সেই আরও ভাল সমাধান তৈরি করেছি (এবং ওপেন-সোর্স)। যেহেতু SAI কাস্টম সূচকের প্রকারগুলি তৈরি করার অনুমতি দেয় যেগুলি সমস্তই ক্যাসান্ড্রা স্থিতিশীল এবং কমপ্যাকশন জীবন চক্রের সাথে আবদ্ধ, তাই Astra DB এর জন্য বিকাশকারীদের বুলিয়ান পূর্বাভাস, শব্দ-ভিত্তিক অনুসন্ধান এবং ভেক্টর অনুসন্ধানকে মিশ্রিত করতে এবং মেলাতে অনুমতি দেওয়া সহজ। পৃথক সিস্টেম পরিচালনা এবং সিঙ্ক্রোনাইজ করা। এটি ডেভেলপারদের তৈরি করে জেনারেটিভ AI অ্যাপ্লিকেশনগুলিকে আরও পরিশীলিত ক্যোয়ারী ক্ষমতা দেয় যা আরও বেশি উত্পাদনশীলতা এবং দ্রুত সময়ে বাজারে নিয়ে যায়।
ভেক্টর সার্চ ইঞ্জিনগুলি স্কেল-আউট, আবর্জনা সংগ্রহ, সঙ্গতি, ডিস্কের কার্যকর ব্যবহার এবং সংমিশ্রণযোগ্যতা সহ একাধিক স্থাপত্য চ্যালেঞ্জ সহ একটি গুরুত্বপূর্ণ নতুন ডাটাবেস বৈশিষ্ট্য। আমি বিশ্বাস করি যে Astra DB-এর জন্য ভেক্টর অনুসন্ধান তৈরিতে আমরা জেনারেটিভ AI অ্যাপ্লিকেশনগুলির বিকাশকারীদের জন্য একটি সেরা-ইন-ক্লাস অভিজ্ঞতা প্রদানের জন্য ক্যাসান্ড্রার ক্ষমতাগুলিকে কাজে লাগাতে সক্ষম হয়েছি।
- জোনাথন এলিস, ডেটাস্ট্যাক্স দ্বারা
এছাড়াও এখানে প্রকাশিত.
লিড ইমেজ উৎস .