মূল বিষয়বস্তুতে যান

CooLWJ-এ খুঁজুন

选择搜索范围,输入关键词后按回车。

ভাষা

ভেক্টর ডেটাবেস কী?

এক、বৃহৎ মডেলভিত্তিক কাজের সম্পূর্ণ প্রক্রিয়া

1.png

  1. AI ক্লাস্টার নির্মাণ: গণনা, যোগাযোগ ও স্টোরেজ অবকাঠামো নির্মাণ

  2. বৃহৎ মডেলের ডেটা: বৃহৎ মডেলের ডেটাসেট, ডেটা প্রক্রিয়াকরণ, ভেক্টর ডেটাবেস

  3. বৃহৎ মডেলের অ্যালগরিদম:প্রচলিত NLP থেকে প্রাক্‌প্রশিক্ষিত বৃহৎ LLM মডেল পর্যন্ত

  4. বৃহৎ মডেলের প্রশিক্ষণ:প্রচলিত অ্যালগরিদমিক পদ্ধতি ও স্থিতিশীলতার বিশ্লেষণ

  5. বিতরণকৃত সমান্তরাল প্রক্রিয়াকরণ:মডেল সমান্তরালতা, তথ্য সমান্তরালতা, অপ্টিমাইজার সমান্তরালতা ইত্যাদি

  6. বৃহৎ মডেলের ফাইন-টিউনিং:সমস্ত প্যারামিটারের ফাইন-টিউনিং, অল্প প্যারামিটারের ফাইন-টিউনিং, নির্দেশনাভিত্তিক ফাইন-টিউনিং অ্যালগরিদম

  7. বৃহৎ মডেলের ইনফারেন্স:কোয়ান্টাইজেশনের মাধ্যমে সংকোচন, দীর্ঘ সিকোয়েন্সে সম্প্রসারিত ইনফারেন্স, ক্যাশ পদ্ধতি

  8. বৃহৎ মডেলের মূল্যায়ন:NLP-র ডাউনস্ট্রিম কাজ、CV-র ডাউনস্ট্রিম কাজ、মূল্যায়ন পরিকল্পনা

  9. বৃহৎ মডেলের বুদ্ধিমান এজেন্ট:RLHF প্রক্রিয়া, এজেন্ট, আজীবন শেখা

দুই、ভেক্টর

কুকুর সম্পর্কে পরিচিত ব্যক্তিরা দ্রুত তাদের জাত আলাদা করতে পারেন,আমরা এটি করতে পারি কারণ বিভিন্ন দিক থেকে তাদের বৈশিষ্ট্য পর্যবেক্ষণ করি,যেমন দেহের আকার।
2.pngআমরা যদি একটি স্থানাঙ্ক অক্ষ দিয়ে এদের আকারের বৈশিষ্ট্য প্রকাশ করি, তাহলে এই কুকুরগুলি ভিন্ন ভিন্ন স্থানাঙ্কে অবস্থান করবে। তবে শুধু দৈহিক আকারের এই একটি বৈশিষ্ট্যের ওপর নির্ভর করা যথেষ্ট নয়, কারণ কয়েকটির আকার খুবই কাছাকাছি।
3.pngএরপর আমরা তার বৈশিষ্ট্য দেখি, যেমন লোমের দৈর্ঘ্য, এবং আরও একটি স্থানাঙ্ক অক্ষ তৈরি করি, এভাবে একই আকারের কিছু কুকুরকেও আলাদা করা যায়
4.pngতবু কিছু অংশে মিল থেকে যায়,তাই আরও নানা দিক থেকে পর্যবেক্ষণ করতে হবে,যেমন নাকের দৈর্ঘ্য।
5.pngআমরা আরও মাত্রা যোগ করতে পারি, যেমন চোখের আকার। আমরা চার মাত্রার স্থানে চিত্র আঁকতে পারি না, কিন্তু স্থানাঙ্কের সংখ্যামানে তা করা সত্যিই খুব সহজ, শুধু পেছনে আরও মান যোগ করে গেলেই হয়।
6.pngআমরা আরও নানা দৃষ্টিকোণ বা মাত্রা থেকে একটি কুকুরের বৈশিষ্ট্য দেখতে পারি, যেমন পায়ের পুরুত্ব, লোমের কোঁকড়ানো ভাব, এমনকি আনুগত্য, কাজের উপযোগিতা ইত্যাদি বিমূর্ত দিক থেকেও। আমরা যত বেশি মাত্রা ব্যবহার করব, কুকুরগুলোর মধ্যে পার্থক্য করার ক্ষমতা তত বাড়বে। একই সঙ্গে স্থানাঙ্কবিন্দু যে স্থানে রয়েছে তার মাত্রাও তত বেশি হবে।
7.pngশুধু কুকুর নয়, আসলে প্রায় যেকোনো কিছুকেই এভাবে প্রকাশ করা যায়। তা মূর্ত কিছু হতে পারে, আবার আনন্দ, রাগ, দুঃখ, সুখ কিংবা বিচ্ছেদ ও মিলনের মতো বিমূর্ত বিষয়ও হতে পারে। বিভিন্ন বস্তুর বিভিন্ন বৈশিষ্ট্যমাত্রায় ভিন্ন প্রকাশ বা ভিন্ন মান থাকে, তাই শেষ পর্যন্ত প্রতিটিই উচ্চমাত্রিক বৈশিষ্ট্যস্থানে একটি স্থানাঙ্কবিন্দুর সঙ্গে মিলে যায়। তবে এই বৃহত্তর পরিসরে বস্তুগুলিকে ভালোভাবে আলাদা করতে আমাদের হয়তো আরও বেশি বৈশিষ্ট্যমাত্রা লাগবে। কয়েকশো বা কয়েক হাজার, এমনকি দশ হাজারেরও বেশি হতে পারে।
8.pngতবে আমরা তিন মাত্রার বেশি মাত্রার চিত্র আঁকতে পারি না বলে,দ্বিমাত্রিক স্থানাঙ্ক দিয়ে ব্যাখ্যা করছি।
9.pngআমরা দেখব, ধারণাগতভাবে বেশি কাছাকাছি বিন্দুগুলো স্থানে আরও গুচ্ছবদ্ধ হবে, আর ধারণাগতভাবে একেবারে আলাদা বিন্দুগুলো অনেক দূরে থাকবে। আরও এক ধাপ এগিয়ে, স্থানাঙ্কের মূলবিন্দুকে শুরুর বিন্দু আর এই স্থানাঙ্কবিন্দুগুলোকে শেষ বিন্দু ধরা হলে। এগুলোই দিক ও মানসম্পন্ন ভেক্টর।

