24 May 2016

গুগল সার্চ (সার্চ ইঞ্জিন) কেমনে কাজ করে?


কয়দিন আগে বাড়িতে গেছিলাম ছুটিতে। এলাকার এক ছোট ভাইয়ের পড়াশুনার খোজ খবর নিচ্ছিলাম। পড়ে ক্লাস নাইনে। কথায় কথায় এক সময় জিজ্ঞেস করল, ভাই গুগল সার্চ (সার্চ ইঞ্জিন) কেমনে কাজ করে?
পড়লাম ঝামেলার মধ্যে। সার্চ ইঞ্জিনের ডিটেইল ব্যাপারটা মোটামুটি ভালই কমপ্লেক্স। সেটা বলতে গেলে হয়তো বুঝবে না। মনে মনে বলবে--দূর ভাই কিছুই জানে না, আমারে নয় ছয় একটা বুঝ দিছে। চিন্তা করলাম একটা উদাহরণ দিয়ে বুঝানো যায় কিনা। বললাম-
- দাঁড়াও বুঝাইতেছি। আগে বল, বইয়ের ইন্ডেক্স কি জিনিস সেটা জানো?
- জ্বী ভাই জানি। বইয়ের পিছনে থাকে।
- গুড।
আরো ক্লিয়ার হওয়ার জন্য, খুইজা আমার একটা পুরান বই বের করে তারে দিয়ে বললাম--এইটার ইন্ডেক্সটা বের করো। বের করে দেখাল। (অনেকটা দ্বিতীয় ছবিটার মত।)
- আচ্ছা ধরো, তুমি ‘plum’ কি জিনিস সেটা জানতে চাও এই বই থেকে। তাহলে কেমনে বের করবা ‘plum’ কোথায় আছে?
- এইতো ভাই, ইন্ডেক্স থেকে দেখে নিয়ে বের করব।
- বের করোতো।
- ‘plum’ আছে গিয়া আপনার ৬৮, ৯৭, ৯৮ আর ১০৮ নম্বর পেজে।
- খোলো সে পেজ।
- এইতো দেখেন।
- গুড। এইতো তুমি গুগল সার্চ (সার্চ ইঞ্জিন) কি জিনিস বুঝে গেছ।
- কেমনে?
গুগলোও (সার্চ ইঞ্জিন) অনেকটা এই ভাবেই কাজ করে। ধর, দুনিয়ার যত ওয়েভপেজ আছে সেগুলা একেকটা তোমার এই বইয়ের পেজ। আর প্রতিটা ওয়েবপেজের ওয়েবএড্রেস (ইউআরএল) হচ্ছে বইয়ের পেজ নম্বর।
গুগলের (সার্চ ইঞ্জিন) একটা সফটওয়ার থাকে যাকে বলে স্পাইডার বা ক্রলার। এই স্পাইডার এর কাজ হচ্ছে দুনিয়ার যত ওয়েবপেজ আছে সেগুলা খুজে বের করা এবং তাদের ওয়েবএড্রেস (ইউআরএল) সংগ্রহ করা।
তারপর এসব ওয়েবপেজে যেসব শব্দ আছে সেগুলা এবং ওয়েবএড্রেস দিয়ে, এই বইয়ের পিছনে যে ইন্ডেক্স আছে তার মত করে একটা ইন্ডেক্স তৈরি করে। অর্থাৎ, প্রতিটা ওয়েবপেজের শব্দ হচ্ছে এই বইয়ের পিছনের ইন্ডেক্সের এক একটা শব্দ এবং ঐ শব্দ যে ওয়েবপেজে আছে তার ওয়েবএড্রেস হচ্ছে বইয়ের পেজ নম্বর।
তুমি যখন কোন কিছু গুগলকে খুজতে বল, সে আসলে তার ঐ ইন্ডেক্সে থেকে শব্দটা খুজে বের করে এবং ঐ শব্দ যে যে ওয়েবপেজে আছে তার ওয়েবএড্রেস তোমাকে দেয়। তারপর তুমি ক্লিক করে সেই ওয়েবএড্রেসে চলে যাও। যেমন করে তুমি বইয়ের ইন্ডেক্স থেকে পেজ নম্বর দেখে ঐ পেজে চলে গিয়েছিলে। এখন বুঝচো?
- হ ভাই। মনে হয় কিছুটা বুঝছি।
- গুড।
কেউ আরেকটু ভাল করে বুঝতে চাইলে, নিচের ভিডিওটা দেখা যেতে পারে—




