সরাসরি পর্বে যান
পর্ব ০৩ · ৭৯-এর মধ্যে · মডিউল ১

AI-এর তিন পথ — নিয়মভিত্তিক, পরিসংখ্যানভিত্তিক আর neural

Three Roads to AI — Symbolic Rules, Statistical Learning and Neural Networks

Taught in Bangla, this lesson solves one task, sorting a fictional shop's customer messages into complaints, three ways: hand-written rules, Naive Bayes on word counts and a small MLP, all run in the page with scikit-learn on the same held-out test. It shows rule brittleness and combinatorial explosion, Naive Bayes weights with Laplace smoothing, failures on new phrasing, hybrid guardrails and the bitter lesson debate.

এই পর্বে যা শিখবেন

  • নিয়মভিত্তিক, পরিসংখ্যানভিত্তিক আর neural পথের মূল পার্থক্য: জ্ঞান কে দেয়, আর কোথায় থাকে
  • একটি বার্তা নিয়মের ভেতর দিয়ে আর Naive Bayes-এর শব্দ-ওজনের ভেতর দিয়ে ধাপে ধাপে যেতে দেখা
  • Python-এ একই ডেটায় তিনটি পথ চালিয়ে held-out test-এ accuracy তুলনা করা, আর নতুন ধরনের বাক্যে সৎভাবে যাচাই করা
  • Hybrid পথ, আর ডেটা, ব্যাখ্যা, ভুলের দাম ও সময়ে বদল দেখে পথ বাছার পদ্ধতি
  • Symbolic বনাম connectionist বিতর্কের ইতিহাস আর Sutton-এর “bitter lesson” নিয়ে দুই পক্ষের যুক্তি

১ · একই কাজ, তিনটি পথ — বাজারঘরের অভিযোগ বাছাই

“বাজারঘর” এই কোর্সের কাল্পনিক অনলাইন দোকান। প্রতিদিন গ্রাহকেরা Facebook page আর app-এ বার্তা পাঠান। কেউ লেখেন “order dam koto?”, কেউ লেখেন “parcel bhanga chilo”. Customer care-এ মানুষ কম, তাই দোকান চায় অভিযোগগুলো আগে চোখে পড়ুক। কাজটি তাই সরল একটি classification: প্রতিটি বার্তাকে ১ (অভিযোগ) বা ০ (অভিযোগ নয়) বলা।

এই কাজটি AI-এর তিনটি বড় পথে করা যায়। পার্থক্য বোঝার সবচেয়ে সহজ প্রশ্ন হলো: “অভিযোগ কাকে বলে”, এই জ্ঞানটি কে দিচ্ছে, আর সেটি কোথায় জমা থাকছে?

পরীক্ষার খাতা দেখার কথা ভাবুন। প্রথম শিক্ষক একটি উত্তরমালা লিখে রাখেন: “এই তিনটি শব্দ থাকলে পূর্ণ নম্বর।” দ্বিতীয় শিক্ষক আগের বছরের শত শত দেখা খাতা থেকে হিসাব করেছেন কোন শব্দ থাকলে সাধারণত ভালো নম্বর আসে। তৃতীয় শিক্ষক এত খাতা দেখেছেন যে নিজেও ঠিক বলতে পারেন না কী দেখে বিচার করেন; শুধু জানেন, তাঁর বিচার বেশিরভাগ সময় মেলে। প্রথমজন symbolic, দ্বিতীয়জন পরিসংখ্যানভিত্তিক, তৃতীয়জন neural পথের মতো।

একই বার্তা, তিনটি পথ

Who supplies the knowledge, and where it is stored

নিয়মভিত্তিক, পরিসংখ্যানভিত্তিক আর neural পথে জ্ঞানের উৎস ১ · নিয়মভিত্তিক (symbolic) ২ · পরিসংখ্যানভিত্তিক ML ৩ · Neural (connectionist) মানুষের লেখা নিয়ম if "late" in m: return 1 জ্ঞান: পুরোটাই মানুষের ০/১ শব্দ গোনা feature মানুষ বাছে শব্দের ওজন Naive Bayes ডেটা শেখায় ০/১ শব্দ গোনা কাঁচা input মানুষ দেয় hidden layer ভেতরের feature ডেটা শেখায় ০/১ কমলা = মানুষের নকশা · নীল/বেগুনি = ডেটা থেকে শেখা
ছবি ৩.১ — নিচের দিকে যত নামবেন, মানুষের হাতে লেখা জ্ঞান তত কমে, আর ডেটা থেকে শেখা অংশ তত বাড়ে।

পুরো পর্বের ডেটা: ১২০টি বার্তা, seed দিয়ে তৈরি

সব পাঠক যাতে একই সংখ্যা পান, তাই ডেটা তৈরি হয় seed দেওয়া random দিয়ে। বার্তাগুলো ইংরেজি অক্ষরে লেখা বাংলা (Banglish), কারণ অনেক গ্রাহক এভাবেই লেখেন, আর এতে শব্দ ভাগ করাও সহজ থাকে। বাংলা লিপির লেখা ভাগ করার নিজস্ব জটিলতা আছে; সেটি পর্ব ৬৭ (বাংলা লেখার ডেটা — tokenization, TF-IDF আর একটি classifier)-এ আসবে। প্রতিটি বার্তার একটি label আছে: ১ মানে অভিযোগ, ০ মানে নয়।

প্রথম block-এ ডেটা তৈরি হয়, আর পথ ১-এর নিয়মটিও লেখা হয়। নিয়মটি ছয়টি চাবি-শব্দ খোঁজে; কোনো একটি পেলেই “অভিযোগ”। এই নিয়ম লেখা হয়েছে কয়েকটি বার্তা চোখে দেখে, যেমন বাস্তবে একজন কর্মী লিখতেন। এই পাতার Python চলে আপনার ব্রাউজারেই, Pyodide দিয়ে। পরের block-গুলোতে scikit-learn লাগবে; প্রথমবার সেটি load হতে প্রায় দশ সেকেন্ড লাগতে পারে, পরে দ্রুত চলে।

import random
rng = random.Random(42)
who = ["", "bhai ", "apu ", "please "]
thing = ["order", "parcel", "product", "delivery"]
bad = ["ashe nai", "late hoyeche", "bhanga chilo", "bhul item dise",
       "noshto hoye geche", "ekhono pai nai", "size mele nai",
       "taka ferot chai", "refund dite hobe", "khub kharap"]
good = ["dhonnobad", "valo laglo", "sundor packing", "abar kinbo",
        "dam koto?", "stock ache?", "kobe pabo?", "cash on delivery hobe?",
        "late holeo somossa nai", "kharap na, valo"]
msgs, labels = [], []
for i in range(120):
    y = i % 2                      # 1 = অভিযোগ, 0 = অভিযোগ নয়
    msgs.append(f"{rng.choice(who)}{rng.choice(thing)} {rng.choice(bad if y else good)}")
    labels.append(y)

# পথ ১: মানুষের লেখা নিয়ম
KEYWORDS = ["ashe nai", "late", "bhanga", "bhul", "refund", "kharap"]
def rule(msg):
    m = msg.lower()
    for kw in KEYWORDS:
        if kw in m:
            return 1               # কোনো চাবি-শব্দ মিলল: অভিযোগ
    return 0                       # কিছুই মেলেনি: অভিযোগ নয়

print("মোট বার্তা:", len(msgs), "| অভিযোগ:", sum(labels))
for m, y in list(zip(msgs, labels))[:6]:
    print(f"label={y} rule={rule(m)}  {m}")

Pyodide-এ আসল run-এর আউটপুটের শুরু: মোট বার্তা: 120 | অভিযোগ: 60. অর্ধেক বার্তা অভিযোগ, অর্ধেক নয়, কারণ i % 2 পালা করে label দেয়। প্রথম ছয়টি সারির তৃতীয়টি দেখুন: label=0 rule=1 order kharap na, valo. গ্রাহক বলছেন “খারাপ না, ভালো”, অথচ নিয়ম “kharap” শব্দ দেখেই অভিযোগ বলে দিয়েছে। ডেটা দেখার প্রথম মিনিটেই নিয়মভিত্তিক পথের একটি দুর্বলতা চোখে পড়ল: শব্দ মেলানো অর্থ বোঝা নয়।

এই ডেটা ছোট আর টেমপ্লেট থেকে বানানো। আসল গ্রাহক-বার্তা অনেক বেশি এলোমেলো: বানান ভুল, বাংলা-ইংরেজি মেশানো, emoji. তাই এখানকার accuracy সংখ্যাগুলো শুধু তিন পথের আচরণ দেখানোর জন্য; বাস্তব কাজে কোন পথ কত ভালো করবে, তার প্রমাণ নয়।

২ · পথ ১: নিয়মভিত্তিক বা symbolic AI

Symbolic AI-তে জ্ঞান লেখা থাকে প্রতীক আর নিয়মে, যেমন “যদি বার্তায় refund থাকে, তাহলে অভিযোগ।” কম্পিউটার সেই নিয়ম যুক্তির ধাপ মেনে প্রয়োগ করে। আমাদের rule() ফাংশন একটি ছোট rule-based system. বড় আকারে এর রূপ হলো expert system: ১৯৭০ আর ৮০-এর দশকে ডাক্তারি রোগনির্ণয় বা কম্পিউটারের যন্ত্রাংশ সাজানোর জন্য শত শত, এমনকি হাজার হাজার নিয়ম লেখা হয়েছিল। কীভাবে এমন নিয়ম থেকে যুক্তি টানা হয় (forward আর backward chaining), সেটি পর্ব ৪৭ (Rule-based আর expert system)-এ বিস্তারিত আসবে; যুক্তির ভিত্তি পর্ব ৪৫ (Propositional logic)-এ।

এবার একটি নতুন বার্তা নিয়মের ভেতর দিয়ে পাঠাই। গ্রাহক লিখেছেন jinish ta ekhono hate pai ni, মানে “জিনিসটা এখনো হাতে পাইনি।” এটি স্পষ্ট অভিযোগ। “পরে” চেপে দেখুন নিয়ম কী করে।

1def rule(msg):2    m = msg.lower()3    for kw in KEYWORDS:4        if kw in m:5            return 16    return 0
মান (Watch)
m
kw
kw in m
  1. ছোট হাতের অক্ষরে বদল। lower() চালানো হলো, যাতে “Late” আর “late” একই ধরা হয়। বার্তায় এমনিতেই বড় হাতের অক্ষর নেই, তাই m একই থাকল।
  2. প্রথম চাবি-শব্দ “ashe nai”. বার্তায় “ashe” শব্দটাই নেই, তাই False. গ্রাহক একই কথা অন্য শব্দে বলেছেন।
  3. “late”. বার্তায় “hate” আছে, যার শেষ তিন অক্ষর মেলে, কিন্তু পুরো “late” নেই। তাই False. খেয়াল করুন, substring মেলানো কত সূক্ষ্ম: “hate”-এর জায়গায় “plate” থাকলে এখানে True হয়ে যেত।
  4. “bhanga”. জিনিস ভাঙার কোনো কথা নেই, False.
  5. “bhul”. ভুল জিনিসের কথাও নেই, False.
  6. “refund”. টাকা ফেরতও চাননি, False.
  7. “kharap”. শেষ চাবি-শব্দও মেলেনি, False. ছয়টি নিয়মের একটিও এই বাক্যের জন্য লেখা হয়নি।
  8. ফল ০, অথচ সঠিক উত্তর ১। নিয়ম কোনো দ্বিধা ছাড়াই “অভিযোগ নয়” বলল। এই ধরনের ভুলের নাম brittleness বা ভঙ্গুরতা: যে বাক্য কেউ আগে ভাবেনি, সেখানে নিয়ম আস্তে আস্তে খারাপ হয় না, সরাসরি ভেঙে পড়ে। তবে ভালো দিকও আছে: কেন ০ এলো, তা আমরা লাইন ধরে ধরে দেখাতে পারলাম।