ছবিকে ভেক্টরে রূপান্তর করলে, সদৃশ ভেক্টর খুঁজে ছবির সাহায্যে ছবি খোঁজার সুবিধা বাস্তবায়ন করা যায়
ভিডিওকে ভেক্টরে রূপান্তর করলে, অনুরূপ ভেক্টর খুঁজে একই ধরনের ভিডিও সুপারিশ করা যায়
পণ্যগুলোকে ভেক্টরে রূপান্তর করলে, অনুরূপ ভেক্টর অনুসন্ধানের মাধ্যমে ব্যবহারকারীর বর্তমানে দেখা পণ্যের ভিত্তিতে সংশ্লিষ্ট পণ্যের সুপারিশ করা যায়
লেখাকে ভেক্টরে রূপান্তর করলে, একটি বুদ্ধিমান প্রশ্নোত্তর ব্যবস্থায় ব্যবহারকারীর বর্তমান প্রশ্নের ভিত্তিতে আগে সমাধান করা হয়েছে এমন কিছু অনুরূপ প্রশ্ন খুঁজে পাওয়া যায়, যা তথ্যসূত্র হিসেবে কাজে লাগে

তিন、ভেক্টর ডেটাবেস

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

ত্রিমাত্রিক স্থানে ভেক্টর ডেটা বিন্দুর চিত্র

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

