পাঠ ২১ · ৫৭-এর মধ্যে · মডিউল ৫
Home / AI Courses / AI Ethics / মডেল কার্ড ও ডেটাশিট

অডিটেবিলিটি ও AI ডকুমেন্টেশন — মডেল কার্ড ও ডেটাশিট

Auditability & AI documentation — model cards & datasheets
৭ মিনিট পড়া মধ্যম · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • অডিটেবিলিটি কী এবং কেন এটি L18-L20-এর ধারণাগুলোকে ব্যবহারিক করে তোলে
  • মডেল কার্ড — একটি মডেলের ডকুমেন্টেশনে সাধারণত কী কী থাকে
  • ডেটাশিট ফর ডেটাসেটস — একটি ডেটাসেটের ডকুমেন্টেশনে সাধারণত কী কী থাকে
  • একটি সত্যিকারের, চলমান ডেমো — একটি মডেল-কার্ড কমপ্লিটনেস চেকার

১ · অডিটেবিলিটি কেন গুরুত্বপূর্ণ

অডিটেবিলিটিAuditabilityএকটি AI সিস্টেমকে পরবর্তীতে স্বতন্ত্রভাবে (ভিন্ন কোনো দল, নিয়ন্ত্রক, বা গবেষক দ্বারা) পর্যালোচনা করার মতো যথেষ্ট তথ্য নথিভুক্ত থাকার বৈশিষ্ট্য — কোন ডেটায় প্রশিক্ষণ হয়েছে, কীভাবে পরীক্ষা করা হয়েছে, এবং কোথায় এর সীমাবদ্ধতা তা লিখিতভাবে জানা থাকা। মানে হলো একটি সিস্টেমকে এমনভাবে নথিভুক্ত রাখা যাতে পরবর্তীতে কেউ (একজন নতুন ডেভেলপার, একজন নিয়ন্ত্রক, একজন স্বতন্ত্র গবেষক) মডেলটির ভেতরে না ঢুকেও এর সিদ্ধান্ত-প্রক্রিয়া, সীমাবদ্ধতা ও ঝুঁকি সম্পর্কে যথেষ্ট তথ্য পেতে পারে। L18-এ আমরা দেখেছি মডেলের ভেতরের যুক্তি প্রায়ই অস্বচ্ছ, L19-এ দেখেছি XAI টেকনিক দিয়ে আংশিক ব্যাখ্যা তৈরি করা যায়, আর L20-এ দেখেছি দায়বদ্ধতা প্রায়ই বহু পক্ষের মধ্যে বিতরিত। ডকুমেন্টেশন এই তিনটি সমস্যাকেই ব্যবহারিকভাবে মোকাবিলার একটি হাতিয়ার — যদি প্রতিটি পক্ষের সিদ্ধান্ত ও তার কারণ লিখিতভাবে নথিভুক্ত থাকে, তাহলে পরবর্তীতে দায়বদ্ধতা যাচাই করা এবং সমস্যার মূল খুঁজে বের করা অনেক সহজ হয়ে যায়।

২ · মডেল কার্ড ও ডেটাশিট — দুটি প্রতিষ্ঠিত প্র্যাকটিস

মডেল কার্ডModel Cardএকটি প্রকাশিত মডেলের সাথে যুক্ত একটি সংক্ষিপ্ত, কাঠামোবদ্ধ ডকুমেন্টেশন — এতে সাধারণত মডেলের উদ্দেশ্যিত ব্যবহার, প্রশিক্ষণ ও মূল্যায়ন ডেটা, সাবগ্রুপ-ভিত্তিক পারফরম্যান্স, এবং জানা সীমাবদ্ধতা থাকে। হলো একটি প্রতিষ্ঠিত, ব্যাপকভাবে গৃহীত প্র্যাকটিস যেখানে একটি মডেল প্রকাশের সাথে সাথে একটি সংক্ষিপ্ত ডকুমেন্ট যুক্ত করা হয় — সাধারণত এতে থাকে মডেলের মৌলিক পরিচিতি, এটি কোন উদ্দেশ্যে ব্যবহারের জন্য বানানো (এবং কোন উদ্দেশ্যে নয়), বিভিন্ন সাবগ্রুপ জুড়ে এর পারফরম্যান্স কেমন (শুধু সামগ্রিক অ্যাকুরেসি নয়), এবং এর জানা সীমাবদ্ধতা ও নৈতিক বিবেচনা।