নিয়মের শক্তি

  • ব্যাখ্যা করা যায়: প্রতিটি সিদ্ধান্তের পেছনে কোন নিয়ম কাজ করল, তা হুবহু দেখানো যায়। ব্যাংকের ঋণ বাতিল বা করের হিসাবের মতো জায়গায় এই explainability খুব দামি।
  • ডেটা লাগে না: প্রথম দিনেই চালু করা যায়, label করা হাজার উদাহরণের অপেক্ষা ছাড়াই।
  • নিখুঁত যেখানে নিয়ম নিখুঁত: “৳৫০০০-এর বেশি refund মানেই ম্যানেজারের অনুমোদন”, এই নিয়মে সম্ভাবনার কোনো জায়গা নেই, থাকা উচিতও নয়।
  • সহজে বদলানো যায়: নীতি বদলালে একটি লাইন বদলান; নতুন করে training লাগে না।

নিয়মের দুর্বলতা: ভঙ্গুরতা, বিস্ফোরণ আর জ্ঞান জোগাড়ের বাধা

প্রথম দুর্বলতা আমরা দেখলাম: না-ভাবা বাক্যে ভেঙে পড়া। দ্বিতীয়টি আরও গভীর। ধরুন বাজারঘর জানতে চায় একটি delivery দেরি হবে কি না, আর সেটি নিয়ম দিয়ে লিখতে চায়। জেলা, আবহাওয়া, দিনের ধরন, courier, দূরত্ব আর পেমেন্টের ধরন মিলিয়ে প্রতিটি সমন্বয়ের জন্য সিদ্ধান্ত লিখতে হলে কয়টি সারি লাগবে? নিচের block হিসাব করে, আর ছোট একটি অংশ সত্যিই গুনেও দেখায়। এটি আগের block-এর ওপর নির্ভর করে না।

from itertools import product
from math import comb

# delivery দেরি হবে কি না: প্রতিটি শর্ত কয়টি মান নিতে পারে
conditions = {"district": 64, "weather": 3, "day_type": 3,
              "courier": 4, "distance": 3, "payment": 2}

print(f"{'condition':<10}{'values':>7}{'table rows':>12}")
rows = 1
for name, k in conditions.items():
    rows *= k
    print(f"{name:<10}{k:>7}{rows:>12,}")

# ছোট অংশটি সত্যিই গুনে দেখা
small = list(product(["rod", "brishti", "jhor"],
                     ["normal", "friday", "pre_eid"]))
print("\nweather x day_type:", len(small), "combination, যেমন", small[:2])

print("\nহ্যাঁ/না ধরনের n টি শর্ত হলে সারি = 2**n")
for n in [5, 10, 20, 30]:
    print(f"  n = {n:>2} -> {2**n:>13,}")

print("\nm টি নিয়মের মধ্যে জোড়ায় জোড়ায় সংঘাত যাচাই = m(m-1)/2")
for m in [10, 100, 1000]:
    print(f"  m = {m:>4} -> {comb(m, 2):>7,}")

আসল run-এ শেষ সারি payment 2 13,824: মাত্র ছয়টি শর্তেই পূর্ণ সিদ্ধান্ত-টেবিলে ১৩,৮২৪টি সারি। হিসাবটি গুণফল: 64 × 3 × 3 × 4 × 3 × 2 = 13,824. product() দিয়ে আবহাওয়া আর দিনের ধরনের অংশটি সত্যিই গুনলে 9টি সমন্বয় আসে (3 × 3), যেমন ('rod', 'normal'). হ্যাঁ/না ধরনের শর্তে বৃদ্ধি আরও স্পষ্ট: n = 30 হলে 1,073,741,824 সারি। একে বলে combinatorial explosion; বৃদ্ধির এই হার নিয়ে DSA কোর্সের Big-O পর্বে আরও আছে। শেষ অংশটি আরেক সমস্যা: ১০০০টি নিয়ম থাকলে কোন দুটি পরস্পরবিরোধী, তা জোড়ায় জোড়ায় দেখতে 499,500টি জোড়া।

বাস্তবে কেউ পুরো টেবিল লেখে না; বেশিরভাগ সারি “default” নিয়মে পড়ে। কিন্তু তাতেই সমস্যা লুকিয়ে যায়: কোন সারিগুলো default-এ ভুল উত্তর পাচ্ছে, তা কেউ জানে না। আর তৃতীয় দুর্বলতা মানুষের দিক থেকে। নিয়ম লিখতে হলে বিশেষজ্ঞকে বলতে হয় তিনি কীভাবে সিদ্ধান্ত নেন। অভিজ্ঞ courier ম্যানেজার জানেন কোন রুটে বৃষ্টির দিনে দেরি হয়, কিন্তু সেটি নিখুঁত নিয়মে বলতে পারেন না। expert system-এর যুগে এই সমস্যার নাম হয় knowledge acquisition bottleneck: জ্ঞান বের করে লেখাই সবচেয়ে ধীর, সবচেয়ে ব্যয়বহুল ধাপ।

১৯৭০-এর দশকে Stanford-এ তৈরি MYCIN রক্তের সংক্রমণের জন্য antibiotic সুপারিশ করত, কয়েকশো নিয়ম দিয়ে। প্রকাশিত মূল্যায়নে এর সুপারিশ বিশেষজ্ঞদের সঙ্গে তুলনীয় পাওয়া গিয়েছিল বলে উল্লেখ আছে, তবু এটি নিয়মিত হাসপাতালের কাজে ব্যবহৃত হয়নি; দায়, যাচাই আর তখনকার কম্পিউটার ব্যবস্থার মতো কারণ বলা হয়। ১৯৮০-এর দশকে Digital Equipment Corporation-এর XCON (R1) কম্পিউটারের যন্ত্রাংশ সাজাত, আর সময়ের সঙ্গে এর নিয়ম কয়েক হাজারে পৌঁছায়; সেগুলো রক্ষণাবেক্ষণ করাই হয়ে ওঠে বড় কাজ। “Knowledge acquisition bottleneck” কথাটি সাধারণত Edward Feigenbaum-এর সঙ্গে যুক্ত করা হয়।

৩ · পথ ২: পরিসংখ্যানভিত্তিক machine learning

দ্বিতীয় পথে আমরা নিয়ম লিখি না। তার বদলে ঠিক করি বার্তার কোন feature মাপা হবে, আর একটি model সেই feature থেকে ডেটা দেখে নিজের সংখ্যা ঠিক করে। এটাই machine learning-এর মূল চিন্তা। এখানে feature খুব সরল: bag of words, অর্থাৎ প্রতিটি শব্দ বার্তায় কতবার আছে। শব্দের ক্রম হারিয়ে যায়; “valo na” আর “na valo” একই দেখায়। scikit-learn-এর CountVectorizer এই গণনা করে।

Model হিসেবে নিচ্ছি Naive Bayes. এর চিন্তা আবহাওয়ার পূর্বাভাসের মতো। আকাশে কালো মেঘ দেখলে আপনি জানেন অতীতে এমন দিনে প্রায়ই বৃষ্টি হয়েছে; প্রতিটি লক্ষণ বিশ্বাসকে একটু এদিক বা ওদিকে ঠেলে। Naive Bayes প্রতিটি শব্দকে এমন একটি লক্ষণ ধরে। “Naive” বা সরল, কারণ এটি ধরে নেয় শ্রেণি জানা থাকলে শব্দগুলো একে অপরের থেকে স্বাধীন, যা ভাষায় প্রায় কখনো সত্য নয়। তবু এই সরল ধারণা অনেক কাজে ভালো চলে। Bayes-এর উপপাদ্য পর্ব ৫০-এ আর Naive Bayes-এর পুরো গণিত পর্ব ৫১ (Naive Bayes — বাংলা SMS-কে spam না ham বলা)-এ আসবে; এখানে শুধু হিসাবটি কীভাবে চলে, সেটুকু।

একটি শব্দের ওজন কীভাবে আসে

Training-এর ৮৪টি বার্তায় (পরের অংশে কীভাবে ভাগ হলো দেখবেন) অভিযোগ-শ্রেণিতে মোট 187টি শব্দ আছে, অভিযোগ-নয় শ্রেণিতে 171টি, আর আলাদা শব্দ (vocabulary) 49টি। “ekhono” শব্দটি অভিযোগে ৭ বার, অভিযোগ-নয়-তে একবারও নেই। শূন্য গণনার শব্দ যাতে পুরো হিসাব শূন্য না করে দেয়, তাই প্রতিটি গণনায় ১ যোগ করা হয়; একে বলে Laplace smoothing:

P(w | অভিযোগ) = (n১(w) + 1) / (N১ + V)

এখানে n১(w) হলো অভিযোগ-শ্রেণিতে শব্দটি কতবার এসেছে, N১ সেই শ্রেণির মোট শব্দ, আর V মোট আলাদা শব্দ। তাহলে P(ekhono | অভিযোগ) = (7 + 1) / (187 + 49) = 8/236 ≈ 0.0339, আর P(ekhono | নয়) = (0 + 1) / (171 + 49) = 1/220 ≈ 0.00455. খুব ছোট সংখ্যা গুণ করতে করতে হিসাব ঝাপসা হয়ে যায়, তাই log probability নিয়ে যোগ করা হয়। একটি শব্দের “ওজন” হলো দুই শ্রেণির log-এর পার্থক্য:

ওজন(ekhono) = ln(8/236) − ln(1/220) = ln(7.458) ≈ +2.009

ধনাত্মক ওজন মানে শব্দটি অভিযোগের দিকে ঠেলে, ঋণাত্মক মানে উল্টো দিকে। সব শব্দের ওজন যোগ করে, শুরুতে দুই শ্রেণির অনুপাতের log (prior) যোগ করে যে score আসে, তাকে sigmoid, অর্থাৎ 1/(1 + e−score), দিয়ে ০ থেকে ১-এর সম্ভাবনায় আনা যায়। এবার নিয়মে হেরে যাওয়া সেই একই বার্তা এই model-এ পাঠাই। সংখ্যাগুলো পরের block-এ fit হওয়া model থেকেই নেওয়া।