ভেক্টর ডেটার একটি প্রধান প্রয়োগ হলো:একটি অনুসন্ধান ভেক্টর দেওয়া হলে অসংখ্য ভেক্টরের মধ্য থেকে তার সঙ্গে সবচেয়ে বেশি সাদৃশ্যপূর্ণ কয়েকটি ভেক্টর খুঁজে বের করা। এটিই তথাকথিত নিকটতম প্রতিবেশী সমস্যা, আর এটি বাস্তবায়নের পদ্ধতিকে নিকটতম প্রতিবেশী অ্যালগরিদম বলা হয়; সবচেয়ে সহজে মাথায় আসা পদ্ধতি সম্ভবত সরাসরি সবগুলোতে অনুসন্ধান করা, অর্থাৎ প্রতিটি ভেক্টরের সঙ্গে অনুসন্ধান ভেক্টরের সাদৃশ্য একে একে তুলনা করে সর্বাধিক সাদৃশ্যযুক্ত কয়েকটি বেছে নেওয়া; দুটি ভেক্টরের সাদৃশ্য তুলনা করার নির্দিষ্ট পদ্ধতিও অনেক রয়েছে,ইউক্লিডীয় দূরত্ব ও কোসাইন সাদৃশ্য।
10.png

  • ইউক্লিডীয় দূরত্ব বলতে দুটি ভেক্টরের মধ্যকার সরলরৈখিক দূরত্ব গণনা বোঝায়। দ্বিমাত্রিক স্থানাঙ্ক ব্যবস্থায় p ও q নামে দুটি ভেক্টর থাকলে, ইউক্লিডীয় দূরত্ব হলো p থেকে q-কে যুক্ত করা সরলরেখার দৈর্ঘ্য। ত্রিমাত্রিক স্থানাঙ্ক ব্যবস্থায় প্রতিটি ভেক্টরে x, y, z তিনটি স্থানাঙ্ক থাকে, সূত্র ব্যবহার করে যেকোনো দুটি বিন্দুর দূরত্ব গণনা করা হয়। আর n-মাত্রিক স্থানাঙ্ক ব্যবস্থায় 100টি স্থানাঙ্ক থাকে, সূত্র অনুযায়ী যেকোনো দুটি বিন্দুর দূরত্ব গণনা করা হয়। দূরত্ব যত কম, ততই বোঝায় যে কিছু মাত্রায় এই দুটি ভেক্টরের সাদৃশ্য বেশি
    11.png

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

2、ভেক্টর ইনডেক্স

আগে ভেক্টর ডেটাবেসে অনুসন্ধানের নীতি ব্যাখ্যা করা হয়েছে। কিন্তু বাস্তবে ভেক্টর ডেটাবেসে সাদৃশ্য মেলানোর সময় পুরোপুরি সূত্র অনুযায়ী হিসাব করা যায় না, কারণ সাধারণত সেখানে তথ্যের পরিমাণ বিশাল এবং মাত্রাও অনেক বেশি। সূত্র ব্যবহার করে দুটি 1000-মাত্রিক ভেক্টরের সাদৃশ্য হিসাব করতে বেশ বড় গণনার প্রয়োজন হয় এবং CPU-র ওপর নিবিড় গণনার চাহিদাও খুব বেশি থাকে। তাহলে যদি দশ কোটি ভেক্টর থাকে এবং প্রতিটির জন্য হিসাব করতে হয়, সময় ও গণনার খরচ আরও বেড়ে যাবে। তাই এখানে আমরা ভেক্টর ইনডেক্স নামে একটি ধারণা নিয়ে আসছি।
ভেক্টর ইনডেক্স রিলেশনাল ডেটাবেসের ইনডেক্সের অনুরূপ,তবে একটি পার্থক্য রয়েছে。ভেক্টর ডেটাবেসে,ভেক্টর ইনডেক্স দিয়ে পাওয়া ফলাফল আনুমানিক,100% নির্ভুল ফলাফল নয়。ভেক্টর সূচক সাদৃশ্যের মাত্রা কতটা বেশি বা কম তা বর্ণনা করে। তাই আমরা একে আনুমানিক নিকটতম প্রতিবেশী অনুসন্ধান(ANS)বলি। ভেক্টর সূচি না থাকলে, কোনো ভেক্টরের সাদৃশ্য অনুসন্ধান করা রিলেশনাল ডেটাবেসে পুরো টেবিল অনুসন্ধানের মতো। তবে পুরো টেবিল অনুসন্ধানের ওপর আরও এক স্তরের গণনা করতে হয়, ফলে এর খরচ রিলেশনাল ডেটাবেসে পুরো টেবিল অনুসন্ধানের চেয়ে অনেক বেশি।
বাস্তবায়নের পদ্ধতি অনুযায়ী,ANNS ভেক্টর সূচককে চারটি প্রধান শ্রেণিতে ভাগ করা যায়:

  • বৃক্ষভিত্তিক সূচি

  • গ্রাফভিত্তিক সূচক

  • হ্যাশভিত্তিক সূচক

  • কোয়ান্টাইজেশনভিত্তিক সূচি

1、বৃক্ষভিত্তিক পদ্ধতি