সমতুল্যভাবে, ডেটাশিট ফর ডেটাসেটসDatasheets for Datasetsএকটি ডেটাসেটের সাথে যুক্ত একটি কাঠামোবদ্ধ ডকুমেন্টেশন — এতে সাধারণত ডেটা সংগ্রহ প্রক্রিয়া, গঠন (composition), উদ্দেশ্যিত ব্যবহার, এবং জানা বায়াস/সীমাবদ্ধতা থাকে। একই ধারণা ডেটাসেটের জন্য প্রয়োগ করে — এতে সাধারণত থাকে ডেটা কীভাবে ও কোথা থেকে সংগ্রহ করা হয়েছে, ডেটাসেটের গঠন (কোন ধরনের এন্ট্রি, কতটুকু প্রতিনিধিত্বমূলক), এটি কোন উদ্দেশ্যে সংগ্রহ করা হয়েছিল, এবং এতে থাকা যেকোনো জানা বায়াস বা ফাঁক। উভয় প্র্যাকটিসই মূল দর্শনে অভিন্ন — গবেষণা ও শিল্প-উভয় ক্ষেত্রেই ব্যাপকভাবে সুপারিশকৃত ও গৃহীত এই ধারণা হলো, একটি মডেল বা ডেটাসেট যত ভালোভাবেই কাজ করুক না কেন, তার ডকুমেন্টেশন ছাড়া দায়িত্বশীল ব্যবহার সম্ভব নয়।

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

৩ · একটি সত্যিকারের মডেল-কার্ড কমপ্লিটনেস চেকার

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

Python
# একটি মডেল-কার্ড কমপ্লিটনেস চেকার -- সাধারণত-প্রত্যাশিত সেকশনগুলো পূরণ করা আছে কি না তা যাচাই করে

REQUIRED_FIELDS = [
    "model_details",
    "intended_use",
    "training_data",
    "evaluation_data",
    "performance_by_subgroup",
    "limitations",
    "ethical_considerations",
]

def check_model_card(card: dict):
    present, missing = [], []
    for field in REQUIRED_FIELDS:
        value = card.get(field)
        if value is not None and str(value).strip() != "":
            present.append(field)
        else:
            missing.append(field)
    completeness = len(present) / len(REQUIRED_FIELDS) * 100
    return present, missing, completeness

# একটি বাস্তবসম্মত, খসড়া মডেল কার্ড -- ইচ্ছাকৃতভাবে কিছু ফিল্ড অসম্পূর্ণ রাখা হয়েছে
model_card_draft = {
    "model_details": "রিজিউমে-স্ক্রিনিং ক্লাসিফায়ার, v2.1, gradient boosted trees",
    "intended_use": "প্রাথমিক রিজিউমে শর্টলিস্টিং সহায়তা -- চূড়ান্ত সিদ্ধান্ত মানুষ নেবে",
    "training_data": "",                      # খালি রাখা হয়েছে -- ডকুমেন্টেশনে ভরা হয়নি
    "evaluation_data": "২০২৩-২০২৪ হোল্ড-আউট সেট, ৪,০০০ আবেদনকারী",
    "performance_by_subgroup": None,           # সাবগ্রুপ-ভিত্তিক পারফরম্যান্স রিপোর্ট করা হয়নি
    "limitations": "শুধুমাত্র ইংরেজি রিজিউমেতে টেস্ট করা হয়েছে",
    # "ethical_considerations" সম্পূর্ণ বাদ পড়ে গেছে -- ডিকশনারিতে কী-ই নেই
}

present, missing, completeness = check_model_card(model_card_draft)

print(f"পূরণ করা ফিল্ড ({len(present)}/{len(REQUIRED_FIELDS)}):")
for f in present:
    print(f"  [OK] {f}")

print(f"\nঅনুপস্থিত/খালি ফিল্ড ({len(missing)}/{len(REQUIRED_FIELDS)}):")
for f in missing:
    print(f"  [MISSING] {f}")

print(f"\nমডেল কার্ড completeness score: {completeness:.1f}%")
if completeness < 100:
    print("এই মডেল কার্ডটি প্রকাশের আগে সম্পূর্ণ করা প্রয়োজন।")
else:
    print("সব প্রয়োজনীয় ফিল্ড পূরণ করা আছে।")