1tokens = ["jinish","ta","ekhono",2          "hate","pai","ni"]3score = prior    # 42 বনাম 42: 0.04jinish  -> অচেনা, বাদ5ta      -> অচেনা, বাদ6ekhono  -> +2.0097hate    -> অচেনা, বাদ8pai     -> +2.0099ni      -> অচেনা, বাদ10p = 1/(1+exp(-score))
হিসাব (Watch)
শব্দ
গণনা (১ / ০)
ওজন
score
  1. শব্দে ভাগ আর শুরুর score. CountVectorizer বার্তাটি ছয়টি শব্দে ভাগ করল। Training-এ দুই শ্রেণিতে ৪২টি করে বার্তা, তাই prior-এর log-পার্থক্য ln(42/42) = 0, score শুরু হলো 0.000 থেকে।
  2. “jinish”. Training-এর ৪৯টি শব্দের মধ্যে এটি নেই। Model অচেনা শব্দ পুরোপুরি উপেক্ষা করে, তাই ওজন 0, score বদলাল না।
  3. “ta”. এটিও অচেনা, বাদ। score এখনো 0.000.
  4. “ekhono”. অভিযোগে ৭ বার, অভিযোগ-নয়-তে ০ বার। আগের হিসাবমতো ওজন +2.009, score হলো 2.009. নিয়মে এই শব্দের কোনো জায়গা ছিল না, কিন্তু ডেটা থেকে model শিখেছে শব্দটি অভিযোগে আসে।
  5. “hate”. অচেনা, বাদ। score 2.009-ই থাকল।
  6. “pai”. এটিও অভিযোগে ৭ বার, অন্য শ্রেণিতে ০ বার, ঠিক একই ওজন +2.009. score হলো 4.018.
  7. “ni”. Training-এ ছিল “nai”, “ni” নয়; তাই অচেনা। মানুষের কাছে দুটো একই অর্থ, model-এর কাছে সম্পূর্ণ আলাদা চিহ্ন।
  8. সম্ভাবনায় রূপান্তর। p = 1/(1 + e−4.018) ≈ 0.982. Model বলল ৯৮% সম্ভাবনায় অভিযোগ, যা সঠিক। কিন্তু খেয়াল করুন, ছয়টি শব্দের মাত্র দুটি চিনে এই সিদ্ধান্ত এসেছে। এটি “বোঝা” নয়, কয়েকটি শব্দের পরিসংখ্যান।

Naive Bayes-এর পাশাপাশি এই পথের আরেকটি পরিচিত model হলো logistic regression: সেটিও প্রতিটি শব্দের একটি ওজন শেখে, তবে ওজনগুলো গণনা থেকে সরাসরি না নিয়ে একসাথে এমনভাবে ঠিক করে যাতে training-এর ভুল কমে। পর্ব ৫৯-এ সেটি আসবে।

এই পথের শক্তি

নিয়ম লিখতে হয় না, ডেটা থেকে আসে। কিছুটা নতুন বাক্যেও কাজ করে, কারণ এক শব্দ না মিললেও অন্য শব্দ সাহায্য করে। ছোট ডেটায় দ্রুত train হয়, সাধারণ ল্যাপটপেই চলে। ওজনগুলো পড়া যায়: কোন শব্দ কোন দিকে ঠেলছে, তা দেখানো সম্ভব। ফল একটি সম্ভাবনা, শুধু হ্যাঁ/না নয়।

এই পথের দুর্বলতা

Label করা ডেটা লাগে, আর ডেটার ভুল বা পক্ষপাত model-এ ঢোকে। Feature এখনো মানুষ বাছে; ভুল feature বাছলে ভালো model-ও কিছু করতে পারে না। Bag of words শব্দের ক্রম আর না-বোধক অর্থ ধরে না। অচেনা শব্দ পুরো উপেক্ষা হয়, আর ব্যবহারের ভাষা বদলালে model পুরোনো হয়ে যায়।

৪ · পথ ৩: neural বা connectionist

তৃতীয় পথের নাম connectionism: অনেক সরল গণনা-একক, যাদের মধ্যে সংযোগের শক্তি (ওজন) ডেটা থেকে শেখা হয়। এর প্রধান রূপ neural network. নামে মস্তিষ্কের ছোঁয়া থাকলেও আধুনিক neural network মূলত গুণ, যোগ আর একটি সরল বাঁকানো ফাংশনের স্তর; মস্তিষ্কের নিখুঁত নকল একে বলা যায় না।

পথ ২-এর সঙ্গে আসল পার্থক্য কোথায়? Naive Bayes প্রতিটি শব্দকে আলাদা লক্ষণ ধরে। Neural network-এর মাঝখানে থাকে hidden layer, যার প্রতিটি একক অনেক শব্দের গণনা মিশিয়ে নিজের একটি নতুন সংখ্যা বানায়। Training-এর পর কোনো একক হয়তো “পাইনি/আসেনি ধরনের কথা”-য় বেশি সাড়া দেয়, কোনোটি “প্রশংসা”-য়। এই নতুন সংখ্যাগুলো কেউ বলে দেয়নি; network নিজে বানিয়েছে। একেই বলে representation learning, আর এটিই neural পথের মূল শক্তি। তবে কোন একক ঠিক কী ধরছে, তা মানুষের ভাষায় সবসময় পরিষ্কার নয়।

আমাদের network ছোট: scikit-learn-এর MLPClassifier, একটি hidden layer-এ ৮টি একক। এটি একটি MLP.

৪৯টি শব্দ-গণনা, ৮টি hidden একক, ১টি সম্ভাবনা

A one-hidden-layer MLP and where its 409 learned numbers live

একটি hidden layer-এর ছোট MLP ekhonopaivalonai…৪৯ ⋮ ৮টি একক p(অভিযোগ) input hidden output 49×8 + 8 + 8×1 + 1 = 409টি শেখা সংখ্যা
ছবি ৩.২ — প্রতিটি রেখা একটি ওজন। ৪৯×৮টি input-থেকে-hidden ওজন, ৮টি hidden bias, ৮টি hidden-থেকে-output ওজন আর ১টি output bias.

এই ৪০৯টি সংখ্যাই network-এর parameter. তুলনায় Naive Bayes-এর শেখা সংখ্যা ১০০টি (দুই শ্রেণি × ৪৯টি শব্দের log-সম্ভাবনা, আর দুটি prior), আর নিয়মের শেখা সংখ্যা শূন্য। আধুনিক বড় language model-এ এমন সংখ্যা শত কোটির ঘরে। কীভাবে ওজনগুলো ধাপে ধাপে ঠিক হয় (gradient descent আর backpropagation), তা পর্ব ৩৪ আর পর্ব ৬৮ (Neural network-এর ধারণা — perceptron থেকে ছোট network, NumPy দিয়ে)-এ আসবে।

Neural পথের শক্তি

Feature হাতে বানাতে হয় না; ছবি, শব্দ আর ভাষার মতো কাঁচা ডেটা থেকে নিজের representation শেখে। তাই ছবি চেনা, কথা থেকে লেখা, অনুবাদের মতো “perception” আর ভাষার কাজে গত দশকে এটি সবচেয়ে সফল পথ। ডেটা আর computation বাড়ালে সাধারণত ফলও ভালো হতে থাকে, যা অন্য পথে প্রায়ই এক জায়গায় থেমে যায়।

Neural পথের দুর্বলতা

অনেক ডেটা লাগে; ছোট ডেটায় সরল model-এর চেয়ে ভালো না-ও করতে পারে। কেন একটি সিদ্ধান্ত এলো, তা ব্যাখ্যা করা কঠিন (opaque). বড় network-এ computation আর বিদ্যুতের খরচ বিশাল। আর নিশ্চিত ভঙ্গিতে ভুল উত্তর দিতে পারে, যা ধরা মানুষের জন্য কঠিন।

৫ · তিন পথ পাশাপাশি — একই held-out test-এ ফল

তুলনা ন্যায্য হতে হলে সব পথকে একই পরীক্ষায় বসাতে হয়, আর সেই পরীক্ষার প্রশ্ন কেউ আগে দেখবে না। তাই ১২০টি বার্তা থেকে ৩০% অর্থাৎ ৩৬টি আলাদা করে রাখা হলো: এটি test set. বাকি ৮৪টি training set; Naive Bayes আর MLP শুধু এগুলোই দেখে। stratify=labels দুই ভাগেই অভিযোগ আর অভিযোগ-নয়-এর অনুপাত সমান রাখে। মাপকাঠি accuracy: কত ভাগ উত্তর ঠিক। Accuracy-র সীমা আর অন্য metric পর্ব ৬০-এ আসবে; train আর test ভাগের ফাঁদ পর্ব ৫৬-এ।

from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.neural_network import MLPClassifier
from sklearn.pipeline import make_pipeline
from sklearn.metrics import accuracy_score

Xtr, Xte, ytr, yte = train_test_split(
    msgs, labels, test_size=0.3, random_state=42, stratify=labels)

# পথ ২: শব্দ গোনা (feature) + Naive Bayes
nb = make_pipeline(CountVectorizer(), MultinomialNB()).fit(Xtr, ytr)
# পথ ৩: একই শব্দ-গণনা থেকে ৮টি hidden unit-এর ছোট neural network
mlp = make_pipeline(CountVectorizer(),
                    MLPClassifier(hidden_layer_sizes=(8,), solver="lbfgs",
                                  max_iter=500, random_state=42)).fit(Xtr, ytr)

n_nb = nb[1].feature_log_prob_.size + nb[1].class_log_prior_.size
n_mlp = sum(w.size for w in mlp[1].coefs_ + mlp[1].intercepts_)
rows = [("rules", [rule(m) for m in Xte], "0 (6 keywords)"),
        ("naive bayes", nb.predict(Xte), n_nb),
        ("mlp (8 hidden)", mlp.predict(Xte), n_mlp)]

print(f"train = {len(Xtr)}, test = {len(Xte)}, vocabulary = {len(nb[0].vocabulary_)}")
print(f"{'method':<15}{'test acc':>9}  learned numbers")
for name, pred, n in rows:
    print(f"{name:<15}{accuracy_score(yte, pred):>9.3f}  {n}")

miss = [m for m, y in zip(Xte, yte) if rule(m) != y]
print("\nrule-এর ভুল", len(miss), "টি, যেমন:")
for m in miss[:4]:
    print("  ", m)

Pyodide-এ আসল run (scikit-learn 1.8.0)-এর মূল টেবিল:

method          test acc  learned numbers
rules              0.694  0 (6 keywords)
naive bayes        0.972  100
mlp (8 hidden)     1.000  409

নিয়ম ৩৬টির মধ্যে ১১টিতে ভুল করেছে (25/36 ≈ 0.694). ভুলের তালিকায় দুই ধরন: parcel kharap na, valo-এর মতো বার্তায় ভুল করে অভিযোগ বলেছে (ভুল ধনাত্মক), আর bhai order taka ferot chai-এর মতো বার্তায় অভিযোগ ধরতে পারেনি, কারণ “ferot” কোনো চাবি-শব্দ নয় (ভুল ঋণাত্মক)। Naive Bayes একটি ভুল করেছে (35/36), MLP কোনোটিই নয়।