বৃক্ষভিত্তিক পদ্ধতির মূল ধারণা হলো ডেটাকে ভাগ করা, অনেকটা বাইনারি সার্চ ট্রির মতো। অনুসন্ধানের সময় অনুসন্ধানক্ষেত্র ছোট করে দ্রুত তথ্য খুঁজে পাওয়াই এর উদ্দেশ্য। তবে এই পদ্ধতি উচ্চমাত্রিক স্থানের জন্য উপযুক্ত নয়। প্রধান বৃক্ষভিত্তিক পদ্ধতিগুলির মধ্যে রয়েছে KDTree(K-Dimensional Tree, কে-মাত্রিক বৃক্ষ)ও Annoy(Approximate Nearest Neighbors Oh Yeah, আনুমানিক নিকটতম প্রতিবেশী—ওহ ইয়াহ)。
1.1 KDTree
KDTree নির্মাণও পুনরাবৃত্ত বিভাজনের ধারণার ওপর নির্ভর করে,প্রথমে সর্বাধিক ভ্যারিয়েন্সযুক্ত মাত্রা বেছে নেওয়া হয়,সেই মাত্রায় সব ডেটার মধ্যককে বিভাজনবিন্দু ধরে,অধিআয়তাকার অঞ্চলকে দুটি উপঅঞ্চলে ভাগ করা হয়,মধ্যকের চেয়ে ছোট মানগুলো বাঁ দিকে রাখা হয়,মধ্যকের চেয়ে ছোট মানগুলো ডান দিকে রাখা হয়,পুনরাবৃত্তভাবে বাঁ ও ডান উপবৃক্ষ তৈরি করা হয়,যতক্ষণ না সব ডেটার বিভাজন সম্পূর্ণ হয়।
13.png

KDTree-ভিত্তিক অনুসন্ধানের প্রক্রিয়া:
1、অনুসন্ধানের ডেটা p এবং বর্তমান নোডের বিভাজনমাত্রা d নিয়ে, d মাত্রায় p-এর স্থানাঙ্কের মান নোডের মানের চেয়ে বড় না ছোট তা বিচার করুন; বড় হলে বাম চাইল্ড নোডে, ছোট হলে ডান চাইল্ড নোডে যান;
2、পাতা নোডে পৌঁছানো পর্যন্ত ঘুরে দেখুন,দেখা হয়েছে বলে চিহ্নিত করুন,পাতা নোড থেকে দূরত্বকে নিকটতম দূরত্ব হিসেবে গণনা করুন;
3、পাতা নোডে ব্যাকট্র্যাক করুন, প্রতিবার ব্যাকট্র্যাক করার সময় p ও অভিভাবক নোডের অনাবিষ্কৃত শাখার মধ্যকার দূরত্ব যাচাই করুন।
a)যদি এই শাখা নোড ও p-এর মধ্যকার দূরত্ব বর্তমান নিকটতম দূরত্বের চেয়ে বেশি হয়, তবে রুট নোড পর্যন্ত ওপরের দিকে ফিরে যেতে থাকুন;
b)যদি এই শাখা নোড ও p-এর দূরত্ব বর্তমান নিকটতম দূরত্বের চেয়ে কম হয়, তবে এই শাখা ব্যবহার করে ধাপ 1 ও ধাপ 2 অনুসরণ করে পাতার নোড পর্যন্ত যান, এবং পাতা ও Q-এর নিকটতম দূরত্ব হালনাগাদ করুন।
14.png

1.2Annoy
Annoy হাইপারপ্লেন দিয়ে স্থান বিভাজন করে। KMeans(k=2) দিয়ে দুটি ক্লাস্টার কেন্দ্র খুঁজে নেওয়া হয়; কেন্দ্র দুটির সংযোগরেখার লম্ব সমতলটিই বিভাজনের হাইপারপ্লেন। প্রতিটি উপস্থানে ডেটার সংখ্যা নির্দিষ্ট সীমার নিচে না নামা পর্যন্ত পুনরাবৃত্তি চলতে থাকে।
 15.png16.png17.png

18.png

এই স্থানের যেকোনো বিন্দু অনুসন্ধান করতে মূল থেকে বাইনারি ট্রি পরিভ্রমণ শুরু করা যায়। প্রতিটি মধ্যবর্তী নোড(ওপরের গাছের ছোট বর্গগুলো)একটি হাইপারপ্লেন নির্ধারণ করে, তাই হাইপারপ্লেনের ভিত্তিতে পরবর্তী ধাপে বাম সন্তান নাকি ডান সন্তানের দিকে যেতে হবে তা নির্ধারণ করা যায়। একটি বিন্দু অনুসন্ধান লগারিদমিক সময়ে সম্পন্ন করা যায়, অর্থাৎ গাছের উচ্চতার সমান ধাপে।

