অধ্যায় 3 · ডকুমেন্টেশন ও তদারকি
মডেল কার্ড, সিস্টেম কার্ড ও ডেটাশিট: কী নথিভুক্ত করবেন এবং কার জন্য
- পৃষ্ঠা 9 / 22
- 15 মিনিট পড়া
যে ফিচার কেউ লিখে রাখেনি, তা পর্যালোচনা করা, হাতবদল করা বা তার ওপর প্রশ্ন তোলা যায় না। ডেটা অধিকার, স্থানান্তর ও রেকর্ড: অনুরোধ, সংরক্ষণ ও অডিট ট্রেইল পাতায় দেখেছেন ডেটা নিয়ে কীভাবে রেকর্ড রাখতে হয়। এই পাতার বিষয় AI নিজেকে নিয়ে রেকর্ড: ফিচারটা কিসের জন্য, কিসের ওপর পরীক্ষা হয়েছে, কোথায় দুর্বল আর কে নজর রাখছে। আগের পাতাগুলোর কাল্পনিক আবেদনকারী-স্ক্রিনিং ফিচারের জন্য আপনি একটা কার্ড (card) বানাবেন, কাঠামোবদ্ধ ডেটা হিসেবে, একবারে একটা অংশ।
আপনার দরকার Python 3.12, শুধু স্ট্যান্ডার্ড লাইব্রেরি: কোনো প্যাকেজ, নেটওয়ার্ক বা মডেল কল নেই। ব্লকগুলো ক্রমে একটা ফোল্ডারে, একটা সেশনে লিখুন; এগুলো ভেরিয়েবল ভাগ করে নেয়, আর ব্লকের নিচের লেখাটা তার আসল আউটপুট।
সততার নিয়ম। এই পাতার প্রতিটা কোম্পানি, মানুষ, ফাইলের নাম ও সংখ্যা কাল্পনিক, আর ডেটায়
Toy data:লেবেল দেওয়া। একটা কার্ড, যত ভালোই হোক, একটা ডকুমেন্টেশনের পদ্ধতি। এটা নিরাপত্তা, ন্যায্যতা বা আইন মানার সার্টিফিকেট নয়, আর "কার্ড আছে" মানে "অনুমোদিত" ভাবা ঠিক নয়। এখানকার কিছুই আইনি পরামর্শ নয়।
যা শিখবেন
- মডেল কার্ড, সিস্টেম কার্ড আর ডেটাসেটের ডেটাশিট কীভাবে আলাদা, এবং প্রতিটা কার জন্য।
- উদ্দেশ্যমূলক ব্যবহার, পরিধির বাইরের ব্যবহার আর উদ্দিষ্ট ব্যবহারকারী-গোষ্ঠী এমনভাবে লেখা, যাতে সেগুলো যাচাই করা যায়।
- মূল্যায়নের শর্ত, সীমাবদ্ধতা, ভাষা ও অঞ্চলের কভারেজ, অ্যাক্সেসিবিলিটি, তদারকি ও ব্যর্থতার ধরন কীভাবে লিখবেন।
- ফাঁক রেখে দেওয়া বা অনুমানে দাবি বানানোর বদলে সৎভাবে "UNKNOWN" কীভাবে লিখবেন।
- কার্ডকে Python ডিকশনারি হিসেবে ধরে JSON-এ সেভ করা।
কার্ড ডকুমেন্টেশন, সার্টিফিকেট নয়
ডকুমেন্টেশন মানুষকে সিদ্ধান্ত নিতে সাহায্য করে। পাঠক জানতে পারেন নির্মাতারা কী চেয়েছিলেন, কী পরীক্ষা করেছেন আর কী করেননি। এতে সিস্টেম নিরাপদ হয়ে যায় না: একটা ফিচারের কার্ড চমৎকার হয়েও মানুষের ক্ষতি হতে পারে, আবার দুর্বল সিস্টেম নিয়ে কার্ড সঠিকও হতে পারে। তিনটা কথা এখান থেকে আসে।
- কার্ড একটা ভার্সন বর্ণনা করে একটা তারিখে। দুটোর একটা বদলালে কার্ড ভুল হয়ে যেতে পারে।
- কার্ড ততটাই ভালো, যতটা ভালো তার প্রমাণ। পেছনে ডেটা ছাড়া "বায়াস পরীক্ষা: পাস" একটা দাবি, ডকুমেন্টেশন নয়।
- ফাঁকও তথ্য। "UNKNOWN: পরীক্ষা হয়নি" পাঠককে জানায় কোথায় সতর্ক হতে হবে; চুপ থাকলে কিছুই জানা যায় না।
মডেল কার্ড, সিস্টেম কার্ড ও ডেটাশিট
মডেল কার্ড আর সিস্টেম কার্ডের পার্থক্য বুঝুন। মিচেল ও সহলেখকেরা (২০১৯) মডেল কার্ড প্রস্তাব করেন: একটা প্রশিক্ষিত মডেলের সঙ্গে থাকা ছোট ডকুমেন্ট, যা বলে নির্দিষ্ট শর্তে মডেলটা কেমন কাজ করে, বিভিন্ন গোষ্ঠীর জন্যও, আর কোন প্রেক্ষাপটের জন্য সেটা তৈরি। গেব্রু ও সহলেখকেরা প্রস্তাব করেন ডেটাসেটের ডেটাশিট (datasheet): প্রতিটা ডেটাসেটের জন্য একটা ডকুমেন্ট, যেখানে থাকে কেন বানানো হয়েছিল, কী আছে, কীভাবে সংগ্রহ হয়েছে আর কোন ব্যবহারের জন্য সুপারিশ। দুটোই গবেষণাপত্রের প্রস্তাব, কোনো বাধ্যতামূলক ফরম্যাট নয়।
"সিস্টেম কার্ড" একটামাত্র প্রমিত শব্দ নয়, আর এর অর্থ জায়গাভেদে আলাদা। এই কোর্সে এর মানে পুরো ডিপ্লয় করা সিস্টেম নিয়ে ডকুমেন্ট: মডেল, তার চারপাশের কোড, ইন্টারফেস, যাঁরা আউটপুট দেখে কাজ করেন আর এসকালেশনের নিয়ম। স্ক্রিনিং ফিচারে মডেল CV-র স্কোর দেয়; সিস্টেমে আরও আছে আপলোড ফর্ম, র্যাংক করা তালিকা, যে রিক্রুটার শুধু সবচেয়ে ওপরের ২০% খোলেন, আর মাসিক স্যাম্পল পরীক্ষা।
| ডকুমেন্ট | কী বর্ণনা করে | প্রধান পাঠক | সাধারণ বিষয়বস্তু |
|---|---|---|---|
| মডেল কার্ড | একটা প্রশিক্ষিত মডেল | মডেল বেছে নেওয়া বা আবার ব্যবহার করা ইঞ্জিনিয়ার; অডিটর | উদ্দেশ্য, মূল্যায়নের শর্ত ও ফল, সীমা |
| ডেটাশিট | একটা ডেটাসেট | যাঁরা ওই ডেটায় ট্রেন, টেস্ট বা পুনর্ব্যবহার করেন | উদ্দেশ্য, গঠন, সংগ্রহ, সুপারিশকৃত ব্যবহার |
| সিস্টেম কার্ড | মডেল, ওয়ার্কফ্লো ও মানুষ | মালিক, পর্যালোচক, ডিপ্লয়ার, সাপোর্ট কর্মী | ওপরের সবকিছু, সঙ্গে তদারকি, এসকালেশন, ব্যর্থতার ধরন |
পাঠক কে, সেটাই ভাষা ঠিক করে দেয়। একজন রিক্রুটারের দরকার এক লাইনে "কর্মীদের জন্য স্কোর ব্যবহার করবেন না"। রক্ষণাবেক্ষণকারীর দরকার পরীক্ষার ফল যে ফাইলে আছে সেটা। আবেদনকারীর জানা দরকার AI ব্যবহার হচ্ছে এবং মানুষের কাছে কীভাবে চাইবেন (পরের পাতা)। একটা কার্ড এঁদের সবার কাজে খুব কমই আসে; আগে ঠিক করুন কোন অংশ প্রকাশ্য আর কোনটা অভ্যন্তরীণ থাকবে।
আইনি নোট (২০২৬-১০-১২ অনুযায়ী; আইনি পরামর্শ নয়): ইউরোপীয় কমিশনের EU AI Act-বিষয়ক পাতা উচ্চ-ঝুঁকির AI সিস্টেমের প্রোভাইডারের দায়িত্বের মধ্যে ডকুমেন্টেশন ও ডিপ্লয়ারদের জন্য তথ্যের কথা তালিকাভুক্ত করেছে। পাতাটা আরও বলে, সাধারণ-উদ্দেশ্যের AI মডেলের প্রোভাইডারদের ডকুমেন্টেশন আর প্রশিক্ষণ-ডেটার একটা প্রকাশ্য সারাংশ দিতে হয়, এবং স্বেচ্ছামূলক General-Purpose AI Code of Practice-এ একটা Model Documentation Form আছে। এটাকে শুধু ধারণা হিসেবে নিন: কোনো দায়িত্ব আপনার ওপর পড়ে কি না, আর প্রয়োজনীয় ডকুমেন্টেশনে কী থাকতে হবে, তা নির্ভর করে আইনের পাঠ, আপনার ভূমিকা ও খাতের ওপর, আর প্রযোজ্য হওয়ার তারিখগুলো সংশোধিত হয়েছে। নিচের মতো একটা কার্ড নিজে থেকে কোনো আইনি প্রয়োজন পূরণ করে না। সূত্রের ধরন: কমিশনের AI নিয়ন্ত্রণ-কাঠামোর পাতা; আপনার দেশ ও খাতের জন্য বর্তমান সরকারি পাঠ যাচাই করুন।
কার্ড শুরু করুন: পরিচয়, ব্যবহার ও ব্যবহারকারী
কার্ডটা আমরা Python ডিকশনারি হিসেবে রাখি। ছোট একটা ফাইলে তিনটা সহায়ক ফাংশন থাকে। unknown() ইচ্ছে করে একটা ফাঁক লিখে রাখে: কী জানা নেই আর কেন, সেটা বলে।
# file: card.py
import json
def new_card(name, version, owner, as_of):
return {"card_type": "system card (draft)", "name": name, "version": version,
"owner": owner, "as_of": as_of}
def unknown(why):
"""An honest gap: say what is not known and why. Never replace it with a guess."""
return {"status": "UNKNOWN", "why": why}
def show(card, *keys):
print(json.dumps({k: card[k] for k in keys}, indent=2, ensure_ascii=False))উদ্দেশ্যমূলক ব্যবহার আর পরিধির বাইরের ব্যবহার চিহ্নিত করুন। উদ্দেশ্যমূলক ব্যবহার হলো যে কাজের জন্য ফিচারটা বানানো ও পরীক্ষা করা হয়েছে। পরিধির বাইরের ব্যবহার হলো যা সহজ হলেও কিছুতেই করা চলবে না। পরিধির বাইরের তালিকা আসে ১ নম্বর পাতার ইমপ্যাক্ট অ্যাসেসমেন্টে আপনার লেখা অপব্যবহারের তালিকা থেকে। একই ধাপে উদ্দিষ্ট ব্যবহারকারী-গোষ্ঠী নথিভুক্ত করুন: কারা ফিচারটা চালান, কারা এর দ্বারা প্রভাবিত, আর কাদের জন্য এটা নয়। পরীক্ষা শুধু যাদের অন্তর্ভুক্ত করেছে তাদেরই ছোঁয়, তাই এই তালিকা পাঠককে বলে প্রমাণ কতদূর পৌঁছায়।
টয় ডেটা: কার্ডের প্রথম অংশগুলো।
from card import new_card, unknown, show
card = new_card("ShortlistHelper (hypothetical)", "0.3",
"Head of recruitment (a role)", "2026-10-12")
card["intended_use"] = "order the CVs for ONE job, so a recruiter knows which to read first"
card["out_of_scope"] = [
"rejecting applicants without a person reading the CV",
"ranking or judging current staff",
"any decision about pay, promotion or dismissal",
"jobs other than the one the requirements were written for",
]
card["intended_users"] = {
"operators": "2 recruiters trained on the tool",
"affected": "applicants, who do not see their score",
"not_intended": "managers who see scores without the CV",
}
show(card, "intended_use", "out_of_scope", "intended_users"){
"intended_use": "order the CVs for ONE job, so a recruiter knows which to read first",
"out_of_scope": [
"rejecting applicants without a person reading the CV",
"ranking or judging current staff",
"any decision about pay, promotion or dismissal",
"jobs other than the one the requirements were written for"
],
"intended_users": {
"operators": "2 recruiters trained on the tool",
"affected": "applicants, who do not see their score",
"not_intended": "managers who see scores without the CV"
}
}শব্দগুলো ইচ্ছে করে সংকীর্ণ রাখা। "নিয়োগের উন্নতি" যাচাই করা যায় না; "একটা কাজের CV সাজানো" যায়। পাঠক এক নজরে এটাও দেখতে পান যে প্রতিটা স্কোরের ওপর একজন মানুষের (রিক্রুটারের) কাজ করার কথা।
মূল্যায়ন, সীমা, ভাষা ও অ্যাক্সেসিবিলিটি
মূল্যায়নের শর্ত ও পরীক্ষার কভারেজ লিখুন। একটা ফলের মানে হয় শুধু সেই শর্তের সঙ্গে, যাতে সেটা মাপা হয়েছে: কোন ডেটা, কোন ভাষা, কোন সময়, কে পরীক্ষা চালিয়েছে, আর প্রমাণ কোথায় রাখা আছে। যা কভার হয়নি সেটা ততটাই যত্নে লিখুন, যতটা যা হয়েছে সেটা লেখেন।
জানা কর্মক্ষমতার সীমাবদ্ধতা নথিভুক্ত করুন। একটা সীমাবদ্ধতা বলে ফিচারটা কোন উপায়ে দুর্বল, সঙ্গে তার প্রমাণ। প্রমাণ হতে পারে একটা টেস্ট ফাইল, ডিজাইন নিজেই, অথবা কেউ যাচাই না করলে unknown()।
card["evaluation"] = {
"question": "does the score order agree with a later full review of each CV?",
"data": "40 invented past applicants (Toy data), 2 comparison groups, 1 job type",
"conditions": {"cv_language": "English", "cv_format": "PDF and DOCX with text",
"period": "2026-09", "run_by": "internal team, not independent"},
"evidence_file": "eval/shortlist_check_01.csv",
"not_covered": ["scanned or image-only CVs", "CVs under 150 words",
"more than 1 job type", "groups other than the 2 compared"],
}
card["limitations"] = [
{"limit": "scores use CV text only; skills not written down are invisible",
"evidence": "design of the feature"},
{"limit": "40 people are too few to show that a group difference is absent",
"evidence": "eval/shortlist_check_01.csv"},
{"limit": "a score of 80 does not mean 80% chance of being suitable",
"evidence": unknown("no calibration test has been run")},
]
show(card, "evaluation", "limitations"){
"evaluation": {
"question": "does the score order agree with a later full review of each CV?",
"data": "40 invented past applicants (Toy data), 2 comparison groups, 1 job type",
"conditions": {
"cv_language": "English",
"cv_format": "PDF and DOCX with text",
"period": "2026-09",
"run_by": "internal team, not independent"
},
"evidence_file": "eval/shortlist_check_01.csv",
"not_covered": [
"scanned or image-only CVs",
"CVs under 150 words",
"more than 1 job type",
"groups other than the 2 compared"
]
},
"limitations": [
{
"limit": "scores use CV text only; skills not written down are invisible",
"evidence": "design of the feature"
},
{
"limit": "40 people are too few to show that a group difference is absent",
"evidence": "eval/shortlist_check_01.csv"
},
{
"limit": "a score of 80 does not mean 80% chance of being suitable",
"evidence": {
"status": "UNKNOWN",
"why": "no calibration test has been run"
}
}
]
}ভাষা ও অঞ্চলের কভারেজ লিখুন। একটা মডেল এক ভাষায় ভালো করলে অন্য ভাষায় খারাপ করতে পারে, আর CV-র রীতি দেশে দেশে আলাদা। কোন ভাষা ও জায়গা পরীক্ষা হয়েছে, কোনটা হয়নি, আর বাকিদের ক্ষেত্রে কী হয়, তা বলুন।
অ্যাক্সেসিবিলিটির বিবেচনা নথিভুক্ত করুন। জিজ্ঞেস করুন প্রতিবন্ধী মানুষেরা যে অংশগুলো ছোঁন, যেমন আপলোড ফর্ম, সেগুলো ব্যবহার করতে পারেন কি না, আর ফিচারটা তাঁদের নথিকে ন্যায্যভাবে দেখে কি না। মূল পথ ব্যর্থ হলে বিকল্প পথ কী, সেটাও লিখুন।
card["language_regional_coverage"] = {
"tested": ["English"],
"not_tested": ["Spanish", "Bangla", "Japanese", "CVs mixing two languages"],
"regions": unknown("past applicants' locations were not recorded"),
"rule": "a CV in an untested language is read by a person and not scored",
}
card["accessibility"] = {
"upload_form": unknown("not reviewed with assistive technology"),
"alternative_route": "applicants may email a CV; a recruiter reads it without a score",
"untested_risk": "unusual layouts (some made with accessibility tools) may parse badly",
}
show(card, "language_regional_coverage", "accessibility"){
"language_regional_coverage": {
"tested": [
"English"
],
"not_tested": [
"Spanish",
"Bangla",
"Japanese",
"CVs mixing two languages"
],
"regions": {
"status": "UNKNOWN",
"why": "past applicants' locations were not recorded"
},
"rule": "a CV in an untested language is read by a person and not scored"
},
"accessibility": {
"upload_form": {
"status": "UNKNOWN",
"why": "not reviewed with assistive technology"
},
"alternative_route": "applicants may email a CV; a recruiter reads it without a score",
"untested_risk": "unusual layouts (some made with accessibility tools) may parse badly"
}
}তদারকি ও ব্যর্থতার ধরন
মানুষের তদারকি ও এসকালেশনের পথ বর্ণনা করুন। লিখুন কে সিদ্ধান্ত নেয়, কে ওভাররাইড করতে পারে, কোন সংকেত কেসকে অন্য কারও কাছে পাঠায়, আর কে ফিচার বন্ধ করতে পারে। নাম নয়, ভূমিকা লিখুন। এমন পথ বাস্তবে কাজ করে কি না, তা পরীক্ষা করে মানুষের তদারকির ডিজাইন: অর্থবহ পর্যালোচনা, রাবার-স্ট্যাম্প নয় (১১ নম্বর পাতা)।
জানা ব্যর্থতার ধরন নথিভুক্ত করুন। ব্যর্থতার ধরন (failure mode) হলো সিস্টেম ভুল করার একটা নির্দিষ্ট উপায়। প্রতিটার জন্য লিখুন আপনি কীভাবে টের পাবেন আর তারপর কী হবে। যে ব্যর্থতার কোনো সংকেত নেই, সেটা এমন ঝুঁকি যা আপনি না দেখার সিদ্ধান্ত নিয়েছেন।
card["human_oversight"] = {
"decides": "a recruiter decides whom to interview; the score never decides alone",
"override": "any recruiter may open any CV, whatever its score",
"escalation": [
"parse warning on a CV -> read it by hand",
"applicant objects to a result -> Head of recruitment reviews it in 5 working days",
"2 or more suspected scoring errors in a week -> pause the feature",
],
"monitoring": "each month a person reads a sample of 50 low-ranked CVs",
}
card["failure_modes"] = [
{"mode": "layout not parsed, so a CV scores near 0",
"signal": "parse warning", "response": "read by hand"},
{"mode": "recruiters stop opening low-ranked CVs",
"signal": "monthly sample finds suitable CVs ranked low", "response": "review the workflow"},
{"mode": "score reused to rank staff",
"signal": "access log shows non-recruiting use", "response": "block access, report"},
]
show(card, "human_oversight", "failure_modes"){
"human_oversight": {
"decides": "a recruiter decides whom to interview; the score never decides alone",
"override": "any recruiter may open any CV, whatever its score",
"escalation": [
"parse warning on a CV -> read it by hand",
"applicant objects to a result -> Head of recruitment reviews it in 5 working days",
"2 or more suspected scoring errors in a week -> pause the feature"
],
"monitoring": "each month a person reads a sample of 50 low-ranked CVs"
},
"failure_modes": [
{
"mode": "layout not parsed, so a CV scores near 0",
"signal": "parse warning",
"response": "read by hand"
},
{
"mode": "recruiters stop opening low-ranked CVs",
"signal": "monthly sample finds suitable CVs ranked low",
"response": "review the workflow"
},
{
"mode": "score reused to rank staff",
"signal": "access log shows non-recruiting use",
"response": "block access, report"
}
]
}পেছনের ডেটার জন্য একটা ডেটাশিট
ডেটাসেটের ডেটাশিট বুঝুন। ওপরের টেস্ট ডেটা কোথাও থেকে এসেছে। ডেটাশিট সেই গল্প ডেটার সঙ্গে রাখে, গেব্রুর গবেষণাপত্রের চার শিরোনামে: উদ্দেশ্য, গঠন, সংগ্রহ-প্রক্রিয়া আর সুপারিশকৃত ব্যবহার। আমরা আরও যোগ করি ডেটাটা কিসের জন্য ব্যবহার করা উচিত নয়।
datasheet = {
"dataset": "past_applicants_2023_2025 (invented)",
"motivation": "to test whether the score order matches a later full review",
"composition": "40 past applicants (Toy data); fields: CV text, label, 2 group tags",
"collection": "taken from the agency's own archive; group tags added by hand for testing",
"recommended_uses": ["checking score order for the one job type"],
"not_recommended": ["training a new model", "any use outside the agency"],
"permission": unknown("applicants' consent for research use has not been checked"),
}
card["datasets"] = [datasheet]
show(datasheet, "motivation", "recommended_uses", "not_recommended", "permission"){
"motivation": "to test whether the score order matches a later full review",
"recommended_uses": [
"checking score order for the one job type"
],
"not_recommended": [
"training a new model",
"any use outside the agency"
],
"permission": {
"status": "UNKNOWN",
"why": "applicants' consent for research use has not been checked"
}
}শেষ এন্ট্রিটা সবচেয়ে কাজের: আবেদনকারীরা এই ব্যবহারে রাজি ছিলেন কি না, দলটা এখনও তা যাচাই করেনি। পরের পাতায় ডেটার অনুমতি বিস্তারিত আসবে। আপাতত শিক্ষা এই যে ডেটাশিট ফাঁকটাকে দৃশ্যমান করে।
কার্ড সেভ করুন আর ফাঁক গুনুন
import json, textwrap
def gaps(x):
if isinstance(x, dict):
return (1 if x.get("status") == "UNKNOWN" else 0) + sum(gaps(v) for v in x.values())
if isinstance(x, list):
return sum(gaps(v) for v in x)
return 0
with open("card.json", "w", encoding="utf-8") as f:
json.dump(card, f, indent=2, sort_keys=True, ensure_ascii=False)
print("top-level entries:", len(card))
print(textwrap.fill("sorted: " + ", ".join(sorted(card)), 90))
print("UNKNOWN entries:", gaps(card))top-level entries: 15
sorted: accessibility, as_of, card_type, datasets, evaluation, failure_modes,
human_oversight, intended_use, intended_users, language_regional_coverage, limitations,
name, out_of_scope, owner, version
UNKNOWN entries: 4চারটা সৎ ফাঁক লেখা আছে। এটা ভালো লক্ষণ, ব্যর্থতা নয়: যে কার্ডে কোথাও UNKNOWN নেই, সেখানে সাধারণত ভালো করে খোঁজা হয়নি। আরও খেয়াল করুন কার্ড কী দাবি করে না। সে বলে না যে ফিচারটা ন্যায্য, নির্ভুল বা অনুমোদিত।
কাজের জায়গায় এটা কোথায় দেখা যায়
দলগুলো প্রতিটা রিলিজের সঙ্গে একটা কার্ড জুড়ে দেয়, পাইলটের আগে পর্যালোচনা করে, আর মডেল, ডেটা বা ওয়ার্কফ্লো বদলালে হালনাগাদ করে। সিস্টেম কেনার সময় ভেন্ডররা এ ধরনের ডকুমেন্ট পাঠায়; ফাঁক খুঁজে সেগুলো পড়াই যথাযথ যাচাইয়ের প্রথম ধাপ (১৮ নম্বর পাতা)। অডিটর বা নতুন সহকর্মী প্রায়ই প্রথমে কার্ডটাই চান।
সাধারণ ভুল
- কার্ড একবার লেখা, লঞ্চের সময়। এটা পুরোনো হয়ে যায়। একটা ভার্সন আর
as_ofতারিখ দিন, আর প্রতিটা বদলের সঙ্গে হালনাগাদ করুন। - শুধু মডেল ডকুমেন্ট করা। ক্ষতি প্রায়ই চারপাশের ওয়ার্কফ্লোতে থাকে। মানুষ আর সিদ্ধান্তগুলোও বর্ণনা করুন।
- কার্ডকে সার্টিফিকেট বানানো। "আমাদের কার্ড আছে" নিরাপত্তার প্রমাণ নয়। পাঠক যেন প্রতিটা দাবির পেছনের পরীক্ষা দেখতে পান।
- ফাঁক খালি রাখা। খালি মানে হতে পারে "প্রযোজ্য নয়", "ভুলে গেছি" বা "কখনও দেখা হয়নি"। UNKNOWN আর কারণ লিখুন।
- সীমা লম্বা তালিকায় লুকানো। যে সীমা পাঠকের কাজ বদলে দেয়, সেটা সহজ ভাষায় আগে রাখুন।
নিজে চেষ্টা করুন
এই পাতার নেমস্পেস ব্যবহার করুন। অনুশীলনগুলো বিগিনার টিউটোরিয়ালের স্বচ্ছতা, ব্যাখ্যা ও জবাবদিহি: AI-এর সিদ্ধান্তের দায় কার পাতাটা আবার ছোঁয়।
- সহজ। প্রতিটা বক্তব্য মডেল কার্ড, ডেটাশিট না সিস্টেম কার্ডে সবচেয়ে ভালো মানায়, ঠিক করুন: (ক) "স্কোরটা শুধু ইংরেজি CV-তে পরীক্ষা হয়েছে।" (খ) "আগের CV-গুলো এজেন্সির নিজের আর্কাইভ থেকে এসেছে।" (গ) "পার্স সতর্কতায় এসকেলেট হওয়া প্রতিটা কেস একজন রিক্রুটার পড়েন।"
- মাঝারি। একজন সহকর্মী কার্ডে "বায়াস পরীক্ষা: পাস" যোগ করতে চান। এর বদলে এমন এন্ট্রি লিখুন যা কার্ড আজ সমর্থন করতে পারে, শুধু এই পাতার তথ্য দিয়ে। সেগুলো কার্ডে যোগ করে প্রিন্ট করুন।
- কঠিন।
paths(card)লিখুন, যা প্রতিটা UNKNOWN এন্ট্রির পথ ফেরত দেয়, যেমনlanguage_regional_coverage.regions, আর সাজিয়ে প্রিন্ট করুন।
উত্তর
সহজ। (ক) মডেল কার্ড (মূল্যায়নের শর্ত), তবে সীমাটা পুরো সিস্টেমকে প্রভাবিত করলে সিস্টেম কার্ডেও; (খ) ডেটাশিট (সংগ্রহ-প্রক্রিয়া); (গ) সিস্টেম কার্ড (তদারকি ও এসকালেশন)।
পাস চেকলিস্ট: প্রতিটা উত্তর বর্ণিত জিনিসটার নাম (মডেল, ডেটা বা ওয়ার্কফ্লো) বলে, শুধু শিরোনাম নয়। দুর্বল উত্তরে সবকিছু মডেল কার্ডে রাখা হয়।
মাঝারি।
card["fairness_checks"] = {
"done": "score order compared with a later full review, for 2 groups, on 40 people",
"result_location": "eval/shortlist_check_01.csv",
"not_done": ["tests for other groups", "tests with larger samples", "independent review"],
"claim": "no claim is made that the feature is fair or free of bias",
}
show(card, "fairness_checks"){
"fairness_checks": {
"done": "score order compared with a later full review, for 2 groups, on 40 people",
"result_location": "eval/shortlist_check_01.csv",
"not_done": [
"tests for other groups",
"tests with larger samples",
"independent review"
],
"claim": "no claim is made that the feature is fair or free of bias"
}
}পাস চেকলিস্ট: কী করা হয়েছে আর প্রমাণ কোথায়, তা বলে; কী করা হয়নি তার তালিকা দেয়; পাস/ফেলের রায় দেয় না। দুর্বল উত্তরে "passed" শব্দটা থেকে যায় বা একটা সংখ্যা বানানো হয়।
কঠিন।
def paths(x, prefix=""):
found = []
if isinstance(x, dict):
if x.get("status") == "UNKNOWN":
found.append(prefix)
for key, value in x.items():
found += paths(value, f"{prefix}.{key}" if prefix else key)
elif isinstance(x, list):
for i, value in enumerate(x):
found += paths(value, f"{prefix}[{i}]")
return found
for p in sorted(paths(card)):
print(p)accessibility.upload_form
datasets[0].permission
language_regional_coverage.regions
limitations[2].evidenceপাস চেকলিস্ট: রিকার্সন ডিকশনারি ও লিস্ট দুটোই সামলায়; পথগুলো পড়ার মতো; সংখ্যাটা আগের ব্লকের সঙ্গে মেলে (চারটা)। ভালো উত্তর খেয়াল করে যে এটা শুধু সেই ফাঁক ধরে যা কেউ UNKNOWN লিখেছে, যে ফাঁক কেউ খেয়ালই করেনি তা নয়।
সারসংক্ষেপ
- মডেল কার্ড মডেলকে বর্ণনা করে, ডেটাশিট ডেটাসেটকে, আর সিস্টেম কার্ড পুরো ওয়ার্কফ্লোকে তার মানুষসহ। তিনটাই ডকুমেন্টেশনের পদ্ধতি, সার্টিফিকেট নয়।
- উদ্দেশ্যমূলক ব্যবহার, পরিধির বাইরের ব্যবহার আর ব্যবহারকারী-গোষ্ঠী যাচাই করার মতো সংকীর্ণভাবে লিখুন।
- মূল্যায়নের শর্ত, সীমাবদ্ধতা, ভাষা ও অঞ্চল, অ্যাক্সেসিবিলিটি, তদারকি ও ব্যর্থতার ধরন প্রমাণসহ লিখুন।
- খালি রাখা বা অনুমান করার বদলে UNKNOWN আর কারণ লিখুন।
- প্রতিটা কার্ডে ভার্সন ও তারিখ দিন; এটা একটা সময়ে একটা ভার্সনের বর্ণনা।
এরপর: প্রকাশ ও ডকুমেন্টেশন যাচাই: Python দিয়ে সিস্টেম কার্ড পরীক্ষা পাতায় যোগ হবে ভার্সন, ডেটার অনুমতি, সহজ ভাষার একটা প্রকাশ-বিবৃতি, আর অনুপস্থিত প্রমাণ ও স্ববিরোধ ধরার স্বয়ংক্রিয় পরীক্ষা।