এই ফল থেকে “neural সবচেয়ে ভালো” সিদ্ধান্ত টানবেন না। পার্থক্যটি মাত্র একটি বার্তার, ৩৬টির test-এ একটি বার্তা মানে প্রায় ৩ শতাংশ। আর test-এর বার্তা training-এর মতো একই টেমপ্লেট থেকে আসা, তাই শেখা model-এর কাছে এটি সহজ পরীক্ষা। এটি একটি run-এর ফল, সাধারণ সত্য নয়।

প্রশ্ননিয়মভিত্তিকপরিসংখ্যানভিত্তিক MLNeural
জ্ঞান কে দেয়মানুষ, নিয়ম লিখেমানুষ feature বাছে, ডেটা ওজন দেয়ডেটা, feature-সহ
Label করা ডেটালাগে না (যাচাইয়ে লাগে)শ’খানেক থেকে কয়েক হাজারসাধারণত অনেক বেশি
সিদ্ধান্তের ব্যাখ্যালাইন ধরে দেখানো যায়ওজন পড়া যায়কঠিন, আলাদা টুল লাগে
না-ভাবা ইনপুটেহঠাৎ ভেঙে পড়েকিছুটা টেকেপ্রায়ই ভালো টেকে, তবে নিশ্চিত ভঙ্গিতে ভুলও করে
Computationখুব কমকমছোট থেকে বিশাল
নীতি বদলালেনিয়ম বদলাননতুন label, আবার trainনতুন ডেটা, আবার train
সাধারণ উদাহরণকর হিসাব, যাচাইয়ের নিয়মspam filter, ঝুঁকির scoreছবি চেনা, অনুবাদ, chatbot

৬ · নতুন ধরনের বাক্যে কে টেকে — সৎ পরীক্ষা

আসল পরীক্ষা হলো এমন বাক্য, যা কোনো টেমপ্লেটে নেই। নতুন উদাহরণে ঠিক উত্তর দেওয়ার ক্ষমতাকে বলে generalization. নিচে পাঁচটি নতুন বার্তা আছে, যার প্রতিটির সঠিক label আমরা নিজে ঠিক করেছি। আগের দুই block যদি না চালিয়ে থাকেন, এটি চালালে সেগুলো আগে নিজে থেকেই চলবে।

new = ["jinish ta ekhono hate pai ni",        # অভিযোগ, নতুন শব্দে
       "3 din hoye gelo, kono khobor nai",     # অভিযোগ
       "packet chhera chilo, valo na",         # অভিযোগ, কিন্তু "valo" আছে
       "late hobe na to?",                     # প্রশ্ন, অভিযোগ নয়
       "delivery boy er babohar valo chilo"]   # প্রশংসা
truth = [1, 1, 1, 0, 0]

print(f"{'message':<35}true rule  nb  p(nb) mlp")
for m, t in zip(new, truth):
    p = nb.predict_proba([m])[0, 1]
    print(f"{m:<35}{t:>4}{rule(m):>5}{nb.predict([m])[0]:>4}{p:>6.2f}"
          f"{mlp.predict([m])[0]:>4}")

known = [w for w in nb[0].build_analyzer()(new[0]) if w in nb[0].vocabulary_]
print("\nপ্রথম বার্তার যে শব্দ model চেনে:", known)

আসল run-এর টেবিল:

message                            true rule  nb  p(nb) mlp
jinish ta ekhono hate pai ni          1    0   1  0.98   1
3 din hoye gelo, kono khobor nai      1    0   1  0.95   1
packet chhera chilo, valo na          1    0   0  0.09   0
late hobe na to?                      0    1   0  0.35   0
delivery boy er babohar valo chilo    0    0   0  0.13   0

পাঁচটির মধ্যে নিয়ম ঠিক বলেছে একটিতে (শেষটি, তা-ও কোনো চাবি-শব্দ না পাওয়ার কারণে), আর Naive Bayes ও MLP দুটোই চারটিতে। কিন্তু ঠিক উত্তরের কারণ খুঁটিয়ে দেখুন। দ্বিতীয় বার্তায় Naive Bayes ঠিক বলেছে প্রধানত “nai” শব্দের জন্য, কারণ training-এ “nai” অভিযোগে ১৫ বার, অন্য দিকে ২ বার। কারণটি অগভীর; “kono somossa nai” লিখলে একই শব্দ উল্টো ফল দিতে পারে।

তৃতীয় বার্তায় দুটি শেখা model-ই ভুল করেছে। Training-এ “valo” শুধু অভিযোগ-নয় বার্তায় এসেছে, আর “na” এসেছে কেবল “kharap na, valo”-তে, যা অভিযোগ নয়। তাই model শিখেছে “valo” আর “na” দুটোই “অভিযোগ নয়”-এর লক্ষণ। “valo na” মানে যে উল্টো, এই অর্থ শব্দ-গণনায় নেই। চতুর্থ বার্তায় নিয়ম “late” দেখে ভুল করেছে, শেখা model-গুলো ঠিক বলেছে। প্রথম বার্তার ছয়টি শব্দের মধ্যে model চেনে মাত্র দুটি: ['ekhono', 'pai'].

মূল ধারণা

Training-এর মতো ডেটায় উচ্চ accuracy মানেই নতুন ডেটায় ভালো ফল নয়। ব্যবহারের সময়ের ডেটা training থেকে আলাদা হয়ে গেলে তাকে বলে distribution shift; ঈদের মৌসুমে, নতুন courier এলে বা গ্রাহকেরা নতুন ঢঙে লিখলে এটি ঘটে। নিয়ম, পরিসংখ্যান বা neural, কোনো পথই এর থেকে মুক্ত নয়; তফাত শুধু ভুলের ধরন আর পরিমাণে।

৭ · মিশ্র পথ — hybrid AI

বাস্তবের বেশিরভাগ AI সিস্টেম কোনো একটি পথে খাঁটি নয়। তিন পথের শক্তি জুড়ে দুর্বলতা ঢাকার কয়েকটি পরিচিত ধরন:

১. শেখা model-এর চারপাশে নিয়মের guardrail

সবচেয়ে সাধারণ আর সবচেয়ে কাজের ধরন। বাজারঘর শেখা model দিয়ে বার্তা বাছবে, কিন্তু কয়েকটি নিয়ম model-এর ওপরে বসবে: বার্তায় “refund” বা টাকার অঙ্ক থাকলে model যা-ই বলুক, মানুষের কাছে যাবে; model-এর সম্ভাবনা ০.৪ থেকে ০.৬-এর মধ্যে হলে, অর্থাৎ দ্বিধায় থাকলে, মানুষ দেখবে। এই নিয়মগুলোকে বলে guardrail. এখানে নিয়মের কাজ সব বাক্য বোঝা নয়, শুধু কয়েকটি নিশ্চিত, উচ্চ-ঝুঁকির ক্ষেত্র আটকানো, যেখানে নিয়মই সবচেয়ে নির্ভরযোগ্য। LLM-ভিত্তিক সিস্টেমে prompt injection-এর মতো ঝুঁকি আটকাতেও এমন বাইরের নিয়ম ব্যবহার হয়; নিরাপত্তার দিকটি Cybersecurity কোর্সের AI security পর্বে আছে।

২. খুঁজে আনা (retrieval) আর model

একটি language model-এর ভেতরে দোকানের নতুন return-নীতি থাকার কথা নয়। RAG পদ্ধতিতে প্রশ্ন এলে আগে দোকানের নথি থেকে প্রাসঙ্গিক অংশ খুঁজে আনা হয়, তারপর model সেই লেখা দেখে উত্তর বানায়। জ্ঞান থাকে বাইরের নথিতে, যা মানুষ সরাসরি পড়তে আর বদলাতে পারে; model দেয় ভাষার দক্ষতা। এই পদ্ধতির পরিচিত নামটি এসেছে ২০২০ সালের Lewis ও সহকর্মীদের একটি গবেষণাপত্র থেকে। Embedding দিয়ে খোঁজা পর্ব ৬৯-এ, LLM পর্ব ৭০-এ আসবে।

৩. Neuro-symbolic: শেখা আর যুক্তি এক সিস্টেমে

Neuro-symbolic AI শব্দটি দিয়ে বোঝানো হয় এমন সিস্টেম, যেখানে neural অংশ কাঁচা ডেটা থেকে প্রতীক বা প্রস্তাব বের করে, আর symbolic অংশ সেগুলো দিয়ে নিখুঁত যুক্তি বা search চালায়। প্রায়ই উদাহরণ দেওয়া হয় ২০১৬ সালের AlphaGo-র: neural network চাল আর অবস্থান মূল্যায়ন করত, আর Monte Carlo tree search নামের একটি search পদ্ধতি সামনের চাল খুঁজে দেখত। ২০২৪ সালে Google DeepMind-এর AlphaGeometry-তে একটি language model নতুন জ্যামিতিক নির্মাণ প্রস্তাব করত, আর একটি symbolic deduction engine প্রমাণ যাচাই করত। “Neuro-symbolic” শব্দটির সীমা নিয়ে গবেষকদের মধ্যে মতভেদ আছে; কেউ এটিকে ভবিষ্যতের প্রধান পথ মনে করেন, কেউ বলেন বড় neural model নিজেই একসময় এসব শিখবে।

ক্রিকেটের DRS ভাবুন। Ball-tracking অংশটি ক্যামেরার ছবি থেকে বলের পথ অনুমান করে, অর্থাৎ ডেটা থেকে মাপা অংশ। কিন্তু “বল stump-এ লাগছে আর পিচ করেছে লাইনের ভেতরে, তাহলে আউট”, এই সিদ্ধান্ত আসে আইনের লেখা নিয়ম থেকে। আর অনিশ্চয়তা বেশি হলে “umpire’s call”, অর্থাৎ মানুষের সিদ্ধান্ত বহাল। মাপা অংশ, নিয়ম আর মানুষের জন্য জায়গা, তিনটি মিলেই একটি ভালো hybrid.

৮ · কোন সমস্যায় কোন পথ — চারটি প্রশ্ন