সুবিধা:নিম্নমাত্রিক ডেটায় নির্ভুলতা তুলনামূলক বেশি অসুবিধা:ডেটার জটিলতা পুরোপুরি ধরতে পারে না, উচ্চমাত্রিক ডেটায় নির্ভুলতা কম

2、গ্রাফভিত্তিক পদ্ধতি

গ্রাফভিত্তিক পদ্ধতিতে প্রধানত গ্রাফ নামের ডেটা স্ট্রাকচার ব্যবহার করা হয়,প্রতিবেশী নোডগুলির সংযোগ কাজে লাগিয়ে দ্রুত চলাচলের পথ তৈরি করা হয়,এবং সমস্যাটিকে গ্রাফ ট্রাভার্সালের সমস্যায় রূপান্তর করা হয়,ফলে অনুসন্ধানের পরিসর দ্রুত সংকুচিত করে তথ্য উদ্ধারের গতি বাড়ানো যায়।তবে গ্রাফ ডেটা স্ট্রাকচারটি বেশ জটিল,সর্বোচ্চ অনুসন্ধানগতির জন্য সাধারণত পুরো গ্রাফ মেমরিতে লোড করা হয়,ফলে এর মেমরি ব্যবহার অত্যন্ত বেশি হয়,কিন্তু অনুসন্ধান দ্রুত হয়,রিকলও বেশি থাকে।

বর্তমানে বহুল ব্যবহৃত গ্রাফ অনুসন্ধান অ্যালগরিদম হলো মূলত HNSW(Hierarchical Navigating Small World), আর NSW(Navigating Small World)তার পূর্বসূরি অ্যালগরিদম, তাই সেটিও কিছুটা বোঝা দরকার।
2.1 NSW
সরল গ্রাফ নির্মাণপদ্ধতির ভিত্তিতে NSW নিচের নিয়মগুলো যোগ করে:প্রতিটি নোডের প্রতিবেশী নোড থাকতে হবে;প্রতিবেশী নোডগুলোর মধ্যে সংযোগ থাকতে হবে;নিকটবর্তী প্রতিবেশীর সংখ্যা একটি হাইপারপ্যারামিটার,যা ব্যবহারকারী নির্ধারণ করেন। এটি মূলত সরল গ্রাফ নির্মাণপদ্ধতির কিছু সীমাবদ্ধতা দূর করতে ব্যবহৃত হয়।
19.pngNSW গ্রাফ তৈরির প্রক্রিয়া:
নতুন একটি নোড ঢোকানোর সময় প্রথমে তার সবচেয়ে কাছের mটি নোড খুঁজে বের করে নতুন নোডটিকে সেই mটি নোডের সঙ্গে যুক্ত করা হয়।
NSW অনুসন্ধান প্রক্রিয়া:
অনুসন্ধানের ডেটা q-এর জন্য,গ্রাফ থেকে এলোমেলোভাবে একটি প্রবেশ বিন্দু নোড এবং তার প্রতিবেশী নোডগুলি বেছে নিন,প্রবেশবিন্দু ও প্রতিবেশী নোডগুলির সঙ্গে p-এর দূরত্ব গণনা করুন,কোনো প্রতিবেশীর সঙ্গে p-এর দূরত্ব যদি p ও প্রবেশ বিন্দুর দূরত্বের চেয়ে কম হয়,তবে সর্বনিম্ন দূরত্বের বিন্দুটি নির্ধারণ করুন,এভাবে শেষে এমন একটি বিন্দু পাওয়া পর্যন্ত চালিয়ে যান,যার সব প্রতিবেশীর সঙ্গে অনুসন্ধানবিন্দুর দূরত্ব ওই বিন্দুর দূরত্বের চেয়ে বেশি।
উপরের ছবিতে দেখানো হয়েছে, তৈরি করা নিকটতম প্রতিবেশী গ্রাফে সবুজ query নোডের সবচেয়ে কাছের নোড খুঁজতে এলোমেলোভাবে নির্বাচিত প্রবেশ বিন্দু থেকে শুরু করা হয়; প্রথমে লাল দীর্ঘ সংযোগ দিয়ে দ্রুত query-এর কাছের নোডে পৌঁছে, তারপর কালো ছোট সংযোগ দিয়ে শর্ত পূরণ করা বিন্দু খুঁজে পাওয়া যায়।
NSW-ও একটি আনুমানিক গণনাপদ্ধতি, প্রকৃত নিকটতম প্রতিবেশী পাওয়ার নিশ্চয়তা দেয় না। আগে সংযোজিত বিন্দুগুলির অতিরিক্ত সংযোগ বেশি থাকে, তাই সেগুলির মহাসড়ক গঠনের সম্ভাবনাও বেশি;যত পরে কোনো বিন্দু সংযোজিত হয়, তার মহাসড়ক থাকার সম্ভাবনা তত কম।
2.1 HNSW
HNSW হলো NSW-ভিত্তিক একটি উন্নত পদ্ধতি। এটি মূলত স্কিপ লিস্টের ধারণা কাজে লাগিয়ে স্তরবিন্যাসের মাধ্যমে বাস্তবায়িত হয়। প্রতিটি স্তরই একটি NSW, তাই একে স্তরবিন্যস্ত NSW পদ্ধতিও বলা যায়। ওপরের স্তরে নোডের সংখ্যা কম এবং নোডগুলোর মধ্যবর্তী দূরত্ব বেশি; নিচের দিকে নামলে নোড ও সংযোগের সংখ্যা বাড়ে এবং গড় দূরত্ব কমে।
20.png

