লাভ:
- বুঝুন যে এমবেডিং টেক্সটটিকে শব্দার্থগত স্থানের ভেক্টরে পরিণত করে এবং অনুরূপ অর্থ হল ঘনিষ্ঠ ভেক্টর
- কোসাইন এবং ডট সাদৃশ্য মেট্রিক্সের সাথে ANN অনুসন্ধান কীভাবে কাজ করে তা ব্যাখ্যা করা
- খরচ, স্কেল এবং মেটাডেটা ফিল্টারিংয়ের প্রয়োজনের ভিত্তিতে সাধারণ ভেক্টর ডাটাবেস নির্বাচন করা
RAG-এর কেন্দ্রস্থলে একটি একক প্রশ্ন: "কোন পাঠ্যাংশটি ব্যবহারকারীর প্রশ্নের সাথে সবচেয়ে বেশি মিল আছে?" কম্পিউটার সংখ্যা দিয়ে পাঠ্য প্রক্রিয়া করে, আক্ষরিক অর্থে নয়। সেজন্য আমাদের প্রথমে পাঠ্যটিকে সংখ্যায় রূপান্তর করতে হবে যা এর অর্থ বহন করে। এটিই এমবেডিং: একটি পাঠকে সংখ্যার ক্রম (ভেক্টর) তে রূপান্তর করার প্রক্রিয়া যা সেই পাঠ্যের অর্থকে উপস্থাপন করে। আপনি যখন এই ইউনিটটি শেষ করবেন, তখন আপনি জানতে পারবেন কিভাবে এম্বেডিং কাজ করে, কিভাবে সাদৃশ্য পরিমাপ করা হয় এবং কিভাবে সঠিক ভেক্টর ডাটাবেস নির্বাচন করতে হয়।
এম্বেডিং: স্থানাঙ্কে অর্থ অনুবাদ করা
একটি এমবেডিং মডেল (একটি বিশেষভাবে প্রশিক্ষিত কৃত্রিম বুদ্ধিমত্তা) আপনার দেওয়া পাঠ্যটিকে একটি ভেক্টরে রূপান্তর করে, উদাহরণস্বরূপ, 1024 সংখ্যা৷ এই ভেক্টরটিকে একটি বহুমাত্রিক স্থানের স্থানাঙ্ক হিসাবে ভাবুন। যাদুটি হল: অর্থে একই রকম পাঠ্যগুলি এই স্থানের কাছাকাছি স্থানাঙ্কের মধ্যে পড়ে৷
একটি সাধারণ উদাহরণ: "বার্ষিক ছুটি", "অবকাশ এনটাইটেলমেন্ট" এবং "বার্ষিক বেতনের ছুটি" বিভিন্ন শব্দ ব্যবহার করে কিন্তু একই জিনিস বোঝায় — তাদের ভেক্টর একে অপরের কাছাকাছি। "পে-রোল অ্যাকাউন্ট" একটি ভিন্ন বিষয় - এর ভেক্টর দূরবর্তী। তাই ব্যবহারকারী জিজ্ঞাসা করে "আমার কত দিনের ছুটি আছে?" যখন আপনি জিজ্ঞাসা করেন, আমরা এমন একটি নথিও খুঁজে পেতে পারি যাতে "ছুটি" শব্দটি নেই কিন্তু "বার্ষিক ছুটি 14 দিন"। ক্লাসিক কীওয়ার্ড সার্চ (শব্দের সাথে হুবহু মিলে যায় এমন অনুসন্ধান) এটি করতে পারে না।
টিপ: "অর্থের আঙুলের ছাপ" হিসাবে এম্বেড করার কথা ভাবুন। একই অর্থ সহ দুটি বাক্যের আঙ্গুলের ছাপ একই রকম দেখা যায়; শব্দ ভিন্ন হলেও।
একটি গুরুত্বপূর্ণ নিয়ম: প্রশ্ন এম্বেড করার সময় আপনি যে মডেলটি ব্যবহার করেন সেটি একই মডেল হওয়া উচিত যা আপনি ডকুমেন্ট এম্বেড করার সময় ব্যবহার করেন। বিভিন্ন মডেল বিভিন্ন স্পেস উত্পাদন; স্থানাঙ্ক অতুলনীয় হয়ে ওঠে।
কিভাবে সাদৃশ্য পরিমাপ?
দুটি ভেক্টর কতটা একই রকম তা পরিমাপ করার জন্য বিভিন্ন পদ্ধতি রয়েছে। সবচেয়ে সাধারণ হল কোসাইন সাদৃশ্য: এটি দুটি ভেক্টরের মধ্যে কোণ পরিমাপ করে। কোণ ছোট হলে (ভেক্টর একই দিকে নির্দেশ করে), সাদৃশ্য বেশি। মান −1 এবং 1 এর মধ্যে; 1 এর কাছাকাছি = খুব অনুরূপ।
মানদণ্ড
এটা কি পরিমাপ করে?
কখন এটি পছন্দ করা হয়?
কোসাইন
ভেক্টরের মধ্যে কোণ (দিক)
সবচেয়ে সাধারণ; টেক্সট শব্দার্থিক মিল ডিফল্ট
ডট পণ্য
দিকনির্দেশ + মাত্রা একসাথে
যদি ভেক্টরগুলি স্বাভাবিক করা হয় তবে এটি কোসাইন হিসাবে একই ফলাফল দেয়; দ্রুত
ইউক্লিডীয় (ইউক্লিডীয় দূরত্ব)
স্থানাঙ্কের মধ্যে সোজা দূরত্ব
কিছু ক্লাস্টারিং পরিস্থিতিতে; পাঠ্যে কম ব্যবহৃত হয়
অনুশীলনে, বেশিরভাগ এমবেডিং মডেল স্বাভাবিক ভেক্টর তৈরি করে (আকার সেট 1); এই ক্ষেত্রে, কোসাইন এবং ডট পণ্য একই আদেশ দেয়। সিদ্ধান্ত পক্ষাঘাতগ্রস্ত হবেন না: কোসাইন দিয়ে শুরু করুন।
লক্ষ লক্ষ ভেক্টরের মধ্যে, একে একে একে একে তুলনা করা ধীর। এজন্য ভেক্টর ডেটাবেস ANN (আনুমানিক নিকটতম প্রতিবেশী) অ্যালগরিদম ব্যবহার করে। ANN খুব দ্রুত "সঠিক নিকটতম" এর পরিবর্তে "প্রায় সঠিক নিকটতম" খুঁজে পায়। উদাহরণস্বরূপ, HNSW নামক পদ্ধতিটি 10 মিলিয়ন ভেক্টরের জন্যও কয়েক মিলিসেকেন্ডে ফলাফল দিতে পারে। নির্ভুলতার একটি ছোট বলিদানের জন্য আপনি দুর্দান্ত গতি অর্জন করেন।
ভেক্টর ডাটাবেস কি করে?
একটি ভেক্টর ডাটাবেস একবারে তিনটি কাজ করে: (1) ভেক্টর সঞ্চয় করে, (2) দ্রুত একটি ক্যোয়ারী ভেক্টরের মতো ভেক্টর খুঁজে পায়, (3) প্রতিটি ভেক্টরের পাশে মেটাডেটা দ্বারা ফিল্টার করে। মেটাডেটা হল সেই ট্যাগগুলি যা আপনি সেই অংশে সংযুক্ত করেন: উত্স ফাইল, তারিখ, বিভাগ, গোপনীয়তা স্তর, ইত্যাদি। মেটাডেটা ফিল্টারিং এন্টারপ্রাইজ RAG-তে গুরুত্বপূর্ণ; কারণ আপনাকে "শুধুমাত্র অর্থ বিভাগের 2025 নথিতে অনুসন্ধান করুন" এর মতো সীমাবদ্ধতা সেট করতে সক্ষম হতে হবে।
# ভেক্টর ডাটাবেসে নিবন্ধন করুন (ধারণাগত)vektor_db.add( id="izin-politikasi-parca-3", vektor=embed("বার্ষিক প্রদেয় ছুটি 14 দিন..."), text="বার্ষিক বেতনের ছুটি 14 দিন...", মেটাডেটা={"সোর্স": "ik_el_kitabi", "Kipate:"", "partabi"। "2025-06", "গোপনীয়তা": "ic"})
# মেটাডেটা ফিল্টার করা অনুসন্ধান (ধারণাগত) ফলাফল = vektor_db.search( vektor=embed("আমার কত দিন ছুটি আছে?"), top_k=4, ফিল্টার={"বিভাগ": "HR", "গোপনীয়তা": ["অভ্যন্তরীণ", "চালু"]})
সঠিক ডাটাবেস নির্বাচন করা
যানবাহন
বৈশিষ্ট্যযুক্ত দিক
উপযুক্ত পরিস্থিতি
অন্তর্নির্মিত / ফাইল-ভিত্তিক (এমবেডেড লাইব্রেরি)
কোন ইনস্টলেশন, একক মেশিন
প্রোটোটাইপ, ছোট কিট (< কয়েক লক্ষ অংশ)
পরিচালিত ক্লাউড পরিষেবা
স্কেলিং এবং রক্ষণাবেক্ষণ আপনার দায়িত্ব নয়
উৎপাদন, দ্রুত বর্ধনশীল তথ্য, ছোট দল
আপনার নিজের সার্ভারে ওপেন সোর্স
সম্পূর্ণ নিয়ন্ত্রণ, আপনার ডেটা আপনারই থাকে
গোপনীয়তার বাধ্যবাধকতা, বিদ্যমান পরিকাঠামো
বিদ্যমান ডাটাবেসে সংযোজন
আপনি পৃথক সিস্টেম পরিচালনা করবেন না
আপনি ইতিমধ্যেই যে ডিবি ব্যবহার করছেন তাতে ভেক্টর সমর্থন যোগ করা হচ্ছে
নির্বাচন করার সময় জিজ্ঞাসা করুন: কত টুকরা থাকবে? মেটাডেটা ফিল্টারিং কতটা গুরুত্বপূর্ণ? ডেটা কি কোম্পানির বাইরে যেতে পারে (গোপনীয়তা)? দল কি পরিকাঠামো পরিচালনা করতে পারে? ছোট থেকে শুরু করা এবং প্রয়োজন অনুসারে প্রসারিত করা প্রায়শই বুদ্ধিমানের কাজ।
দুর্বল দৃষ্টিভঙ্গি / শক্তিশালী দৃষ্টিভঙ্গি
দুর্বল (প্লেন এম্বেডিং সংরক্ষণ করা, কোনো মেটাডেটা নেই):
শুধু পাঠ্য এবং ভেক্টর সংরক্ষণ করুন। অনুসন্ধান করুন: 4টি সবচেয়ে অনুরূপ ভেক্টর ফেরত দিন। # সমস্যা: "শুধু বর্তমান এইচআর ডক্স" এর মতো ফিল্টার করা যাবে না; # পুরানো/অননুমোদিত অংশগুলিও প্রতিক্রিয়াতে অন্তর্ভুক্ত করা যেতে পারে।
শক্তিশালী (সমৃদ্ধ মেটাডেটা + ফিল্টার করা অনুসন্ধান):
প্রতিটি অংশে উত্স, তারিখ, বিভাগ এবং গোপনীয়তা ট্যাগ যোগ করুন। অনুসন্ধানের সময় ব্যবহারকারীর কর্তৃত্ব এবং বর্তমানতা অনুযায়ী ফিল্টার করুন: filter = {"privacy": user_authority, "date_date": "2024-01"}# সুতরাং, ফলাফলটি নিরাপদ এবং আপ-টু-ডেট উভয়ই।
তিনটি মিনি কেস
কেস 1 - ভুল মডেল মিশ্রণ। একটি দল মডেল A এর সাথে নথি এবং মডেল B এর সাথে প্রশ্নগুলি এম্বেড করেছে৷ অনুসন্ধানগুলি অর্থহীন ফলাফল ফিরিয়ে দিয়েছে, এবং সঠিক উত্তরের হার 31% এ রয়ে গেছে৷ যখন আমি একটি একক মডেলে স্যুইচ করি (উভয় একই এমবেডিং মডেল), হার লাফিয়ে 88% এ পৌঁছেছে। পাঠ: প্রশ্ন এবং নথি একই স্থানে থাকা উচিত।
কেস 2 - মেটাডেটা ছাড়া গোপনীয়তার ঝুঁকি। একটি স্বাস্থ্যসেবা সংস্থায়, সমস্ত বিভাগের নথি মেটাডেটা ছাড়াই একটি একক পুলে ফেলে দেওয়া হয়েছিল। যখন একজন বিক্রয় সহযোগী একটি প্রশ্ন জিজ্ঞাসা করে, সিস্টেমটি রোগীর ডেটার একটি অংশকে প্রাসঙ্গিক করে তোলে। যখন মেটাডেটা + ফিল্টার যোগ করা হয়েছিল (অনুমোদন স্তর অনুযায়ী), এই ঝুঁকি দূর করা হয়েছিল; পুনরুদ্ধারের সময়, 12টি অননুমোদিত টুকরা আনা হয় না।
কেস 3 - স্কেল বটলনেক। একটি ই-কমার্স কোম্পানি একটি সহজ "স্ক্যান অল" পদ্ধতিতে 8 মিলিয়ন পণ্যের বিবরণ অনুসন্ধান করেছে; প্রতিটি প্রশ্নে 6 সেকেন্ড সময় লেগেছে। যখন আমরা HNSW-ভিত্তিক ANN-এ স্যুইচ করি, সময় 45 মিলিসেকেন্ডে কমে যায়, শুধুমাত্র 1% নির্ভুলতা হ্রাস পায়। পাঠ: ANN বড় সেটে বাধ্যতামূলক।
সাধারণ ভুল
- বিভিন্ন মডেলের সাথে প্রশ্ন এবং নথি এমবেড করা: ফলাফল অর্থহীন; সর্বদা একটি মডেল।
- মেটাডেটা এড়িয়ে যাওয়া: আপনি ফিল্টার করতে পারবেন না; আপনি গোপনীয়তা এবং আপ টু ডেটনেসের নিয়ন্ত্রণ হারাবেন।
- এনক্রিপশনের জন্য এমবেডিং ভুল করা: এম্বেডিং বিপরীত তথ্য বহন করে; এটা অনুমান করা ভুল যে সংবেদনশীল তথ্য "লুকানো"।
- একটি ছোট সেটে অপ্রয়োজনীয়ভাবে বড় পরিকাঠামো তৈরি করা: 5,000 অংশের জন্য পরিচালিত একটি বিশাল ক্লাস্টার অপ্রয়োজনীয় জটিলতা।
- মিলের মাপকাঠি নিয়ে খুব বেশি চিন্তা করবেন না: পাঠ্যে কোসাইন দিয়ে শুরু করুন; ফাইন টিউনিং পরে আসে।
সতর্কতা: এম্বেডিং সংখ্যায় পাঠ্যের অর্থ এম্বেড করে, কিন্তু বিষয়বস্তুকে "ধ্বংস" করে না। যদি একটি ভেক্টর ডাটাবেস ফাঁস হয়, তবে মূল সংরক্ষিত পাঠ্যগুলি (বেশিরভাগ ইনস্টলেশনে পাঠ্যটিও সংরক্ষণ করা হয়) এছাড়াও আপস করা হয়। ভেক্টর ভান্ডারকে এর মধ্যে থাকা নথির মতোই গোপনীয় রাখুন।
সংক্ষেপে
- এম্বেড করা পাঠ্যকে সংখ্যার ভেক্টরে পরিণত করে যা এর অর্থ বহন করে; অনুরূপ অর্থ হল ঘনিষ্ঠ ভেক্টর।
- সাদৃশ্য প্রায়ই কোসাইন দ্বারা পরিমাপ করা হয়; স্বাভাবিক ভেক্টরের জন্য, ডট পণ্য একই ফলাফল দেয়।
- বড় ডেটাতে, ANN (যেমন, HNSW) সঠিক অনুসন্ধান প্রতিস্থাপন করে: নির্ভুলতার সামান্য আত্মত্যাগের সাথে দুর্দান্ত গতি।
- ভেক্টর ডাটাবেস ভেক্টর স্টোরেজ + সাদৃশ্য অনুসন্ধান + মেটাডেটা ফিল্টারিং সম্পাদন করে; এন্টারপ্রাইজ RAG-এর জন্য মেটাডেটা অপরিহার্য।
- প্রশ্ন এবং নথি একই এমবেডিং মডেলের সাথে অনুবাদ করা আবশ্যক; অন্যথায় স্থানাঙ্ক তুলনা করা যাবে না।
আবেদন টাস্ক
পূর্ববর্তী ইউনিটে আপনার নির্বাচিত নথি থেকে 10টি ছোট প্যাসেজ (3-6 বাক্য প্রতিটি) বের করুন। (1) প্রতিটি অংশের জন্য কমপক্ষে তিনটি মেটাডেটা ট্যাগ ডিজাইন করুন (উৎস, তারিখ, এবং আপনার ব্যবসার প্রেক্ষাপটের জন্য একটি তৃতীয় উপযুক্ত: বিভাগ, পণ্য, গোপনীয়তা, ইত্যাদি)। (2) 3টি ভিন্ন ব্যবহারকারীর প্রশ্নের জন্য কোন মেটাডেটা ফিল্টার প্রয়োগ করা উচিত তা লিখুন। (3) 3টি প্রশ্ন-অংশ জোড়া খুঁজুন যা বিভিন্ন শব্দে একই অর্থ প্রকাশ করে (যেমন "অবকাশ এনটাইটেলমেন্ট" ↔ "বার্ষিক ছুটি") এবং একটি বাক্যে ব্যাখ্যা করুন কেন তারা কীওয়ার্ড অনুসন্ধানের সাথে মিলবে না কিন্তু এমবেডিংয়ের সাথে মিলবে।
চেকলিস্ট
- [ ] আমি বলতে পারি যে এমবেডিং টেক্সটটিকে শব্দার্থগত স্থানের ভেক্টরে পরিণত করে এবং অনুরূপ অর্থ কাছাকাছি।
- আমি জানি যে [ ] কোসাইন সাদৃশ্য কোণ পরিমাপ করে এবং পাঠ্যে ডিফল্ট পছন্দ।
- [ ] আমি ব্যাখ্যা করতে পারি কেন ANN বড় ডেটাতে প্রয়োজনীয়।
- [ ] আমি জানি কেন মেটাডেটা গোপনীয়তা এবং সতেজতা নিয়ন্ত্রণের জন্য গুরুত্বপূর্ণ৷
- [ ] আমি একই এমবেডিং মডেল সহ প্রশ্ন এবং নথি অনুবাদ করার নিয়ম অনুসরণ করি।