“সবচেয়ে আধুনিক পথটাই নিই”, এই ভাবনা প্রায়ই খরচ বাড়ায় আর ঝুঁকি লুকায়। পেশাদারেরা আগে সমস্যাটিকে কয়েকটি প্রশ্নে যাচাই করেন। বাজারঘরের অভিযোগ-বাছাই নিয়ে চারটি প্রশ্ন ধাপে ধাপে দেখুন।

  1. ডেটা আছে?labelled ১২০কম, তবে বাড়ানো যায়
  2. ব্যাখ্যা লাগবে?মাঝারিকেন আগে এলো
  3. ভুলের দাম?অভিযোগ মিস = বেশিrefund-এ আরও বেশি
  4. সময়ে বদলায়?হ্যাঁমৌসুম, নতুন শব্দ
  5. সিদ্ধান্তNB + guardrailমানুষ দ্বিধার ঘরে
  1. প্রশ্ন ১: কত label করা ডেটা আছে, আর আরও জোগাড় করা যায়? ডেটা একদম না থাকলে নিয়ম দিয়ে শুরু ছাড়া উপায় নেই। শ’খানেক থেকে কয়েক হাজার উদাহরণে Naive Bayes বা logistic regression ভালো শুরু। বিশাল ডেটা বা ছবি-শব্দের মতো কাঁচা ডেটায় neural পথ এগিয়ে থাকে। বাজারঘরের আছে ১২০টি, আর customer care-এর পুরোনো বার্তায় আরও label দেওয়া সম্ভব।
  2. প্রশ্ন ২: সিদ্ধান্তের ব্যাখ্যা কতটা জরুরি? ঋণ বাতিল বা চাকরির আবেদন বাছাইয়ে মানুষকে কারণ জানাতে হতে পারে, তাই সেখানে নিয়ম বা সরল model বেশি নিরাপদ। বাজারঘরে বার্তার শুধু ক্রম বদলাচ্ছে, তবু কর্মীরা জানতে চাইবেন কেন একটি বার্তা আগে এলো। Naive Bayes-এর শব্দ-ওজন এখানে যথেষ্ট ব্যাখ্যা দেয়।
  3. প্রশ্ন ৩: কোন ভুলের দাম কত? একটি অভিযোগ মিস হলে রাগী গ্রাহক হারানোর ঝুঁকি; ভুল করে প্রশংসাকে অভিযোগ বললে কর্মীর কয়েক সেকেন্ড নষ্ট। তাই এখানে মিস করা বেশি দামি। আর টাকা ফেরতের বার্তা মিস হলে আরও বেশি, তাই “refund”, “ferot”-এর মতো শব্দে নিয়ম দিয়ে সবসময় মানুষের কাছে পাঠানোর guardrail বসানো যুক্তিযুক্ত।
  4. প্রশ্ন ৪: সমস্যাটি সময়ের সঙ্গে বদলায় কি? গ্রাহকের ভাষা, পণ্য আর মৌসুম বদলায়, তাই হাতে লেখা নিয়মের তালিকা দ্রুত পুরোনো হবে। শেখা model নতুন ডেটায় আবার train করা যায়, তবে নজর রাখতে হবে কখন তার accuracy নামছে। বিপরীতে, করের হার বা আইনের মতো জিনিস বদলালে নিয়মে এক লাইন বদলানোই সহজ।
  5. সিদ্ধান্ত: শেখা model, তার চারপাশে নিয়ম, আর দ্বিধার ঘরে মানুষ। Naive Bayes প্রথম baseline হিসেবে, refund-এ নিয়মের guardrail, ০.৪–০.৬ সম্ভাবনায় মানুষের পর্যালোচনা, আর প্রতি মাসে নতুন label দিয়ে যাচাই। Neural model তখনই, যখন ডেটা অনেক বাড়বে আর সরল model-এর চেয়ে মাপা উন্নতি দেখা যাবে।
পরিস্থিতিযেদিকে ঝোঁকবাজারঘরের উদাহরণ
ডেটা নেই, নিয়ম স্পষ্ট ও স্থিরনিয়মভিত্তিকCash on delivery-র সর্বোচ্চ সীমা যাচাই
মাঝারি টেবিল-ডেটা, ব্যাখ্যা দরকারপরিসংখ্যানভিত্তিক MLকোন order ফেরত আসার ঝুঁকিতে
প্রচুর ছবি, শব্দ বা লেখাNeural (প্রায়ই pretrained)পণ্যের ছবি থেকে ক্যাটাগরি
ভুলের দাম বেশি, কিন্তু ইনপুট এলোমেলোHybrid: model + guardrail + মানুষপ্রতারণামূলক order চিহ্নিত করা

৯ · ইতিহাসের বিতর্ক — symbolic বনাম connectionist, আর “bitter lesson”

এই তিন পথ শুধু প্রকৌশলের বিকল্প নয়; এগুলোর পেছনে বুদ্ধিমত্তা কী, তা নিয়ে কয়েক দশকের বিতর্ক আছে। পুরো ইতিহাস পর্ব ২ (AI-এর ইতিহাস)-এ; এখানে শুধু এই পর্বের প্রশ্নের সঙ্গে যুক্ত অংশটুকু।

১৯৫০-এর দশক: দুই পথ প্রায় একসাথে শুরু। Allen Newell আর Herbert Simon-এর Logic Theorist (১৯৫৫–৫৬) প্রতীক নিয়ে যুক্তি দিয়ে গাণিতিক উপপাদ্য প্রমাণ করত। ১৯৫৮ সালে Frank Rosenblatt perceptron প্রকাশ করেন, যা উদাহরণ থেকে ওজন শেখে। ১৯৬৯: Marvin Minsky আর Seymour Papert-এর বই Perceptrons একস্তরের perceptron-এর গাণিতিক সীমা দেখায়; বইটি neural গবেষণায় অর্থায়ন কমার পেছনে কতটা দায়ী, তা নিয়ে ইতিহাসবিদদের মতভেদ আছে। ১৯৭৬: Newell ও Simon তাঁদের Turing Award বক্তৃতায় “physical symbol system hypothesis” দেন: প্রতীক নিয়ে কাজ করার ব্যবস্থাই সাধারণ বুদ্ধিমত্তার জন্য প্রয়োজনীয় ও যথেষ্ট। ১৯৮০-এর দশক: expert system-এর জোয়ার, তারপর ভাটা। ১৯৮৬ সালে Rumelhart, Hinton আর Williams-এর গবেষণাপত্র আর PDP বইয়ের খণ্ডগুলো backpropagation-কে জনপ্রিয় করে, connectionism ফিরে আসে। ১৯৮৮ সালে Jerry Fodor আর Zenon Pylyshyn পাল্টা যুক্তি দেন যে connectionist model ভাষা আর চিন্তার নিয়মবদ্ধ গঠন (systematicity) ব্যাখ্যা করতে পারে না।

১৯৯০ আর ২০০০-এর দশকে পরিসংখ্যানভিত্তিক পথ বাস্তব কাজে প্রাধান্য পায়: কথা চেনা, যন্ত্র-অনুবাদ, spam filter. ২০১২ সালে AlexNet নামের একটি neural network ImageNet ছবি-চেনার প্রতিযোগিতায় আগের পদ্ধতিগুলোকে বড় ব্যবধানে হারানোর পর থেকে deep learning প্রায় সব perception-এর কাজে প্রধান পথ হয়ে ওঠে, আর ২০১৭ সালের Transformer থেকে আজকের বড় language model আসে।

Sutton-এর “bitter lesson” আর তার জবাব

২০১৯ সালের মার্চে reinforcement learning-এর অন্যতম পথিকৃৎ Richard Sutton একটি ছোট প্রবন্ধ লেখেন, নাম “The Bitter Lesson”. তাঁর দাবি: AI-এর ৭০ বছরের ইতিহাসে বারবার দেখা গেছে, গবেষকেরা মানুষের জ্ঞান হাতে ঢুকিয়ে স্বল্পমেয়াদে উন্নতি পান, কিন্তু দীর্ঘমেয়াদে জেতে এমন সাধারণ পদ্ধতি, যা বাড়তে থাকা computation কাজে লাগাতে পারে, বিশেষ করে search আর learning. তিনি দাবা (১৯৯৭ সালে Deep Blue-র ব্যাপক search), Go, কথা চেনা আর computer vision-এর উদাহরণ দেন। “তিক্ত”, কারণ মানুষের জ্ঞান ঢোকানোর চেষ্টা গবেষকদের কাছে তৃপ্তিদায়ক, অথচ শেষে তা পিছিয়ে পড়ে।

প্রবন্ধটি খুব প্রভাবশালী, আবার খুব বিতর্কিতও। কয়েক দিনের মধ্যেই রোবোটিক্স গবেষক Rodney Brooks “A Better Lesson” লিখে জবাব দেন। তাঁর যুক্তি দুটি: প্রথমত, Sutton যে সাফল্যগুলোকে “মানুষের জ্ঞান ছাড়া” বলছেন, সেগুলোতেও মানুষের নকশা আছে, যেমন ছবির জন্য convolutional network-এর গঠনটিই মানুষের একটি অন্তর্দৃষ্টি। দ্বিতীয়ত, শুধু ফল নয়, মোট খরচও গুনতে হবে: বড় computation-এর বিদ্যুৎ খরচ বিশাল, যেখানে মানুষের মস্তিষ্ক অনেক কম শক্তিতে চলে। Gary Marcus-এর মতো সমালোচকেরা আরও বলেন, শুধু বড় করলেই নির্ভরযোগ্য যুক্তি, কম ডেটায় শেখা বা সত্যতা যাচাই আসবে না; তাঁরা neuro-symbolic পথের পক্ষে। অন্যদিকে Sutton-এর সমর্থকেরা দেখান, এই বিতর্কের পরের বছরগুলোতে বড় language model-এর উন্নতির বড় অংশ এসেছে মূলত ডেটা আর computation বাড়িয়ে।

এই পর্বের ছোট পরীক্ষা কোন দিকে? দুই দিকেই একটু। ১২০টি বার্তার মতো ছোট ডেটায় বড় computation-এর সুবিধা নেই, আর “refund মানেই মানুষ দেখবে” নিয়মটি কোনো learning-এর চেয়ে নির্ভরযোগ্য। আবার নিয়ম-তালিকা বড় করতে থাকলে আমরা ঠিক Sutton-এর বর্ণিত ফাঁদেই পড়ি। ন্যায্য সারাংশ হতে পারে: যেখানে ডেটা আর computation প্রচুর, সেখানে সাধারণ শেখার পদ্ধতি প্রায়ই জেতে; যেখানে ডেটা কম, নিয়ম আইনগত বা ভুলের দাম বেশি, সেখানে মানুষের জ্ঞান এখনো দরকারি। কোনো পক্ষকে চূড়ান্ত সত্য না ধরে প্রতিটি সমস্যায় মেপে দেখাই নিরাপদ।

আরও গভীরে: Sutton-এর প্রবন্ধ (“The Bitter Lesson”, ২০১৯) আর Brooks-এর জবাব (“A Better Lesson”, ২০১৯) দুটোই ছোট, একসাথে পড়ার মতো। Symbolic পক্ষের মূল যুক্তির জন্য Newell ও Simon-এর ১৯৭৬ সালের “Computer Science as Empirical Inquiry: Symbols and Search”, আর connectionism-এর সমালোচনার জন্য Fodor ও Pylyshyn (১৯৮৮) দেখতে পারেন। Naive Bayes কেন স্বাধীনতার ভুল ধারণা সত্ত্বেও classification-এ প্রায়ই ভালো কাজ করে, তা নিয়ে Domingos ও Pazzani-র ১৯৯৭ সালের একটি পরিচিত বিশ্লেষণ আছে।

পরীক্ষা ও ইন্টারভিউতে (বিশ্ববিদ্যালয়, চাকরি বা ইন্টারভিউর পরীক্ষায় এ ধরনের প্রশ্ন আসতে পারে):

  • Symbolic আর connectionist AI-এর পার্থক্য কী? প্রথমটিতে জ্ঞান মানুষের লেখা প্রতীক ও নিয়মে, দ্বিতীয়টিতে ডেটা থেকে শেখা সংযোগের ওজনে।
  • Knowledge acquisition bottleneck কী? বিশেষজ্ঞের জ্ঞান নিখুঁত নিয়মে বের করে লেখা ধীর ও ব্যয়বহুল হওয়ায় expert system বড় করা কঠিন হওয়ার সমস্যা।
  • Naive Bayes-এ “naive” কেন? কারণ এটি ধরে নেয় শ্রেণি জানা থাকলে feature-গুলো পরস্পর স্বাধীন।
  • Laplace smoothing কেন লাগে? Training-এ কোনো শ্রেণিতে না দেখা শব্দের সম্ভাবনা শূন্য হয়ে পুরো গুণফল শূন্য না হয়ে যায়, সেজন্য।
  • কখন neural network না নিয়ে সরল model নেবেন? ডেটা কম, ব্যাখ্যা জরুরি বা computation সীমিত হলে, আর সরল baseline যথেষ্ট ভালো করলে।

