NLP জগতের কসাই - Stemming

Stemming NLP Bangla AI Bangla NLP NLP Concepts
NLP জগতের কসাই - Stemming

ভাবুন তো, আপনি সার্চ করলেন "বাংলাদেশের সেরা লেখক"। গুগল আপনাকে দেখালো "লেখকের" লিস্ট, "লেখালেখি" নিয়ে আর্টিকেল, আবার "লেখকগণ" নামে একটা ফেসবুক পেজ। আপনি সার্চ করেছেন একটা শব্দ দিয়ে, কিন্তু গুগল আপনাকে ঐ শব্দের সব ভাই ব্রাদারকেও খুঁজে এনে দিলো। কীভাবে? কম্পিউটার তো একটা বোকা যন্ত্র। তার কাছে "লেখক", "লেখকের" আর "লেখালেখি" তিনটা সম্পূর্ণ আলাদা শব্দ। ঠিক যেমন "আম", "জাম" আর "কাঁঠাল" তিনটা আলাদা ফল।

তাহলে কম্পিউটার কীভাবে বুঝলো যে এই সবগুলোর মূল আসলে একই?

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

ব্যাপারটা বোঝার জন্য, চলুন একটা কসাইয়ের গল্প ভাবি।

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

  1. নিয়ম ১: কোনো শব্দের শেষে "গুলি" থাকলে, কেটে ফেলো।
  • "আমগুলি" -> "আম" (দারুণ!)
  • "বিড়ালগুলি" -> "বিড়াল" (চমৎকার!)
  1. নিয়ম ২: কোনো শব্দের শেষে "ের" থাকলে, কেটে ফেলো।
  • "ছেলেটির" -> "ছেলেটি" (বাহ!)
  • "মানুষের" -> "মানুষ" (খুব ভালো!)
  1. নিয়ম ৩: কোনো শব্দের শেষে "ছিল" থাকলে, কেটে ফেলো।
  • "করেছিল" -> "করে" (বাহ!)
  • "গিয়েছিল" -> "গিয়ে" (চমৎকার!)

কম্পিউটার যখন এই কাজটা করে, তখন তার বিশাল লাভ হয়। তার ডিকশনারিতে এখন "আম" আর "আমগুলি" দুটো আলাদা শব্দ রাখতে হয় না। সে দুটোকেই কেটে "আম" বানিয়ে ফেলে। ফলে যখন আপনি "আম" লিখে সার্চ দেন, সে "আমগুলি" ওয়ালার রেজাল্টও দেখায়। সে ভাবে, দুটো তো একই জিনিস।

এই পর্যন্ত সব খুব ভালো লাগছিলো, তাই না?

কিন্তু আগেই বলেছি, এই কসাই অন্ধ। সে নিয়ম মেনে শুধু কেটেই চলে। সে বোঝে না সে কী কাটছে। আর এখানেই মজাটা শুরু হয়। ধরুন, কসাইয়ের কাছে একটা ইংরেজি নিয়ম আছে: শব্দের শেষে "ing" থাকলে কেটে ফেলো।

  • "Running" -> "Run" (সফল)
  • "Jumping" -> "Jump" (সফল)
  • "Singing" -> "Sing" (সফল)
  • "Caring" -> "Car" (সর্বনাশ!)

stemming

দেখলেন কী হলো? "Caring" (যত্নশীল) শব্দটার "ing" কেটে সে বানিয়ে ফেললো "Car" (গাড়ি)। অর্থ পুরোপুরি পাল্টে গেলো। কিন্তু কসাইয়ের তাতে কিছু যায় আসে না। তার নিয়ম সফল হয়েছে। আরেকটা উদাহরণ দেখুন।

নিয়ম: শব্দের শেষে "ity" থাকলে কেটে ফেলো।

  • "University" -> "Univers"
  • "Electricity" -> "Electric"

এখন, "Univers" বা "Electric" কি ইংরেজি শব্দ? না। কিন্তু তাতে স্টেমিং এর কিচ্ছু আসে যায় না। সে তো ব্যাকরণবিদ নয়, সে কসাই। তার কাজ শব্দ বানানো নয়, তার কাজ হলো শব্দ ছেঁটে ছোট করা। সে "University" আর "Universities" দুটোকেই ছেঁটে "Univers" বানাবে। এতেই তার শান্তি। সার্চ ইঞ্জিন বুঝবে এই দুটো শব্দ একই।

বাংলায় এই কাজটা আরও কঠিন এবং আরও হাস্যকর হতে পারে।

ধরুন, একটা বাংলা স্টেমিং প্রোগ্রামের নিয়ম হলো শব্দের শেষের বিভক্তি বা প্রত্যয় ছেঁটে ফেলা

  • "ছেলেরা" -> "ছেলে" (সফল)
  • "ছেলেকে" -> "ছেলে" (সফল)
  • "ছেলের" -> "ছেলে" (সফল)

খুব ভালো। "ছেলে" সংক্রান্ত সব শব্দ এক হয়ে গেলো।

কিন্তু ধরুন শব্দটা হলো "গাড়ি"।

কসাইয়ের নিয়ম: শেষে "ড়ি" থাকলে কেটে ফেলো।

  • "গাড়ি" -> "গা"
  • "বাড়ি" -> "বা"
  • "শাড়ি" -> "শা"

পুরো ব্যাপারটা একটা জগাখিচুড়ি হয়ে গেলো।

তাহলে প্রশ্ন হলো, এত ভুলভাল কাজ করার পরেও আমরা এই বোকা কসাইকে কেন ব্যবহার করি? দুটো কারণে:

  1. গতি: স্টেমিং অবিশ্বাস্য দ্রুত। এর কোনো ডিকশনারি লাগে না, ব্যাকরণ বোঝার দরকার হয় না। সে শুধু ছুরি চালায়। গুগল, ফেসবুকের মতো সিস্টেমকে সেকেন্ডে কোটি কোটি লেখা প্রসেস করতে হয়। তাদের জন্য এই গতি খুব দরকারি।
  2. কাজ চলে যায়: বেশিরভাগ সময়, এটা "মোটামুটি" ঠিকঠাক কাজ করে। "Car" আর "Caring" এর মতো ভয়ংকর ভুল খুব কম হয়। বেশিরভাগ সময়ই এটা "running" কে "run" বা "বইগুলো" কে "বই" বানায়, যা যথেষ্ট কাজের।

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

পরের বার যখন দেখবেন সার্চ রেজাল্টে আপনার কাঙ্ক্ষিত শব্দের ভাই ব্রাদাররাও হাজির হয়েছে, তখন বুঝবেন, এর পেছনে হয়তো ঐ রকমই এক অন্ধ, দ্রুতগতির কসাই কাজ করছে, যে শব্দের লেজ কাটতে গিয়ে মাঝে মাঝে পুরো অর্থই পাল্টে ফেলছে!

Share this article

Sakhawat Adib

Written by Sakhawat Adib

I'm a Software Engineering undergraduate at IUT passionate about AI/ML/DL research. Love to read academic discoveries. Would love to spread the knowledge of science throughout the world.

Get an email whenever Sakhawat Adib publishes.