# একটি সম্পূর্ণ মডেল কার্ড দিয়ে তুলনা -- একই ফাংশন, ভিন্ন ইনপুট
complete_card = {
    "model_details": "রিজিউমে-স্ক্রিনিং ক্লাসিফায়ার, v2.1",
    "intended_use": "প্রাথমিক শর্টলিস্টিং সহায়তা",
    "training_data": "২০১৯-২০২৩, ৫০,০০০ রিজিউমে",
    "evaluation_data": "২০২৩-২০২৪ হোল্ড-আউট সেট",
    "performance_by_subgroup": "গ্রুপ A: ৮৮% নির্ভুলতা, গ্রুপ B: ৮৫% নির্ভুলতা",
    "limitations": "শুধুমাত্র ইংরেজি রিজিউমেতে টেস্ট করা হয়েছে",
    "ethical_considerations": "প্রক্সি-ফিচার বায়াসের ঝুঁকি আছে, নিয়মিত অডিট প্রয়োজন",
}
_, _, complete_score = check_model_card(complete_card)
print(f"\nতুলনার জন্য -- সম্পূর্ণ মডেল কার্ডের completeness score: {complete_score:.1f}%")

    
লক্ষ্য করুন — check_model_card() ফাংশনটি প্রতিবার ইনপুট ডিকশনারির প্রকৃত মান পরীক্ষা করে completeness score গণনা করছে, কোনো পূর্ব-নির্ধারিত সংখ্যা বসিয়ে দেওয়া হচ্ছে না। এখানে ব্যবহৃত REQUIRED_FIELDS তালিকাটি একটি সাধারণ, বহুল-ব্যবহৃত মডেল-কার্ড টেমপ্লেটে সচরাচর যেসব সেকশন থাকে তার একটি প্রতিনিধিত্বমূলক উদাহরণ — বাস্তব প্রতিষ্ঠান-ভেদে আনুষ্ঠানিক টেমপ্লেটের সঠিক ফিল্ড-তালিকা কিছুটা ভিন্ন হতে পারে, তবে মূল ধারণাটি (উদ্দেশ্য, ডেটা, সাবগ্রুপ-ভিত্তিক পারফরম্যান্স, সীমাবদ্ধতা নথিভুক্ত করা) সবখানে অভিন্ন।
মূল কথা · Key takeaway

মডেল কার্ড ও ডেটাশিট কোনো মডেলকে "ভালো" বা "ন্যায্য" করে দেয় না — এগুলো শুধু নিশ্চিত করে যে মডেলটি সম্পর্কে গুরুত্বপূর্ণ তথ্য লিখিতভাবে বিদ্যমান এবং পাওয়া যায়। একটি সম্পূর্ণ মডেল কার্ডেও একটি বায়াসড মডেল থাকতে পারে — কিন্তু তখন অন্তত সেই বায়াসটি নথিভুক্ত সীমাবদ্ধতা হিসেবে দৃশ্যমান থাকে, লুকানো থাকে না। এই স্বচ্ছতাই M5-এর তিনটি পাঠকে (ব্ল্যাক-বক্স, XAI, দায়বদ্ধতা) একসাথে বেঁধে একটি ব্যবহারিক প্র্যাকটিসে রূপান্তরিত করে — যা M9-এর গভর্নেন্স ও রেগুলেশন মডিউলে আরও প্রাতিষ্ঠানিক আকারে ফিরে আসবে।

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

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ উপরের কোড সেলে model_card_draft-এর completeness score ঠিক কত শতাংশ এলো, এবং কেন এটি 100% নয়?

REQUIRED_FIELDS-এ ৭টি ফিল্ড আছে। model_card_draft-এ training_data খালি স্ট্রিং, performance_by_subgroup None, এবং ethical_considerations ডিকশনারিতে একেবারেই নেই — অর্থাৎ ৩টি ফিল্ড অনুপস্থিত/খালি, ৪টি পূর্ণ। তাই completeness = 4/7 * 100 ≈ 57.1%। ফাংশনটি সরাসরি এই গণনা করছে, তাই আউটপুটে ঠিক এই সংখ্যাটিই দেখা যাবে।

প্র ০২ একজন ডেভেলপার বলছেন, "আমাদের মডেল কার্ডে সব ফিল্ড ভরা আছে, তাই মডেলটি অবশ্যই ন্যায্য।" এই যুক্তিতে কী সমস্যা আছে?