১০ · AI-এর যুগে: পথ বাছাই আর যাচাইয়ে AI সহকারী

“এই সমস্যার জন্য কোন model নেব?” প্রশ্নটি এখন অনেকেই AI সহকারীকে করেন। এটি ভালো শুরু হতে পারে, কিন্তু সহকারী আপনার ডেটা দেখেনি, আপনার ভুলের দাম জানে না, আর প্রায়ই সবচেয়ে জনপ্রিয় বা সবচেয়ে আধুনিক উত্তর দেয়। ডেটা আর AI-এর কাজে AI সহকারীর পরিচিত ভুলগুলো:

AI সহকারীর ভুলকীভাবে ধরবেন
সমস্যা না জেনেই বড় neural model বা LLM সুপারিশআগে একটি নিয়ম বা Naive Bayes baseline চালিয়ে তুলনা করুন
পুরোনো API, যেমন pandas-এর append বা np.floatনিজের version-এর অফিসিয়াল docs দেখুন, কোড চালান
অস্তিত্বহীন function বা parameter বানিয়ে দেওয়াdocs-এ নামটি খুঁজুন; error এলে লুকাবেন না
Split-এর আগে পুরো ডেটায় CountVectorizer fit করা (leakage)সবার আগে train/test ভাগ করুন, pipeline ব্যবহার করুন
Training সেটের accuracy দেখিয়ে “৯৯% সঠিক” বলাশুধু held-out test-এর সংখ্যা মানুন, নতুন ধরনের বাক্যেও যাচাই করুন
Warning চেপে রাখা (warnings.filterwarnings("ignore"))Warning পড়ুন; ConvergenceWarning মানে training শেষ হয়নি
বিশ্বাসযোগ্য কিন্তু বানানো পরিসংখ্যান বা গবেষণাপত্রমূল উৎস খুঁজে পড়ুন, নিজে হিসাব মেলান

নিচের prompt-টি সহকারীকে আপনার পরিস্থিতি জানিয়ে দেয়, আর তাকে একটির বদলে তুলনা করতে আর ঝুঁকি বলতে বাধ্য করে। আসল গ্রাহক-বার্তা বা ব্যক্তিগত তথ্য কখনো পেস্ট করবেন না; বানানো উদাহরণ দিন।

আমি একটি অনলাইন দোকানের জন্য গ্রাহকের বার্তাকে "অভিযোগ" আর "অভিযোগ নয়" ভাগ করতে চাই। আমার কাছে ১২০টি label করা Banglish বার্তা আছে, আরও কয়েকশো label দেওয়া সম্ভব। অভিযোগ মিস করা বেশি ক্ষতিকর, আর refund-এর বার্তা কখনো মিস হওয়া চলবে না। কর্মীরা জানতে চান কেন একটি বার্তা অভিযোগ ধরা হলো। ১. নিয়মভিত্তিক, Naive Bayes/logistic regression আর ছোট neural network — তিনটির সুবিধা ও ঝুঁকি আমার পরিস্থিতিতে তুলনা করো। ২. কোনটি দিয়ে baseline শুরু করব আর কেন, বলো। ৩. scikit-learn 1.8-এর জন্য এমন কোড দাও যেখানে train/test ভাগ সবার আগে হয় আর CountVectorizer pipeline-এর ভেতরে থাকে। ৪. কোন জায়গায় নিয়মের guardrail বসাবে, আর নতুন ধরনের বাক্যে কীভাবে যাচাই করব, বলো। ৫. যে অংশে তুমি নিশ্চিত নও, সেটি স্পষ্ট করে বলো।

AI-এর দেওয়া model-সুপারিশ বা কোড হাতে পেলে — যাচাইয়ের চেকলিস্ট

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন, তারপর “→ উত্তর” চাপুন।

প্র ০১Symbolic আর connectionist পক্ষের বিতর্ক কি শুধু কৌশল নিয়ে, নাকি “বুদ্ধিমত্তা কী” তা নিয়েও?

দুটোই, আর দ্বিতীয়টিই বিতর্ককে এত দীর্ঘ করেছে। Newell ও Simon ১৯৭৬ সালে যে physical symbol system hypothesis দেন, সেটি একটি দার্শনিক দাবি: প্রতীক তৈরি, জোড়া আর রূপান্তর করতে পারে এমন ব্যবস্থাই সাধারণ বুদ্ধিমত্তার জন্য প্রয়োজনীয় ও যথেষ্ট। এই দৃষ্টিতে চিন্তা মানে নিয়ম মেনে প্রতীক নাড়াচাড়া, অনেকটা গণিতের প্রমাণের মতো। তাঁদের Logic Theorist (১৯৫৫–৫৬) আর পরে General Problem Solver ছিল এই দাবির প্রমাণের চেষ্টা।

Connectionist পক্ষ বলে, বুদ্ধিমত্তা আসে অসংখ্য সরল এককের সংযোগ থেকে, আর জ্ঞান কোনো একটি নিয়মে নয়, ছড়িয়ে থাকে লক্ষ ওজনে। Rosenblatt-এর perceptron (১৯৫৮) থেকে ১৯৮৬ সালের PDP খণ্ড পর্যন্ত এই পক্ষ দেখাতে চেয়েছে, মানুষের অনেক ক্ষমতা, যেমন মুখ চেনা বা ঝাপসা লেখা পড়া, স্পষ্ট নিয়ম ছাড়াই আসে।

১৯৮৮ সালে Fodor ও Pylyshyn পাল্টা প্রশ্ন তোলেন: যে মানুষ “রহিম করিমকে ভালোবাসে” বুঝতে পারে, সে “করিম রহিমকে ভালোবাসে”-ও বোঝে। এই systematicity একটি গঠনগত নিয়ম, আর তাঁদের মতে connectionist model এটি নিজে থেকে নিশ্চিত করতে পারে না। আজকের বড় language model এমন বাক্য অনেক সময় ঠিকঠাক সামলায়, কিন্তু নতুন সমন্বয়ে কতটা নির্ভরযোগ্যভাবে পারে, সেটি নিয়ে এখনো গবেষণা ও মতভেদ চলছে।

প্রকৌশলের দিক থেকে প্রশ্নটি আরও ব্যবহারিক: কোন সমস্যায় কোন প্রতিনিধিত্ব কাজ করে। এই পর্বের ছোট পরীক্ষায় নিয়ম “refund”-এর মতো নিশ্চিত ক্ষেত্রে ভালো, আর শেখা model এলোমেলো ভাষায় ভালো। দার্শনিক প্রশ্নের উত্তর না জেনেও প্রকৌশলী দুটোকে জুড়ে কাজ চালাতে পারেন, আর বাস্তবে প্রায়ই তা-ই করেন।

মূল উপলব্ধি: বিতর্কটি কৌশলের আড়ালে মনের প্রকৃতি নিয়ে একটি প্রশ্ন, যার মীমাংসা এখনো হয়নি। প্রকৌশলে তাই কোনো পক্ষকে চূড়ান্ত না ধরে প্রতিটি সমস্যায় মেপে দেখাই নিরাপদ।

প্র ০২Sutton-এর “bitter lesson” কি বলে যে নিয়ম আর মানুষের জ্ঞানের আর কোনো দাম নেই?

না, আর প্রবন্ধটিকে এভাবে পড়াটাই সবচেয়ে সাধারণ ভুল। Sutton-এর দাবি দীর্ঘমেয়াদি গবেষণা-প্রবণতা নিয়ে: যে পদ্ধতি বাড়তে থাকা computation কাজে লাগাতে পারে, বিশেষ করে search আর learning, সেগুলো দীর্ঘ সময়ে হাতে ঢোকানো জ্ঞানের চেয়ে এগিয়ে গেছে। তাঁর উদাহরণ দাবা, Go, কথা চেনা আর computer vision, যেখানে বিশাল ডেটা বা অসীম self-play সম্ভব। তিনি সতর্ক করেন, মানুষের জ্ঞান ঢোকালে গবেষকেরা স্বল্পমেয়াদে তৃপ্ত হন, কিন্তু সেটি পরে বাধা হয়ে দাঁড়ায়।

সমালোচনাগুলো গুরুত্বপূর্ণ। Rodney Brooks ২০১৯-এই দেখান, যে সাফল্যকে “মানুষের জ্ঞান ছাড়া” বলা হচ্ছে, সেখানেও মানুষের নকশা আছে: convolutional network-এর গঠন, training-এর কৌশল, ডেটা বাছাই। তিনি মোট খরচের হিসাবও চান: বড় model-এর বিদ্যুৎ আর hardware-এর খরচ বিশাল। Gary Marcus-এর মতো সমালোচকেরা বলেন, শুধু বড় করলে নির্ভরযোগ্য যুক্তি, কম উদাহরণে শেখা বা সত্যতা যাচাই আসবে, এমন প্রমাণ নেই।

বাস্তব কাজের দৃষ্টিতে দেখুন। বাজারঘরের ১২০টি বার্তায় অসীম ডেটা নেই, computation বাড়িয়েও লাভ নেই। “৳৫০০০-এর বেশি refund মানে ম্যানেজার” নিয়মটি আইন বা নীতির বিষয়, এটি শেখার জিনিস নয়, লিখে দেওয়ার জিনিস। হাসপাতাল, ব্যাংক বা সরকারি সেবার মতো জায়গায় ব্যাখ্যা আর দায়ের প্রশ্নও আছে। আবার যদি বাজারঘর লক্ষ বার্তা জমায়, তখন হাতে নিয়ম লিখে ভাষার সব রূপ ধরার চেষ্টা Sutton-এর বর্ণিত ফাঁদেই পড়বে।

একটি ন্যায্য সারকথা হতে পারে: মানুষের জ্ঞান সবচেয়ে টেকসই হয় যখন সেটি model-এর ভেতরে খুঁটিনাটি নিয়ম হিসেবে নয়, বরং সমস্যা সাজানো, ডেটা বাছাই, মূল্যায়ন আর guardrail-এর আকারে থাকে।

মূল উপলব্ধি: “Bitter lesson” একটি প্রভাবশালী কিন্তু বিতর্কিত পর্যবেক্ষণ, প্রাকৃতিক নিয়ম নয়। ডেটা ও computation প্রচুর হলে এটি প্রায়ই খাটে; ডেটা কম, নিয়ম আইনগত বা ভুলের দাম বেশি হলে মানুষের জ্ঞান এখনো কেন্দ্রীয়।

প্র ০৩Expert system-এর জোয়ার আর ভাটা থেকে আজকের AI প্রকল্প কী শিখতে পারে?