সুবিধা:উচ্চমাত্রিক ডেটায় সদৃশ নিকটতম প্রতিবেশী খুঁজে পেয়ে অনুসন্ধানের কার্যক্ষমতা বাড়াতে পারে, অসুবিধা:গ্রাফ নির্মাণপদ্ধতি জটিল, যা মেমরি ব্যবহারের দক্ষতাকে প্রভাবিত করে।

3、হ্যাশভিত্তিক পদ্ধতি

হ্যাশভিত্তিক পদ্ধতি মূলত হ্যাশ ফাংশনের এই বৈশিষ্ট্য ব্যবহার করে যে, যেসব ডেটার মধ্যে সাদৃশ্য বেশি, তাদের হ্যাশ মানও কাছাকাছি হয়। হ্যাশ ফাংশন উচ্চমাত্রিক ডেটাকে নিম্নমাত্রিক ডেটায় রূপান্তর করতে পারে, ফলে সূচক নির্মাণের দক্ষতা অনেক বেড়ে যায়। তবে হ্যাশ ফাংশনের আরেকটি সীমাবদ্ধতাও আছে: হ্যাশ মান কাছাকাছি হলেই ডেটা যে সদৃশ হবে, তা নিশ্চিত নয়। ফলে এই পদ্ধতির রিকল খুব বেশি নয়। হ্যাশভিত্তিক পদ্ধতির প্রধানটি হলো LSH(Locality-Sensitive Hashing, স্থানীয়তা-সংবেদনশীল হ্যাশিং)。ধরা হয়, দুটি ভেক্টর সদৃশ হলে তাদের হ্যাশ মানও কাছাকাছি হবে। হ্যাশ ফাংশন ব্যবহার করে সদৃশ ভেক্টরগুলোকে একই বাকেটে ম্যাপ করা হয়। অনুসন্ধানের সময় প্রথমে ক্যোয়ারি ভেক্টরের সবচেয়ে কাছাকাছি বাকেটটি খুঁজে নেওয়া হয়, তারপর সেই বাকেটের ডেটার ওপর অনুসন্ধান ও গণনা চালিয়ে সবচেয়ে সদৃশ topk ফল বের করা হয়।
21.pngLSH(অবস্থান-সংবেদনশীল hash)-ও স্থান বিভাজনের ওপর ভিত্তি করা একটি পদ্ধতি। বাস্তবায়নের পদ্ধতি নিচের ছবির মতো, এলোমেলোভাবে একটি সরলরেখা তৈরি করা হয়। রেখাটি ধনাত্মক ও ঋণাত্মক দুই পাশ আলাদা করে। কোনো ভেক্টর এই রেখার ধনাত্মক পাশে থাকলে তার মান 1, ঋণাত্মক পাশে থাকলে 0। তারপর এলোমেলোভাবে আরেকটি সরলরেখা তৈরি করা হয়, একইভাবে ধনাত্মক পাশে 1, ঋণাত্মক পাশে 0;এভাবে আমরা এমন একাধিক সরলরেখা তৈরি করি, ফলে প্রতিটি ভেক্টরের জন্য 4টি 0 অথবা 1 হিসাব করে পাওয়া যায়, আর প্রত্যেকে একটি 4 বিটের বাইনারি কোড পায়। এখন এই 4টি বাইনারি কোডের সাদৃশ্যের মাত্রা দেখি।
22.png23.png24.png25.png26.png27.png

সুবিধা:বৃহৎ ডেটায় সম্প্রসারণ করলে ডেটা প্রক্রিয়াকরণ অত্যন্ত দ্রুত হয়,অসুবিধা:নির্ভুলতা মাঝারি