completeness score শুধু পরিমাপ করে "সব প্রয়োজনীয় সেকশন কি পূরণ করা আছে" — এটি সেই সেকশনগুলোর বিষয়বস্তুর মান যাচাই করে না। কেউ performance_by_subgroup ফিল্ডে "সব ঠিক আছে" লিখে দিলেও চেকারটি সেটিকে "পূর্ণ" গণ্য করবে, যদিও এটি অর্থবহ তথ্য নয়। সম্পূর্ণতা (completeness) আর গুণগত মান (quality) দুটো ভিন্ন প্রশ্ন — একটি স্বয়ংক্রিয় চেকার শুধু প্রথমটি যাচাই করতে পারে, দ্বিতীয়টির জন্য মানুষের পর্যালোচনা প্রয়োজন।

প্র ০৩ একটি ডেটাসেটের ডেটাশিটে "সংগ্রহ প্রক্রিয়া" সেকশনে কী ধরনের তথ্য থাকা উপযোগী হতে পারে বলে আপনার মনে হয়?

সম্ভাব্য তথ্যের মধ্যে থাকতে পারে — ডেটা কীভাবে সংগৃহীত হয়েছে (জরিপ, স্বয়ংক্রিয় স্ক্র্যাপিং, সেন্সর, ইত্যাদি), কারা/কী উৎস থেকে সংগ্রহ করা হয়েছে, কোন সময়কালে, সংগ্রহের সময় সংশ্লিষ্ট ব্যক্তিদের সম্মতি নেওয়া হয়েছিল কি না (L15-এর কনসেন্ট ধারণার সাথে সরাসরি সম্পর্কিত), এবং ডেটাসেটটি কোন জনগোষ্ঠী/প্রেক্ষাপট থেকে সংগৃহীত (তাই সেই প্রেক্ষাপটের বাইরে কতটা সাধারণীকরণযোগ্য তা বোঝা যায়)।

অনুশীলন

  1. চিন্তা করুন: উপরের কোড সেলে যদি model_card_draft-এ "ethical_considerations": "কোনো পরিচিত ঝুঁকি নেই" যোগ করা হয় (তবে training_data ও performance_by_subgroup এখনও খালি রাখা হয়), তাহলে নতুন completeness score কত হবে বলে আপনার ধারণা?

    এখন ৭টির মধ্যে ৫টি ফিল্ড পূর্ণ হবে (training_data ও performance_by_subgroup এখনও খালি/None থাকবে), তাই completeness = 5/7 * 100 ≈ 71.4%।

  2. পরীক্ষা করুন: উপরের কোড সেলে সেই ফিল্ডটি যোগ করে Run চেপে আপনার অনুমান যাচাই করুন।

    নতুন আউটপুটে ethical_considerations এখন "পূরণ করা ফিল্ড" তালিকায় দেখাবে, "অনুপস্থিত" তালিকায় শুধু training_data ও performance_by_subgroup থাকবে, এবং completeness score 71.4% প্রিন্ট হবে — নিশ্চিত করে যে গণনাটি সত্যিই ইনপুট ডিকশনারির বাস্তব পরিবর্তনের সাথে বদলাচ্ছে।

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

  • কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ নৈতিক ফ্রেমওয়ার্ক, বায়াস-ফেয়ারনেস, প্রাইভেসি, ট্রান্সপারেন্সি, AI অ্যালাইনমেন্ট, জেনারেটিভ AI/LLM এথিক্স, সামাজিক প্রভাব, গভর্নেন্স ও রেগুলেশন, সেক্টর-স্পেসিফিক এথিক্স ও এক্সিস্টেনশিয়াল রিস্ক বিতর্ক — বাকি পাঠগুলো দেখুন।
  • Ethics in Computing & AI Safety কোর্স সহোদর কোর্স সাধারণ কম্পিউটিং এথিক্স, প্রফেশনাল এথিক্স ও সেফটি-ক্রিটিক্যাল কেস স্টাডির একটি বিস্তৃত সার্ভে — এই কোর্স সম্পূর্ণভাবে AI-তে ফোকাস করে গভীরে যায়।
  • সব Courses দেখুন ABCL TECH C, C++, Python, Java, JavaScript, DSA, Machine Learning, Deep Learning, System Design, Cybersecurity, Cloud Computing & DevOps, এবং আরও অনেক কোর্স — সব এক জায়গায়।
আগের পাঠ
অ্যাকাউন্টেবিলিটি ও "মেনি হ্যান্ডস" সমস্যা