১৯৭০-এর দশকের MYCIN আর ১৯৮০-এর দশকের XCON দেখিয়েছিল যে নির্দিষ্ট, সংকীর্ণ ক্ষেত্রে হাতে লেখা নিয়ম সত্যিকারের কাজের ফল দিতে পারে। প্রকাশিত মূল্যায়নে MYCIN-এর সুপারিশ বিশেষজ্ঞদের সঙ্গে তুলনীয় পাওয়া গিয়েছিল বলে উল্লেখ আছে, আর XCON কয়েক বছর ধরে একটি কোম্পানির আসল কাজে চলেছে। এরপর ব্যবসায়িক উচ্ছ্বাস বাড়ে, বহু কোম্পানি expert system-এর জন্য বিশেষ hardware আর সফটওয়্যারে বিনিয়োগ করে।

ভাটার কারণ হিসেবে কয়েকটি বিষয় বারবার উঠে আসে। প্রথমত, knowledge acquisition bottleneck: বিশেষজ্ঞের অব্যক্ত অভিজ্ঞতা নিয়মে বলা কঠিন। দ্বিতীয়ত, রক্ষণাবেক্ষণ: হাজার হাজার নিয়মের মধ্যে একটি বদলালে আর কোথায় কী ভাঙে, তা বোঝা কঠিন, এই পর্বের জোড়ায় জোড়ায় সংঘাতের হিসাবটি মনে করুন। তৃতীয়ত, ভঙ্গুরতা: সীমার বাইরের ক্ষেত্রে সিস্টেম সতর্ক না করেই ভুল বলে। চতুর্থত, খরচ: সাধারণ কম্পিউটার সস্তা ও শক্তিশালী হওয়ায় বিশেষ hardware-এর বাজার ভেঙে পড়ে। ইতিহাসবিদেরা এই কারণগুলোর আপেক্ষিক গুরুত্ব নিয়ে একমত নন।

আজকের প্রকল্পের জন্য শিক্ষাগুলো আশ্চর্যরকম চেনা। প্রচারের চেয়ে সংকীর্ণ, মাপা যায় এমন লক্ষ্য বেশি টেকসই। রক্ষণাবেক্ষণের খরচ শুরুর খরচের চেয়ে বড় হতে পারে; শেখা model-এর ক্ষেত্রে সেটি হলো নিয়মিত নতুন ডেটা, আবার training আর নজরদারি। আর সীমার বাইরে কী হবে, তা আগে থেকে ভাবতে হয়, যেমন দ্বিধার ঘরে মানুষের কাছে পাঠানো।

মজার ব্যাপার, নিয়মভিত্তিক সিস্টেম কোথাও হারিয়ে যায়নি। করের হিসাব, ব্যাংকের লেনদেন যাচাই, বিমার নীতি, সফটওয়্যারের business rule engine, এমনকি অনেক chatbot-এর নিরাপত্তা-নিয়ম আজও এভাবেই চলে, শুধু এদের আর “AI” বলে বিজ্ঞাপন হয় না।

মূল উপলব্ধি: Expert system ব্যর্থ হয়নি, সীমা ছাড়িয়ে প্রত্যাশা চাপানো হয়েছিল। যেকোনো AI পথের জন্য একই সতর্কতা: সংকীর্ণ লক্ষ্য, রক্ষণাবেক্ষণের হিসাব, আর সীমার বাইরে নিরাপদ আচরণ।

প্র ০৪MLP test-এ 1.000 accuracy পেল। তাহলে কেন বলা হচ্ছে এই সংখ্যার ওপর ভরসা করা যাবে না?

কারণ সংখ্যাটি সঠিক, কিন্তু প্রশ্নটি সহজ। প্রথমত, test সেটের ৩৬টি বার্তা training-এর মতো একই টেমপ্লেট থেকে এসেছে: একই শব্দ, একই গঠন, শুধু আলাদা সমন্বয়। Model যা শিখেছে, test-এ প্রায় হুবহু তা-ই এসেছে। এটি অনেকটা আগের বছরের প্রশ্ন মুখস্থ করে একই প্রশ্নে পরীক্ষা দেওয়ার মতো।

দ্বিতীয়ত, test সেট ছোট। ৩৬টিতে একটি বার্তার পার্থক্য প্রায় ৩ শতাংশ। Naive Bayes 0.972 আর MLP 1.000, অর্থাৎ পার্থক্য ঠিক একটি বার্তা: order late holeo somossa nai. অন্য random_state-এ ভাগ করলে ক্রম উল্টেও যেতে পারে। তাই কোন model ভালো, তা বলতে হলে একাধিক ভাগে (cross-validation, পর্ব ৬৬) আর বড় test-এ মাপতে হয়।

তৃতীয়ত, নতুন ধরনের বাক্যে দুটি model-ই একই জায়গায় ভুল করেছে: “packet chhera chilo, valo na”. অর্থাৎ test-এর নিখুঁত সংখ্যা model-এর একটি মৌলিক সীমা, না-বোধক অর্থ না ধরা, লুকিয়ে রেখেছিল।

এই সমস্যা বাস্তবে বহুবার দেখা গেছে। spam filter-এর ইতিহাস ভাবুন: ১৯৯০-এর দশকের শেষে Sahami ও সহকর্মীরা Naive Bayes দিয়ে spam ছাঁকার গবেষণা প্রকাশ করেন, আর ২০০২ সালে Paul Graham-এর “A Plan for Spam” প্রবন্ধ এই পদ্ধতিকে জনপ্রিয় করে। শুরুতে ফল খুব ভালো ছিল, কিন্তু spam পাঠানোরা দ্রুত শব্দ বদলাতে, বানান ভাঙতে আর ছবিতে লেখা পাঠাতে শুরু করে। সময়ের সঙ্গে ডেটা বদলে যাওয়ায় পুরোনো test-এর সংখ্যা আর অর্থবহ থাকেনি, filter-কে বারবার নতুন ডেটায় শেখাতে হয়েছে।

পেশাদার অভ্যাস তাই: test সেট আলাদা ও যথেষ্ট বড় রাখা, বাস্তব থেকে নেওয়া নতুন ধরনের উদাহরণ যোগ করা, ভুলগুলো হাতে পড়ে দেখা, আর ব্যবহারের পরেও নিয়মিত মাপা।

মূল উপলব্ধি: একটি accuracy সংখ্যা শুধু বলে model এই test-এ কেমন করল। সংখ্যাটির মূল্য নির্ভর করে test কতটা বাস্তবের মতো, কতটা বড়, আর model কোথায় ভুল করছে তা আপনি পড়েছেন কি না, তার ওপর।

প্র ০৫আজকের বড় language model কি শুধুই neural পথ, নাকি এর ভেতরেও অন্য দুই পথ লুকিয়ে আছে?

Model-টি নিজে প্রায় পুরোপুরি neural: Transformer গঠন (২০১৭), যার শত কোটি ওজন বিশাল লেখা-ভান্ডার থেকে পরের token অনুমান করতে শেখা। কিন্তু যে সিস্টেম হিসেবে মানুষ এটি ব্যবহার করে, সেখানে অন্য দুই পথ বারবার ফিরে আসে।

পরিসংখ্যানভিত্তিক চিন্তা আছে ভিত্তিতেই। Language model আসলে পরের শব্দের একটি সম্ভাবনা-বণ্টন দেয়, যা ১৯৪০-৫০-এর দশকের Shannon-এর n-gram ভাবনা থেকে শুরু হয়ে ১৯৮০-৯০-এর দশকের পরিসংখ্যানভিত্তিক কথা-চেনা আর অনুবাদের ধারাবাহিকতা। Evaluation, calibration আর sampling-এর পুরো কাজটাই পরিসংখ্যান।

Symbolic অংশ আসে চারপাশ থেকে। ২০২০ সালে Lewis ও সহকর্মীদের গবেষণাপত্র থেকে নাম পাওয়া retrieval-augmented generation-এ জ্ঞান থাকে বাইরের নথিতে। Tool use-এ model একটি calculator, database query বা code interpreter ডাকে, যার উত্তর নিখুঁত ও নিয়মবদ্ধ। নিরাপত্তায় থাকে বাইরের নিয়ম: নিষিদ্ধ বিষয়ের তালিকা, টাকা-সংক্রান্ত কাজে মানুষের অনুমোদন, output-এর format যাচাই। AlphaGo (২০১৬)-তে neural মূল্যায়নের সঙ্গে tree search, আর AlphaGeometry (২০২৪)-তে language model-এর প্রস্তাবের সঙ্গে symbolic প্রমাণ-যাচাই একই ধারার উদাহরণ।

এ থেকে কেউ বলেন hybrid-ই ভবিষ্যৎ, কেউ বলেন এগুলো অস্থায়ী সহায়ক, বড় model একসময় নিজেই এসব শিখবে। এটি এখনো খোলা প্রশ্ন, আর ভবিষ্যদ্বাণীকে তথ্য হিসেবে ধরা ঠিক নয়। তবে আজকের প্রকৌশলীর জন্য বার্তা স্পষ্ট: নিখুঁত হিসাব দরকার হলে calculator ডাকুন, হালনাগাদ তথ্য দরকার হলে নথি খুঁজে দিন, আর ঝুঁকির কাজে নিয়ম ও মানুষ রাখুন।

মূল উপলব্ধি: তিন পথ প্রতিযোগী হিসেবে শুরু হলেও আজকের ভালো সিস্টেমে তারা সহকর্মী। Model-এর ভেতরে neural, চারপাশে পরিসংখ্যানের মূল্যায়ন আর নিয়মের guardrail.

অনুশীলন