দ্বিতীয় অংশ
=========

র‍্যাঙ্কিং
--------

- এখন প্রশ্ন হচ্ছে আমরা ইন্ডেক্স (দ্বিতীয় ছবিটা) থেকে দেখতেছি ‘plum’ শব্দটা আছে ৪টা পেজে--৬৮, ৯৭, ৯৮ এবং ১০৮ নম্বর পেজে। কিন্তু তুমি আগে কোন পেজ খুলবা? কেমনে বুঝবা কোন পেজ খুললে তুমি ‘plum’ সম্পর্কে যে তথ্য খুঁজতেছ সেটা পাবা?
- প্রথম থেকে একটা একটা করে দেখব (আগে ৬৮, তারপর ৯৭, তারপর ৯৮ এবং সবশেষে ১০৮)।
- ইন্টারনেটেতো হাজার হাজার, লাখ লাখ পেজ পাবা যেগুলা ‘plum’ রিলেটেড (গুগল ১৩১,০০০,০০০ পেজে খুঁজে পেয়েছে যেগুলা ‘plum’ রিলেটেড)। এতোগুলা পেজ কি একটা একটা করে দেখা সম্ভব হবে?
- কই? গুগলেতো অল্প কয়টা দেখায় মাত্র। ঐগুলা দেখলেইতো পাওয়া যায়।
- তুমি যদি গুগল সার্চ পেজের উপরের দিকে তাকাও তাহলে দেখবে লেখা আছে ‘About 131,000,000 results (0.59 seconds)’। তার মানে গুগল ০.৫৯ সেকেন্ডের মধ্যে ‘plum’ রিলেটেড ১৩১,০০০,০০০ পেজ খুজে পেয়েছে। তার মধ্য থেকে সে কায়দা কানুন করে তোমাকে প্রথম পেজে হয়তো ১০ ওয়েবপেজের লিংক দেখায়। তুমি পরের পেজে গেলে দেখবে আরো ১০টা ওয়েবপেজের লিংক। এভাবে চলতে থাকবে।
- কিন্তু আমাদেরতো পরের ওয়েবপেজগুলাতে যেতে হয় না।
- হুম। এখানেই গুগলের সাফল্য। সে ‘plum’ রিলেটেড যত ওয়েবপেজ খুঁজে পেয়েছে তাদের একটা র‍্যাঙ্ক তৈরি করে। ঐ র‍্যাঙ্কে যে আগে আছে তাকে আগে দেখায় আর যে পরে আছে তাকে পরে দেখায়। ঐ র‍্যাঙ্কিং যত ভাল হবে তুমি তত তাড়াতাড়ি তোমার দরকারি ওয়েবপেজটা পেয়ে যাবে। র‍্যাঙ্কিং এর এই কাজটা যে এলগোরিদম বা সফটওয়ার করে তাকে বলে র‍্যাঙ্কার। প্রত্যেকটা সার্চ ইঞ্জিনের সাফল্য নীর্ভর করে এই র‍্যাঙ্কিং এলগোরিদমের উপর। এবং মেইনলী এই র‍্যাঙ্কিং এলগোরিদমের ভিন্নতার কারনেই একটা সার্চ ইঞ্জিন আরেকটা সার্চ ইঞ্জিন থেকে আলাদা। গুগল, বিং, ইয়াহু প্রত্যেকের নিজস্ব র‍্যাঙ্কিং এলগোরিদম আছে এবং তারা আলাদা আলাদা। শুধু তাই নয়, সবাই নিজেদের র‍্যাঙ্কিং এলগোরিদম খুব গোপন রাখে যেন তাদের প্রতিদন্ধি বা অন্য কেউ না জানতে পারে। স্পেমাররা যদি হুবহু জেনে যায় কোন একটা সার্চ ইঞ্জিনের র‍্যাঙ্কিং এলগোরিদম কেমন করে কাজ করে তাহলে সহজেই স্পেমিং করে বিভিন্ন ওয়েব পেজের র‍্যাঙ্কিং চেঞ্জ করে ফেলতে পারবে।
র‍্যাঙ্কিং এর জন্য বিভিন্ন সার্চ ইঞ্জিন কোম্পানি বিভিন্ন ফ্যাক্টর বিবেচনা করে, এরমক শতাধিক ফ্যাক্টর রয়েছে। তবে মোটামুটিভাবে কমন ফ্যাক্টরগুলো হলঃ কোন একটা পেজের জনপ্রিয়তা, তুমি যে শব্দটা খুঁজতেছ সেটা ঐ পেজে কতবার আছে, ঐ পেজের কোন পজিশনে শব্দটা আছে (যেমনঃ হেড লাইনে, বডিতে, নাকি ইউআরএল-এ), কতগুলো অন্য ওয়বপেজে এই পেজটাকে রেফার (লিংক) করা হয়েছে ইত্যাদি। এসব ফেক্টরকে একসাথে বিবেচনায় নিয়ে র‍্যাঙ্কিং এলগোরিদম ডিজাইন করা হয়।
উদাহরণ হিসেবে, মনে কর—একটা ওয়বপেজে ‘plum’ শব্দটা আছে ১০ বার, আরেকটা ওয়েবপেজে ‘plum’ শব্দটা আছে ১৫ বার এবং তৃতীয় ওয়েবপেজে ‘plum’ শব্দটা আছে ৫ বার। এখন তুমি যদি শুধু এই ওয়ার্ড কাউন্টকে বিবেচনায় নিয়ে এই তিনটি ওয়েব পেজের একটা র‍্যাঙ্কিং তৈরি কর, তাহলে যে ওয়েবপেজে ‘plum’ শব্দটা ১৫ বার আছে সেটা আসবে সবার আগে, তারপর আসবে যেটাতে ‘plum’ শব্দটা ১০ বার আছে এবং সবার শেষে আসবে যেটাতে ‘plum’ শব্দটা ৫ বার আছে।




ত্রিতীয় অংশ
=========

ইন্ডেক্সঃ
-----
বইয়ের পিছনে ইন্ডেক্স দেয়া থাকে যেন আমরা আমাদের প্রয়োজনীয় তথ্য যে পেজে আছে তা খুব সহজে খুজে পেতে পারি। তেমনি সার্চ ইঞ্জিনের ইন্ডেক্সেরও কাজ হচ্ছে--একজন ইউজার যে তথ্যটা খুঁজছে তা কোন ওয়েবপেজে আছে কম্পিউটার যেন তা অল্প সময়ে বের করতে পারে। যদি বইয়ের পিছনে ইন্ডেক্স না থাকতো তাহলে আমাদেরকে পুরো বইটা পড়ে দেখতে হত, ঐ তথ্যটা কোন পেজে আছে তা বের করার জন্য। একই ভাবে, সার্চ ইঞ্জিনের যদি ইন্ডেক্স না থাকতো তাহলে কম্পিউটারকে সবগুলো ওয়েবপেজ পড়ে দেখতে হত, ইউজার যে তথ্যটা খঁজছে সেটা কোন ওয়েবপেজে আছে। মনে কর একটা সার্চ ইঞ্জিন ১০,০০০ ওয়েবপেজের একটা ইন্ডেক্স তৈরি করেছে, এখন কোন একটা তথ্য এই ১০,০০০ ওয়েবপেজের কোন কোন পেজে আছে সেটা বের করতে কম্পিউটারের সময় লাগবে কয়েক মিলি সেকেন্ড মাত্র। কিন্তু যদি ইন্ডেক্স না থাকতো তাহলে কয়েক ঘন্টা সময় লেগে যেত!
বিভিন্ন ধরনের সার্চ ইঞ্জিন ইন্ডেক্স তৈরিতে প্রয়োজন অনুসারে বিভিন্ন ধরনের ডাটা স্ট্রাক্সার ব্যবহার করে থাকে, যেমনঃ সাফিক্স ট্রি, ইনভার্টেড ইন্ডেক্স, সাইটেশন ইন্ডেক্স, এনগ্রাম ইন্ডেক্স, ডকুমেন্ট-টার্ম মেট্রিক্স, ইত্যাদি। আমরা এসবের মধ্যে না গিয়ে সিম্পল ১টা ডাটা স্ট্রাক্সার দিয়ে বুঝার চেষ্টা করি কিভাবে ডাটা স্ট্রাক্সার ইন্ডেক্সের পারফরমেন্স চেঞ্জ করে দিতে পারে। তুমি যদি ভাল করে খেয়াল করে দেখ, দেখবে বইয়ের পিছনে যে ইন্ডেক্সটা আছে সেটা কিন্তু ক্রনোলজিকালি সাজানো। মানে হচ্ছে A দিয়ে শুরু করা শব্দগুলো আছে প্রথমে, তার পর আছে B দিয়ে শুরু করা শব্দগুলো, তার পর C দিয়ে শুরু করা শব্দগুলো, এভাবে। এতে সুবিধা কি? সুবিধা হচ্ছে ইন্ডেক্সের প্রথম থেকে একটা একটা করে শব্দ না দেখেও তুমি যে শব্দটা খঁজছো সেটা ইন্ডেক্সের কোথায় আছে সেটা সহজে পেয়ে যাও। মনে কর, তুমি plum শব্দটা খুজঁতেছ তাহলে তুমি আশা করতে পার যে, শব্দটা ইন্ডেক্সের মাঝামাঝি এবং শেষ এই জায়গার মধ্যে কোথাও আছে। তারপর তুমি সেই জায়গাটাকে আবার মাঝামাজি বরাবর ২ ভাগে ভাগ করে বুজতে পার কোন ভাগে শব্দটা থাকতে পারে। এভাবে কয়েকবার করলে তুমি শব্দটা পেয়ে যাবে। এখন দেখ, শব্দগুলো যদি বইয়ের ইন্ডেক্সে এইভাবে না সাজিয়ে এলোমেলো করে রাখা হত তাহলে তোমাকে পুরো ইন্ডেক্সটা খুঁজে দেখতে হত plum শব্দটা কোথায় আছে। কম্পিউটারও এই টেকনিকটা কাজে লাগায়—যেটাকে বলে বাইনারি সার্চ। ১০,০০০ শব্দের ইন্ডেক্স থেকে বাইনারি সার্চ ব্যবহার করে একটা শব্দ বের করতে কম্পিউটারকে মাত্র ১৩ বারের মত এরকম চেষ্টা করে হয়। মানে হচ্ছে, তাকে মাত্র ১৩টা শব্দ পড়ে দেখতে হয়। তানাহলে তাকে ১০,০০০ শব্দের সবগুলো পড়ে দেখতে হত।

স্পাইডার/ক্রলারঃ
-----------
স্পাইডার বা ক্রলারের কাজ হচ্ছে ইন্ডেক্সিং’র জন্য সিস্টেমেটিকেলি ওয়েবসাইটগুলো ব্রাউজ করা। স্পাইডারের মূল আইডিয়াটাও সিম্পল। (যদিও ইমপ্লিমেন্ট করতে গেলে অনেক কমপ্লেক্স কেজ হেন্ডেল করতে হয়।) কয়েকটা ইউআরএল নিয়ে এটা ব্রাউজ করা শুরু করে। শুরুর এই ইউআরএলগুলোকে বলে সিড। স্পাইডার যখন কোন ওয়েবপেজ ব্রাউজ করে তখন সেখানে অন্য যেসব ওয়েবপেজের লিংক থাকে (হাইপারলিংক) সে লিংকগুলোকে একটা ইউআরএল লিস্টে যোগ করে, যাকে বলে ক্রালার ফ্রন্টিয়ার। এই ইউআরএল লিস্ট থেকে, কিছু পলিসির উপর ভিত্তি করে, রিকার্সিভলি সে ওয়েবপেজগুলো ব্রাউজ করতে থাকে।