5、কোয়ান্টাইজেশনভিত্তিক(Quantized) ইনডেক্স

5.1、ক্লাস্টারিং
যদি অনুসন্ধান ভেক্টরের জন্য মোটামুটি একটি সীমা নির্ধারণ করে তার মধ্যে অনুসন্ধান করা যায়, তবে অনুসন্ধানের গতি অনেক বাড়ানো সম্ভব। প্রথমে কাঙ্ক্ষিত শ্রেণির সংখ্যা ঠিক করি, যেমন নিচের ছবিতে 4টি শ্রেণি, এলোমেলোভাবে 4টি কেন্দ্রবিন্দু তৈরি করি, তারপর প্রতিটি ভেক্টর যে কেন্দ্রবিন্দুর সবচেয়ে কাছে থাকে, তাকে সেই কেন্দ্রবিন্দুর দলে রাখা হয়। এরপর বর্তমানে একটি শ্রেণিতে থাকা ভেক্টরগুলো দিয়ে একটি গড় ভেক্টরবিন্দু হিসাব করা হয়, কেন্দ্রবিন্দুর অবস্থান সেই গড় ভেক্টরবিন্দুতে সরানো হয়, তারপর আবার নির্ধারণ করা হয় কোন ভেক্টরবিন্দু কোন কেন্দ্রবিন্দুর সবচেয়ে কাছে, এবং নতুন করে শ্রেণিবিন্যাস করা হয়। এই পুনরাবৃত্ত প্রক্রিয়াকে প্রশিক্ষণ বলে, শেষে কেন্দ্রবিন্দুগুলো স্থিতিশীল হতে থাকে, বা বলা যায় অভিসারিত হয়। অনুসন্ধানের সময় শুধু অনুসন্ধান ভেক্টরের সবচেয়ে কাছের ক্লাস্টারকেন্দ্র খুঁজে, সেই ক্লাস্টারের ভেক্টরগুলোর মধ্যে অনুসন্ধান করলেই চলে। এভাবেই অনুসন্ধানের পরিসর ছোট করার উদ্দেশ্য পূরণ হয়
29.png29.png

5.2、কোয়ান্টাইজেশন (Quantization)
তবে বিপুল পরিমাণ ভেক্টর ডেটার ক্ষেত্রে, অনুসন্ধানের গতির পাশাপাশি মেমরির ব্যয়ও একটি বিশাল চ্যালেঞ্জ। বাস্তব প্রয়োগে হাজারেরও বেশি মাত্রার ভেক্টর এবং দশ কোটিরও বেশি ভেক্টর ডেটা অস্বাভাবিক নয়, তাই মেমরির ব্যয় খুব বেশি হয়।
30.png

ওপরের ক্লাস্টারিং থেকে আমরা কেন্দ্রবিন্দু সম্পর্কে জেনেছি, যাকে আসলে সেন্ট্রয়েড বলা হয়। ক্লাস্টারের বিন্দুগুলোর প্রতিনিধিত্ব করতে কি সেন্ট্রয়েড ব্যবহার করা যায়? সম্ভবত যায়, আসলে এই পদ্ধতিই একটি আদর্শ উদাহরণ ক্ষয়যুক্ত সংকোচন ,ছবি দিয়ে উদাহরণ দিলে তা এমন হবে:
31.png32.png

এতে ভেক্টরের কিছু মান হারিয়ে গেলেও, ক্লাস্টারের কেন্দ্রক ও তার অন্তর্ভুক্ত ভেক্টরগুলোর পারস্পরিক সম্পর্কের কারণে মূল তথ্যের কিছু অংশ অনেকটাই সংরক্ষিত থাকে। এই ক্ষয়যুক্ত সংকোচনে কিছু সূক্ষ্ম তথ্য হারানোর তুলনায় এর সুবিধা যথেষ্ট বড়। নিচের চিত্র অনুযায়ী সংরক্ষণ করা যায়; এরপর কোনো ভেক্টর ব্যবহার করার সময় তার কোড দিয়ে কোডবুকে সংশ্লিষ্ট কেন্দ্রক খুঁজে, কেন্দ্রকের নির্দিষ্ট মান পুনরুদ্ধার করা হয়। ভেক্টরকে কেন্দ্রকের কোড দিয়ে প্রকাশ করার এই পদ্ধতিকেই ভেক্টর কোয়ান্টাইজেশন(Quantization) বলা হয়
33.png