একটি হিসাব, একটি নকশা-সমালোচনা, একটি আউটপুট অনুমান আর একটি কোডের কাজ।

  1. হাতে হিসাব (numerical): একটি Naive Bayes model-এর training-এ অভিযোগ-শ্রেণিতে মোট 187টি শব্দ, অভিযোগ-নয় শ্রেণিতে 171টি, আর vocabulary-তে 49টি আলাদা শব্দ। “valo” অভিযোগে ০ বার, অভিযোগ-নয়-তে ৭ বার এসেছে; “parcel” এসেছে যথাক্রমে ১৬ আর ১০ বার। দুই শ্রেণির prior সমান। Laplace smoothing ধরে (ক) “valo”-র ওজন, (খ) “parcel valo” বার্তার score আর অভিযোগের সম্ভাবনা বের করুন।

    (ক) P(valo | অভিযোগ) = (0 + 1)/(187 + 49) = 1/236, P(valo | নয়) = (7 + 1)/(171 + 49) = 8/220. ওজন = ln(1/236) − ln(8/220) = ln(220/1888) = ln(0.1165) ≈ −2.150. ঋণাত্মক, তাই “valo” অভিযোগ-নয়-এর দিকে ঠেলে।

    (খ) “parcel”-এর ওজন = ln(17/236) − ln(11/220) ≈ −2.631 − (−2.996) ≈ +0.365. prior-এর পার্থক্য 0, তাই score = 0 + 0.365 − 2.150 = −1.785. সম্ভাবনা = 1/(1 + e1.785) = 1/(1 + 5.96) ≈ 0.144. অর্থাৎ model প্রায় ১৪% সম্ভাবনা দেয়, সিদ্ধান্ত “অভিযোগ নয়”। (এই পর্বের ডেটায় fit করা scikit-learn model-এও একই 0.144 আসে।)

  2. নকশা ও সমালোচনা: একজন সহকর্মী প্রস্তাব দিলেন: “বাজারঘরের সব refund আবেদন একটি বড় neural model অনুমোদন বা বাতিল করবে; নিয়ম বা মানুষের কোনো দরকার নেই, কারণ neural model সবচেয়ে আধুনিক।” প্রস্তাবটির অন্তত চারটি দুর্বলতা লিখুন আর একটি ভালো নকশা দিন।
    • ব্যাখ্যা নেই: বাতিল হওয়া গ্রাহক কারণ জানতে চাইবেন; বড় model-এর সিদ্ধান্ত সহজে ব্যাখ্যা করা যায় না।
    • ভুলের দাম অসম: ভুল বাতিলে গ্রাহক হারানো, ভুল অনুমোদনে টাকা হারানো; দুটোই সরাসরি আর্থিক ক্ষতি, অথচ কোনো মানুষের পর্যালোচনা নেই।
    • নীতি বদল: refund-নীতি বদলালে model-কে নতুন ডেটায় আবার শেখাতে হবে, যেখানে নিয়মে এক লাইন বদলালেই হতো।
    • প্রতারণা ও distribution shift: লোকে শিখে যাবে কোন ভাষায় লিখলে অনুমোদন মেলে; model সেই বদল নিজে ধরবে না।
    • Baseline নেই: সরল নিয়ম বা ছোট model-এর চেয়ে বড় model ভালো, এমন কোনো মাপ দেখানো হয়নি।

    ভালো নকশা: স্পষ্ট নীতিগুলো নিয়মে (সময়সীমা, অঙ্কের সীমা, পণ্যের ধরন); একটি শেখা model শুধু ঝুঁকির score দেয়; উচ্চ অঙ্ক বা দ্বিধার ঘরে মানুষ সিদ্ধান্ত নেন; প্রতিটি সিদ্ধান্তের কারণ লগে থাকে, আর নিয়মিত মাপা হয় কতগুলো সিদ্ধান্ত পরে উল্টাতে হলো।

  3. আউটপুট অনুমান: নিচের কোড চালালে কী ছাপা হবে, চালানোর আগে অনুমান করুন।
    KEYWORDS = ["ashe nai", "late", "bhanga", "bhul", "refund", "kharap"]
    def rule(msg):
        m = msg.lower()
        for kw in KEYWORDS:
            if kw in m:
                return 1
        return 0
    
    tests = ["Late holeo somossa nai, valo service",
             "Bhalo laglo, abar kinbo",
             "chocolate gulo gole geche"]
    print([rule(t) for t in tests])

    ছাপা হবে [1, 0, 1]. প্রথমটিতে lower()-এর পর “late” মেলে, অথচ গ্রাহক বলছেন কোনো সমস্যা নেই, তাই ভুল ধনাত্মক। দ্বিতীয়টিতে কোনো চাবি-শব্দ নেই, তাই 0, যা সঠিক। তৃতীয়টি সবচেয়ে মজার: “chocolate” শব্দের ভেতরে “late” substring হিসেবে আছে, তাই নিয়ম 1 দেয়। বার্তাটি (চকলেট গলে গেছে) আসলে অভিযোগ, তাই উত্তর কাকতালীয়ভাবে ঠিক, কিন্তু ভুল কারণে। শব্দের সীমা না মানা substring মেলানো নিয়মভিত্তিক সিস্টেমের একটি পরিচিত ফাঁদ; পুরো শব্দ মেলাতে regular expression-এর \b ব্যবহার করা যায় (দেখুন Python কোর্সের regex পর্ব)।

  4. কোডের কাজ: “three_ways.py” block-এর আগে নিয়মের তালিকায় চারটি শব্দ যোগ করুন: KEYWORDS += ["noshto", "pai nai", "mele nai", "ferot"], তারপর block-টি আবার চালান। নিয়মের test accuracy কত হলো? এরপর “new_phrasing.py” চালিয়ে দেখুন নতুন পাঁচটি বাক্যে নিয়মের ফল বদলাল কি না। এ থেকে কী শিখলেন?

    লেখকের একটি local run-এ (Python 3.14, scikit-learn 1.8.0) নিয়মের test accuracy 0.694 থেকে বেড়ে 0.889 (32/36) হয়েছে: সব ভুল ঋণাত্মক দূর হয়েছে, বাকি চারটি ভুল ধনাত্মক (“kharap na, valo” আর “late holeo somossa nai” ধরনের)। কিন্তু নতুন পাঁচটি বাক্যে নিয়মের ফল আগের মতোই [0, 0, 0, 1, 0], কারণ “pai ni”, “khobor nai” বা “chhera”-র কোনোটিই নতুন তালিকায় নেই।

    শিক্ষা: test-এ ভুল দেখে নিয়ম যোগ করলে test-এর সংখ্যা বাড়ে, কিন্তু আপনি আসলে test-কে training-এর মতো ব্যবহার করছেন। নতুন বাক্যে generalization একটুও বাড়েনি। ঠিক পদ্ধতি হলো আলাদা একটি validation অংশ দেখে নিয়ম বা model বদলানো, আর test-কে শেষ পর্যন্ত না ছোঁয়া (পর্ব ৫৬)।

নিজেকে যাচাই করুন

ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।

ক্রমএকটি নতুন classification সমস্যায় কাজের ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. সমস্যা আর প্রতিটি ভুলের দাম ঠিক করা
  2. ডেটা জোগাড় করে সবার আগে train আর test ভাগ করা
  3. একটি সরল baseline (নিয়ম বা Naive Bayes) চালানো
  4. জটিল model চেষ্টা করে baseline-এর সঙ্গে তুলনা করা
  5. নতুন ধরনের ইনপুটে যাচাই আর guardrail বসানো
  6. ব্যবহারের পর নিয়মিত মাপা আর দরকারে আবার train করা

নিয়মভিত্তিক (symbolic) AI আর পরিসংখ্যানভিত্তিক machine learning-এর মূল পার্থক্য কোনটি?

  • একটি কম্পিউটারে চলে, অন্যটি চলে না
  • প্রথমটিতে সিদ্ধান্তের নিয়ম মানুষ লেখেন, দ্বিতীয়টিতে model-এর সংখ্যা ডেটা থেকে শেখা হয়
  • Machine learning কখনো ভুল করে না
  • নিয়মভিত্তিক AI আজ আর কোথাও ব্যবহার হয় না

একটি নিয়ম “late” শব্দ পেলেই বার্তাকে অভিযোগ বলে। “late holeo somossa nai” বার্তায় এটি অভিযোগ বলল, আর “jinish ekhono pai ni”-তে বলল অভিযোগ নয়। এই আচরণের সবচেয়ে ভালো নাম কী?

  • Overfitting
  • Laplace smoothing
  • Brittleness — না-ভাবা ইনপুটে নিয়মের ভেঙে পড়া
  • Representation learning

Naive Bayes-এ অভিযোগ-শ্রেণির মোট শব্দ 187, vocabulary 49, আর “ekhono” অভিযোগে 7 বার এসেছে। Laplace smoothing ধরে P(ekhono | অভিযোগ) কত?

  • 8/236 ≈ 0.034
  • 7/187 ≈ 0.037
  • 8/187 ≈ 0.043
  • 1/236 ≈ 0.004

একটি MLP-তে 49টি input, একটি hidden layer-এ 8টি একক আর 1টি output আছে। Bias-সহ মোট কয়টি শেখা সংখ্যা (parameter)?

  • 392
  • 58
  • 400
  • 409

একটি দোকানের refund-এর সিদ্ধান্তে ভুলের দাম বেশি, নীতি প্রায়ই বদলায়, আর গ্রাহককে কারণ জানাতে হয়। কোন নকশা সবচেয়ে যুক্তিযুক্ত?

  • একটি বড় neural model, কোনো নিয়ম বা মানুষ ছাড়া
  • স্পষ্ট নীতি নিয়মে, শেখা model শুধু ঝুঁকির score দেয়, দ্বিধার ঘরে মানুষ সিদ্ধান্ত নেন
  • প্রতিটি আবেদন random ভাবে অনুমোদন
  • যে model training ডেটায় সবচেয়ে বেশি accuracy দেয়, সেটিই একা ব্যবহার

Richard Sutton-এর ২০১৯ সালের প্রবন্ধ “The Bitter Lesson”-এর মূল দাবি কোনটি?

  • Machine learning-এর বদলে আবার expert system-এ ফেরা উচিত
  • কয়েক বছরের মধ্যেই মানুষের সমান AI আসবে
  • দীর্ঘমেয়াদে computation কাজে লাগানো সাধারণ search আর learning পদ্ধতি হাতে ঢোকানো জ্ঞানের চেয়ে বেশি সফল হয়েছে
  • ছোট ডেটাসেটই সবসময় ভালো

৩৬টি বার্তার একটি test সেটে Naive Bayes 0.972 আর একটি ছোট MLP 1.000 accuracy পেল, আর test-এর বার্তাগুলো training-এর মতো একই টেমপ্লেট থেকে বানানো। কোন সিদ্ধান্তটি সবচেয়ে সৎ?

  • পার্থক্য একটি বার্তার, test সহজ আর ছোট; কোন model ভালো তা বলতে আরও যাচাই লাগবে
  • Neural network সবসময় Naive Bayes-এর চেয়ে ভালো
  • MLP আর কখনো ভুল করবে না
  • Naive Bayes ব্যবহারযোগ্য নয়

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:

মনে রাখুন

  1. তিন পথের পার্থক্য জ্ঞানের উৎসে: নিয়ম মানুষ লেখে; পরিসংখ্যানে মানুষ feature বাছে, ডেটা ওজন দেয়; neural-এ ভেতরের feature-ও ডেটা থেকে শেখা।
  2. নিয়ম ব্যাখ্যাযোগ্য, ডেটা ছাড়া চলে, কিন্তু ভঙ্গুর; শর্ত বাড়লে নিয়ম গুণফলের হারে বাড়ে, আর জ্ঞান জোগাড় করাই বড় বাধা।
  3. শেখা model নতুন বাক্যে কিছুটা টেকে, কিন্তু অচেনা শব্দ উপেক্ষা করে আর “valo na”-র মতো অর্থ ভুল বোঝে।
  4. ছোট, একই ধরনের test-এ উচ্চ accuracy প্রমাণ নয়; নতুন ধরনের ইনপুট আর বড় test-এ মাপুন।
  5. বাস্তবে hybrid: শেখা model, চারপাশে নিয়মের guardrail, দ্বিধায় মানুষ। পথ বাছুন ডেটা, ব্যাখ্যা, ভুলের দাম আর সময়ে বদল দেখে।

পরের পর্বে: AI, machine learning, deep learning আর generative AI শব্দগুলো প্রায়ই একসাথে বলা হয়। এদের কোনটি কোনটির ভেতরে, আর আজকের তিন পথ সেই মানচিত্রে কোথায় বসে, তা দেখব।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান