ধরেন, আপনি কম্পিউটারে একটা বিশাল লাইব্রেরি গোছানোর দায়িত্ব পেয়েছেন। আপনার কাছে হাজার হাজার বই আছে। কিন্তু সমস্যা হলো, বইগুলোর নাম কেউ লিখেছে বড় হাতের অক্ষরে ("TITANIC"), কেউ ছোট হাতের ("titanic"), কেউ আবার স্টাইল করে ("TiTaNiC")। কিছু বইয়ের নামের শেষে দাঁড়ি, কমা আছে ("Romeo and Juliet,")। কিছু বইয়ের নামের আগে "The" বা "A" ("The Jungle Book") আছে।
আপনি যদি এই সবগুলোকে আলাদা আলাদা বই ভেবে সাজাতে যান, লাইব্রেরিটা একটা জগাখিচুড়ি হয়ে যাবে। "titanic" লিখে সার্চ দিলে কম্পিউটার শুধু ছোট হাতের নামের বইটাই আনবে, বড় হাতেরটা আনবে না। সে ভাববে ওগুলো দুটো সম্পূর্ণ আলাদা বই।
কম্পিউটার ঠিক এই লাইব্রেইয়ানের মতোই আক্ষরিক বোকা। সে "ঢাকা" আর "ঢাকা!" কে দুটো আলাদা শব্দ হিসেবে দেখে। আবার পড়ুন, একটায় “!” (বিষ্ময় চিহ্ন) আছে। এই বোকা যন্ত্রটাকে ভাষা শেখানোর আগে, আমাদের প্রথম কাজ হলো এই জগাখিচুড়ি পরিষ্কার করা।
এই পরিষ্কার পরিচ্ছন্নতার, বা ভাষাকে একটা স্ট্যান্ডার্ড চেহারায় নিয়ে আসার প্রক্রিয়াটাকেই বলে "টেক্সট নরম্যালাইজেশন" (Text Normalization)।
এটা অনেকটা রান্নার আগে সবজি কেটেকুটে ধুয়ে রেডি করার মতো। আপনি বাজার থেকে আলু, পটল, বেগুন যেভাবে আনেন, সেভাবেই তো আর কড়াইতে ঢেলে দেন না। আপনি সেগুলোকে ধুয়ে, ছিলে তারপর একইরকম মাপে কাটেন। টেক্সট নরম্যালাইজেশন হলো ভাষার জন্য সেই "রান্নার প্রস্তুতি"।
তাহলে দেখি এই প্রস্তুতিতে কী কী ধাপ থাকে।
ধাপ ১: সব এক মাপে আনা (Case Folding)
প্রথম কাজ হলো লাইব্রেরির সেই বইগুলোর নামের মতো সব লেখাকে এক চেহারায় আনা। সবচেয়ে সহজ উপায় হলো, বাক্যের সব শব্দকে ছোট হাতের অক্ষরে (lowercase) নিয়ে আসা।
যেমন:
"Dhaka is the capital of Bangladesh."
নরম্যালাইজড: "dhaka is the capital of bangladesh."
এতে কম্পিউটারের অনেক সুবিধা হলো। এখন তার কাছে "Dhaka", "dhaka" বা "DHAKA" সবই এক। তার ডিকশনারির আকার অনেক কমে গেলো।
ধাপ ২: আবর্জনা পরিষ্কার (Punctuation Removal)
পরের ধাপে আসে যতিচিহ্ন বা বিরাম চিহ্ন (Punctuation)। যেমন: দাঁড়ি, কমা, সেমিকোলন, প্রশ্নবোধক চিহ্ন মুছে ফেলা।
"বন্ধু, তুমি কি ভালো আছো?"
নরম্যালাইজড: "বন্ধু তুমি কি ভালো আছো"
বেশিরভাগ সময়, বাক্যের মূল ভাব বুঝতে এই চিহ্নগুলো দরকার হয় না। তাই কম্পিউটার এগুলোকে ময়লার মতো ফেলে দেয়।
অবশ্য, কখনো কখনো এই চিহ্নগুলো জরুরি। যেমন "কিরে !" আর "কিরে ?" এর আবেগ এক নয়। কিন্তু বেশিরভাগ সময় এগুলো বাদ দিলেই কম্পিউটারের বুঝতে সুবিধা হয়।
ধাপ ৩: অপ্রয়োজনীয় মালপত্র কমানো (Stopword Removal)
ভাষায় এমন অনেক শব্দ আছে যেগুলো আমরা শুধু বাক্যটাকে সুন্দর বা ব্যাকরণগতভাবে সঠিক করার জন্য ব্যবহার করি, কিন্তু সেগুলোর নিজের কোনো ভারি অর্থ নেই।
যেমন:
"আমি ভাতের সাথে মাছ খাই।"
মূল শব্দ: "ভাত", "মাছ", "খাই"
"আমি", "এর", "সাথে" এগুলোকে বলা হয় স্টপওয়ার্ডস (Stopwords)।
বাংলায় এরকম অনেক শব্দ আছে:
- টি
- টা
- গুলো
- এর
- কে
- থেকে
- সাথে
- আমি
- তুমি
- সে
- হয়
- ইত্যাদি
কম্পিউটার যখন লেখার মূল ভাব বোঝার চেষ্টা করে, তখন সে এই স্টপওয়ার্ডগুলো বাদ দেয়।
কারণ এগুলো শুধু ওজন বাড়ায়, কিন্তু কোনো অর্থ যোগ করে না।
ধাপ ৪: শব্দকে তার শেকড়ে ফিরিয়ে আনা
এই ধাপটা সবচেয়ে মজার এবং সবচেয়ে জরুরি।
ধরুন, কম্পিউটার একটা লেখায় এই শব্দগুলো পেলো: "খাই", "খাবো", "খেয়েছিলাম", "খাচ্ছিলাম", "খাওয়া"। আমরা জানি, সবগুলোর মূল ভাব একটাই: "খাওয়া"।
কিন্তু কম্পিউটারের কাছে এগুলো আলাদা শব্দ।
তাই এই সমস্যা সমাধানে আসে দুইটা পদ্ধতি 👇
পদ্ধতি ক (বোকাটে পদ্ধতি): স্টেমিং (Stemming)
স্টেম মানে হলো কাণ্ড। স্টেমিং মানে শব্দের পেছনের লেজটুকু কেটে ফেলা, অনেকটা কসাইয়ের মতো
সে ব্যাকরণ বোঝে না, শুধু নিয়ম মেনে শব্দ কেটে ফেলে:
- "খেয়েছিলাম" → "খাই"
- "পড়েছিলাম" → "পড়ি"
- "খাচ্ছিলাম" → "খা"
- "খাওয়া" → "খা"
ফলাফল? শব্দের শেকড় পাওয়া গেলেও অনেক ভুল হয়। যেমন, "গাড়ি" আর "গাড়ল" → দুটোই কেটে "গাড়" বানিয়ে ফেলবে, যা মজার হলেও ভুল।
পদ্ধতি খ (বুদ্ধিমান পদ্ধতি): লেমাটাইজেশন (Lemmatization)
এটা হলো সার্জনের কাজ সে ভাষার ব্যাকরণ জানে, তার কাছে অভিধান আছে।
যেমন:
- "খেয়েছিলাম" → "খাওয়া"
- "খাচ্ছিলাম" → "খাওয়া"
- "খাবো" → "খাওয়া"
ইংরেজিতে যেমন:
- "ran" → "run"
- "was", "is", "are" → "be"
লেমাটাইজেশন নিখুঁত, কিন্তু সময়সাপেক্ষ কারণ প্রতিটা শব্দের বিশ্লেষণ দরকার হয়।
তো, এই পুরো ধুয়ে মুছে, কেটে ছেঁটে, শেকড় বের করার প্রক্রিয়াই হলো "টেক্সট নরম্যালাইজেশন"।
পরের বার যখন আপনি গুগলে ভুল বানানে "kacchi birani" লিখেও "কাচ্চি বিরিয়ানি" পাবেন,
অথবা ফেসবুক আপনাকে ঠিক আপনার পছন্দের বিষয় দেখাবে তখন বুঝবেন, এর পেছনে এই পরিশ্রমী নরম্যালাইজেশন টাই কাজ করছে।
এই নরম্যালাইজেশন না থাকলে, এআই ভাষার জঞ্জালের মধ্যে কিছুই খুঁজে পেত না।