5.3、গুণফল কোয়ান্টাইজেশন PQ(Product Quantization)
ভেক্টর কোয়ান্টাইজেশনের পর একটি অতিরিক্ত কোডবুক তৈরি হয়। ভেক্টরের নিজস্ব মেমরি খরচ অবশ্যই কমে, কিন্তু কোডবুক নতুন মেমরি খরচ সৃষ্টি করে, এবং তা যথেষ্ট বড়। কম মাত্রায় এটি তেমন চোখে পড়ে না, কিন্তু বাস্তব পরিস্থিতিতে শত বা হাজার মাত্রার ভেক্টরের ক্ষেত্রে কোডবুকটি ভয়াবহ আকার নিতে পারে। সংখ্যা নির্দিষ্ট থাকলে, কোয়ান্টাইজেশনের মান বজায় রাখতে ভেক্টরের বণ্টন যত বিরল হবে, তত বেশি ক্লাস্টার ভেক্টর প্রয়োজন হবে।
34.png35.png36.png37.png39.png39.png


বাস্তব প্রয়োগে ভেক্টরের মাত্রা কয়েকশো থেকে কয়েক হাজার হলে তথ্য অত্যন্ত বিরলভাবে ছড়িয়ে থাকে, তাই উচ্চমাত্রিক স্থানে কোয়ান্টাইজেশনের মান নিশ্চিত করতে আমাদের বিপুলসংখ্যক ক্লাস্টার প্রয়োজন হতে পারে, একটি প্রচলিত পরিস্থিতি নিচের ছবিতে দেখানো হয়েছে:একটি 128 মাত্রার ভেক্টরের জন্য 2-এর 64 ঘাত সংখ্যক ক্লাস্টার কেন্দ্র লাগতে পারে, কারণ এর ফলে কেন্দ্রবিন্দুর সংকেতলিপি সংরক্ষণের কোডবুক অত্যন্ত বড় হয়ে যায়। আর এই কোডবুক সংরক্ষণে যে মেমরি খরচ হয়, তা কোয়ান্টাইজেশনের মাধ্যমে সাশ্রয় হওয়া মেমরির চেয়ে অনেক বেশি
40.pngএই সমস্যার সমাধান হলো প্রথমে উচ্চমাত্রিক ভেক্টরকে কয়েকটি নিম্নমাত্রিক উপভেক্টরে ভাগ করা, তারপর এই নিম্নমাত্রিক উপভেক্টরগুলোকে আলাদাভাবে কোয়ান্টাইজ করা। যেমন, 128 মাত্রার একটি উচ্চমাত্রিক ভেক্টরকে 8টি 16 বিটের উপভেক্টরে ভাগ করা, তারপর 8টি 16 মাত্রার উপভেক্টরে পৃথকভাবে ক্লাস্টারিং প্রশিক্ষণ চালানো।
42.png42.png

তাই প্রতিটি ভেক্টর 8টি উপস্থানের প্রশিক্ষণফল ব্যবহার করে নিজের সংশ্লিষ্ট 8টি উপভেক্টরকে কোয়ান্টাইজ করতে পারে। প্রতিটি উপভেক্টরের মাত্রা 16, যা খুব বেশি নয়, তাই প্রতিটি 16 মাত্রার উপস্থানে মাত্র 256টি ক্লাস্টার দিয়েই বেশ ভালো কোয়ান্টাইজেশন ফল পাওয়া যায়। ফলে প্রতিটি উপভেক্টরের কোডের মান 0-255 সীমার মধ্যে থাকে। 8টি উপভেক্টরের কোয়ান্টাইজেশন কোড একত্র করলেই মূল ভেক্টরের চূড়ান্ত কোয়ান্টাইজেশন কোড পাওয়া যায়। অর্থাৎ এখন একটি ভেক্টর 8টি কোডের মানে কোয়ান্টাইজ হয়েছে। একইভাবে প্রতিটি উপস্থান নিজের উপকোডবুকও তৈরি করে। ব্যবহারের সময় 8টি কোডের মান দিয়ে উপকোডবুক থেকে যথাক্রমে 8টি 16 মাত্রার উপভেক্টর খুঁজে নিয়ে একত্র করলে একটি 128 মাত্রার ভেক্টর পুনর্গঠন করা যায়
45.png45.png45.png46.png


মন্তব্যের বিভাগ

পাঠানো হচ্ছে

জনপ্রিয় লেখা

আপনার থিম বাছুন

আপনার থিম পুরো সাইটে প্রযোজ্য হবে।