পাঠ ০৯ · ৫৭-এর মধ্যে · মডিউল ২
Home / Courses / Ethics in Computing & AI Safety / ফ্রেমওয়ার্ক প্রয়োগ

ফ্রেমওয়ার্কগুলো একসাথে প্রয়োগ করা — একটি worked example

Applying frameworks together — a worked ethical decision
১১ মিনিট পড়া শুরু · Beginner Python কোডসহ সম্পূর্ণ বাংলায়

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

  • কীভাবে একই দ্বিধায় তিনটি ভিন্ন ফ্রেমওয়ার্ক একসাথে প্রয়োগ করতে হয়
  • Python দিয়ে একটি সম্পূর্ণ, স্বয়ংসম্পূর্ণ কোড — তিনটি লেন্সের রায় একসাথে গণনা ও প্রিন্ট করা
  • ফ্রেমওয়ার্কগুলো কখন একমত হয় এবং কখন সত্যিকারের দ্বন্দ্বে পড়ে তার একটি গণনা করা উদাহরণ
  • কেন এই কোর্স কোনো একটি ফ্রেমওয়ার্ককে "বিজয়ী" ঘোষণা না করে বহু-লেন্স চিন্তাভাবনা শেখানোর উপর জোর দেয়

১ · একই দ্বিধা, চারটি প্রশ্ন

মডিউল ২-এর চারটি পাঠ একই ধরনের একটি প্রশ্ন করেছে — একটি এনগেজমেন্ট ফিচার শিপ করা উচিত কিনা — কিন্তু প্রতিটি পাঠ একেবারে ভিন্ন কোণ থেকে। ইউটিলিটারিয়ানিজম জিজ্ঞেস করেছে "মোট সমষ্টিতে কোনটা ভালো?" (পাঠ ০৫)। ডিয়ন্টোলজি জিজ্ঞেস করেছে "কোন ডিজাইন হার্ড কনস্ট্রেইন্ট মেনে চলে?" (পাঠ ০৬)। ভার্চু এথিক্স জিজ্ঞেস করেছে "একজন সৎ, যত্নশীল, সাহসী ইঞ্জিনিয়ার কী করতেন?" (পাঠ ০৭)। কন্ট্রাক্টুয়ালিজম জিজ্ঞেস করেছে "ভেইল অফ ইগনোরেন্সের পেছনে দাঁড়িয়ে, সবচেয়ে খারাপ অবস্থাটা কোথায় সবচেয়ে সহনীয়?" (পাঠ ০৮)।

এই পাঠে আমরা তিনটি গণনাযোগ্য লেন্স (ইউটিলিটারিয়ান, ডিয়ন্টোলজিক্যাল, ম্যাক্সিমিন) একসাথে, একই কোড সেলে, তিনটি ডিজাইন বিকল্পের বিপরীতে প্রয়োগ করব — ship_as_is, no_ship, এবং পাঠ ০৬-এ প্রথম আসা ship_with_safeguards। প্রতিটি পাঠ স্বয়ংসম্পূর্ণ হওয়ায় ডেটা নিচে নতুন করে সংজ্ঞায়িত করা হলো, কিন্তু সংখ্যাগুলো পাঠ ০৫-০৬-০৮-এর সাথে সামঞ্জস্যপূর্ণ।

Python
# একটি একক সিন্থেটিক দ্বিধা (পাঠ ০৫, ০৬ ও ০৮-এ ব্যবহৃত এনগেজমেন্ট-ফিচার দৃশ্যকল্প), তিনটি ডিজাইন বিকল্প,
# এবং তিনটি ক্লাসিক্যাল ফ্রেমওয়ার্ক একসাথে প্রয়োগ -- প্রতিটি পাঠ স্বয়ংসম্পূর্ণ, তাই সব ডেটা এখানে নতুন
# করে সংজ্ঞায়িত করা হলো

stakeholders = {
    "সাধারণ ব্যবহারকারী": 900_000,
    "কমপালসিভ-ইউজ ঝুঁকিতে থাকা সংখ্যালঘু": 100_000,
    "কোম্পানি (একক প্রাতিষ্ঠানিক স্টেকহোল্ডার)": 1,
}

# প্রতিটি ডিজাইনে, প্রতিটি গোষ্ঠীর জন্য (probability, magnitude 1-10, sign +1/-1)
utility_inputs = {
    "ship_as_is": {
        "সাধারণ ব্যবহারকারী":                       (0.85, 3, +1),
        "কমপালসিভ-ইউজ ঝুঁকিতে থাকা সংখ্যালঘু":        (0.40, 9, -1),
        "কোম্পানি (একক প্রাতিষ্ঠানিক স্টেকহোল্ডার)":   (0.95, 9, +1),
    },
    "no_ship": {
        "সাধারণ ব্যবহারকারী":                       (0.30, 1, -1),
        "কমপালসিভ-ইউজ ঝুঁকিতে থাকা সংখ্যালঘু":        (0.40, 9, +1),
        "কোম্পানি (একক প্রাতিষ্ঠানিক স্টেকহোল্ডার)":   (0.90, 2, -1),
    },
    "ship_with_safeguards": {
        "সাধারণ ব্যবহারকারী":                       (0.80, 3, +1),
        "কমপালসিভ-ইউজ ঝুঁকিতে থাকা সংখ্যালঘু":        (0.15, 9, -1),
        "কোম্পানি (একক প্রাতিষ্ঠানিক স্টেকহোল্ডার)":   (0.90, 7, +1),
    },
}

# প্রতিটি ডিজাইনের হার্ড কনস্ট্রেইন্ট ডেটা (পাঠ ০৬)
hard_constraints_data = {
    "ship_as_is":           {"discriminates": False, "informed_consent": False, "opt_out": False},
    "no_ship":              {"discriminates": False, "informed_consent": True,  "opt_out": True},
    "ship_with_safeguards": {"discriminates": False, "informed_consent": True,  "opt_out": True},
}

constraints = [
    ("protected characteristic-এর ভিত্তিতে বৈষম্য নয়", lambda d: d["discriminates"] is False),
    ("ঝুঁকিপূর্ণ ফিচারে informed consent",              lambda d: d["informed_consent"] is True),
    ("at-risk ব্যবহারকারীদের জন্য opt-out/সুরক্ষা",      lambda d: d["opt_out"] is True),
]

def utilitarian_verdict(design):
    return sum(
        prob * magnitude * sign * stakeholders[group]
        for group, (prob, magnitude, sign) in utility_inputs[design].items()
    )

def deontological_verdict(design):
    d = hard_constraints_data[design]
    return all(check(d) for _, check in constraints)

def maximin_verdict(design):
    per_person = {
        group: prob * magnitude * sign
        for group, (prob, magnitude, sign) in utility_inputs[design].items()
    }
    worst_group = min(per_person, key=per_person.get)
    return per_person[worst_group], worst_group

print("ডিজাইন-ভিত্তিক ফলাফল (তিনটি ফ্রেমওয়ার্ক):\n")
for design in utility_inputs:
    util = utilitarian_verdict(design)
    deon_pass = deontological_verdict(design)
    floor, worst_group = maximin_verdict(design)
    print(f"=== {design} ===")
    print(f"  ইউটিলিটারিয়ান (aggregate):     {util:+,.2f}")
    print(f"  ডিয়ন্টোলজিক্যাল রায়:           {'PERMISSIBLE' if deon_pass else 'IMPERMISSIBLE'}")
    print(f"  Maximin floor (সবচেয়ে খারাপ):  {floor:+.2f}  [{worst_group}]")
    print()

best_utilitarian = max(utility_inputs, key=utilitarian_verdict)
permissible = [d for d in utility_inputs if deontological_verdict(d)]
best_maximin = max(utility_inputs, key=lambda d: maximin_verdict(d)[0])

print("চূড়ান্ত তুলনা --")
print(f"  ইউটিলিটারিয়ান সেরা পছন্দ:         {best_utilitarian}")
print(f"  ডিয়ন্টোলজিক্যালি অনুমোদিত ডিজাইন:  {permissible}")
print(f"  কন্ট্রাক্টুয়ালিস্ট (maximin) সেরা: {best_maximin}")

    
Run করলে দেখা যাবে — ship_as_is: utilitarian +1,935,008.55, IMPERMISSIBLE, maximin floor −3.60। no_ship: utilitarian +89,998.20, PERMISSIBLE, maximin floor −1.80। ship_with_safeguards: utilitarian +2,025,006.30, PERMISSIBLE, maximin floor −1.35। চূড়ান্ত তুলনায় — তিনটি লেন্সই ship_with_safeguards-কে সেরা/অনুমোদিত হিসেবে চিহ্নিত করে: এটির ইউটিলিটারিয়ান অ্যাগ্রিগেট সবচেয়ে বেশি, এটি ডিয়ন্টোলজিক্যালি অনুমোদিত, এবং এটির maximin floor সবচেয়ে উঁচু।

২ · কখন একমত, কখন দ্বিমত

এই ফলাফলটি প্রথম দেখায় মনে হতে পারে "তাহলে সবসময়ই একটি সেরা উত্তর খুঁজে পাওয়া সম্ভব, যা সব ফ্রেমওয়ার্ককে সন্তুষ্ট করে" — কিন্তু এটি পুরো ছবি নয়। লক্ষ্য করুন, যদি ship_with_safeguards বিকল্পটি কখনো আবিষ্কৃত না হতো, এবং প্রকৌশলী দলকে শুধু ship_as_is বনাম no_ship-এর মধ্যে বেছে নিতে হতো, তাহলে ফ্রেমওয়ার্কগুলো সত্যিই দ্বিমত করত:

  • ইউটিলিটারিয়ানিজম ship_as_is-কে সমর্থন করত (+1,935,008.55 বনাম +89,998.20 — পাঠ ০৫)।
  • ডিয়ন্টোলজি ship_as_is-কে অননুমোদিত ঘোষণা করত (পাঠ ০৬)।
  • ম্যাক্সিমিন no_ship-কে সমর্থন করত (মেঝে −1.80 বনাম −3.60 — পাঠ ০৮)।

অর্থাৎ, দুটি বিকল্পের সরল তুলনায় ইউটিলিটারিয়ানিজম একদিকে, আর ডিয়ন্টোলজি ও ম্যাক্সিমিন অন্যদিকে দাঁড়ায় — একটি প্রকৃত, গণনা করা দ্বন্দ্ব। ship_with_safeguards আবিষ্কার হওয়ার পরই এই দ্বন্দ্ব "দ্রবীভূত" (dissolve) হয়ে যায়, কারণ এটি সংখ্যালঘুর ক্ষতি (প্রতি-ব্যক্তি −3.60 থেকে −1.35-এ) উল্লেখযোগ্যভাবে কমিয়ে সাধারণ ব্যবহারকারী ও কোম্পানির উপকারের প্রায় পুরোটাই ধরে রাখে।

সৎ সংশ্লেষণ · Honest synthesis

এই worked example থেকে দুটি ভিন্ন, সমান গুরুত্বপূর্ণ শিক্ষা পাওয়া যায়। প্রথমত — যখন ফ্রেমওয়ার্কগুলো দ্বিমত করে, সেই দ্বিমতটি প্রায়ই একটি সংকেত যে আপনি এখনো সবচেয়ে ভালো বিকল্পটি খুঁজে পাননি; একটু বেশি ডিজাইন ইঞ্জিনিয়ারিং প্রচেষ্টা (এখানে: সুরক্ষা ব্যবস্থা যোগ করা) কখনো কখনো আপাত-অসম্ভব ট্রেড-অফকে সত্যিই দূর করে দিতে পারে। দ্বিতীয়ত, এবং সমান গুরুত্বপূর্ণভাবে — এটি সবসময় সম্ভব নয়। এমন অনেক বাস্তব দ্বিধা আছে যেখানে কোনো তৃতীয় "win-win" বিকল্প থাকে না, এবং তখন সত্যিকারের একটি মূল্যবোধের সিদ্ধান্ত নিতে হয় — সামগ্রিক উপযোগ, অলঙ্ঘনীয় অধিকার, নাকি সবচেয়ে খারাপ অবস্থানের সুরক্ষা — কোনটাকে বেশি ওজন দেবেন। এই কোর্স সেই সিদ্ধান্তটি আপনার হয়ে নেয় না — পাঠ ০৭-এর ভার্চু এথিক্স ঠিক এই কারণেই মনে করিয়ে দেয় যে এই ধরনের মুহূর্তে একজন ইঞ্জিনিয়ারের ব্যবহারিক বিচারবুদ্ধিই (phronesis) শেষ পর্যন্ত কাজে লাগে, কোনো একক সূত্র নয়।

মূল কথা · Key takeaway

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

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

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

প্র ০১ কেন তিনটি ফ্রেমওয়ার্কই শেষ পর্যন্ত ship_with_safeguards-এর দিকে একমত হয়, যদিও তারা একেবারে ভিন্ন প্রশ্ন জিজ্ঞেস করে?

কারণ ship_with_safeguards একই সাথে তিনটি সমস্যার সমাধান করে — এটি সাধারণ ব্যবহারকারী ও কোম্পানির জন্য উপকারের প্রায় পুরোটাই ধরে রাখে (ইউটিলিটারিয়ান স্কোর ভালো রাখে), সম্মতি ও অপ্ট-আউট যোগ করে হার্ড কনস্ট্রেইন্ট মেনে চলে (ডিয়ন্টোলজিক্যালি অনুমোদিত), এবং একই সাথে সংখ্যালঘুর ক্ষতির সম্ভাবনা উল্লেখযোগ্যভাবে কমিয়ে দেয় (উঁচু maximin floor)। এটি একটি কাকতালীয় ঘটনা নয় — একটি ভালো নিরাপত্তা ব্যবস্থা প্রায়ই ঠিক এই তিনটি লক্ষ্যকেই একসাথে এগিয়ে নেয়।

প্র ০২ যদি শুধু ship_as_is ও no_ship-এর মধ্যে বেছে নিতে হতো (তৃতীয় বিকল্প ছাড়া), তাহলে কোন ফ্রেমওয়ার্কের রায়কে আপনি বেশি ওজন দিতেন, এবং কেন?

এর কোনো একক "সঠিক" উত্তর নেই — এটিই এই পাঠের কেন্দ্রীয় বিষয়। কেউ যুক্তি দিতে পারেন সামগ্রিক উপকার (ইউটিলিটারিয়ান) সবচেয়ে গুরুত্বপূর্ণ; কেউ যুক্তি দিতে পারেন সংখ্যালঘুর সম্মতির অধিকার (ডিয়ন্টোলজিক্যাল) কখনো লঙ্ঘন করা উচিত নয়; কেউ যুক্তি দিতে পারেন সবচেয়ে খারাপ অবস্থার সুরক্ষা (ম্যাক্সিমিন) অগ্রাধিকার পাওয়া উচিত। প্রতিটি অবস্থানই একটি যুক্তিসঙ্গত, প্রতিরক্ষাযোগ্য নৈতিক দৃষ্টিভঙ্গি থেকে আসে।

প্র ০৩ এই পাঠ কি বলছে যে তিনটি ফ্রেমওয়ার্ক আসলে "একই কথা ভিন্নভাবে বলছে"?

না — এই নির্দিষ্ট উদাহরণে তারা একটি সাধারণ বিকল্পে একমত হয়েছে, কিন্তু তারা মৌলিকভাবে ভিন্ন প্রশ্ন জিজ্ঞেস করে এবং ভিন্ন উত্তর দিতে পারে (যেমন ship_as_is বনাম no_ship-এর সরল তুলনায় দেখা গেছে)। এই লেসনের বার্তা হলো তারা পরিপূরক — প্রতিটি একে অপরের অন্ধ বিন্দু ধরিয়ে দেয় — "একই কথা" নয়।

অনুশীলন

  1. চিন্তা করুন: এমন একটি বাস্তব প্রযুক্তি-নীতি বিতর্কের কথা ভাবুন (যেমন কনটেন্ট মডারেশন, বা ডেটা সংগ্রহের নীতি) যেখানে আপনি মনে করেন ইউটিলিটারিয়ান ও রাইটস-ভিত্তিক (ডিয়ন্টোলজিক্যাল) যুক্তি সত্যিকারের বিপরীত দিকে দাঁড়ায়। কোনো তৃতীয় বিকল্প কি সেই দ্বন্দ্ব কমাতে পারত?

    একটি সাধারণ উদাহরণ হলো ব্যক্তিগত ডেটা ব্যবহার করে বিজ্ঞাপন-টার্গেটিং — ইউটিলিটারিয়ান যুক্তি বলতে পারে এটি সামগ্রিকভাবে ভালো ব্যবহারকারী অভিজ্ঞতা ও রাজস্ব দেয়, কিন্তু রাইটস-ভিত্তিক যুক্তি বলবে সম্মতি ছাড়া ব্যক্তিগত ডেটা ব্যবহার অন্যায্য। একটি মধ্যবর্তী বিকল্প — স্বচ্ছ অপ্ট-ইন সহ পার্সোনালাইজেশন — প্রায়ই উভয় দিক আংশিকভাবে সন্তুষ্ট করতে পারে, ঠিক এই পাঠের ship_with_safeguards-এর মতো (এই বিষয়ে বিস্তারিত পাঠ ১১-এ)।

  2. পরীক্ষা করুন: কোড সেলে ship_with_safeguards-এর সংখ্যালঘুর probability 0.15 থেকে 0.35-এ বাড়িয়ে Run চেপে দেখুন তিনটি রায় কীভাবে বদলায়।

    সংখ্যালঘুর প্রতি-ব্যক্তি ফলাফল হবে 0.35 * 9 * -1 = -3.15, ফলে utilitarian aggregate কমে দাঁড়াবে 900,000*2.4 + 100,000*-3.15 + 6.3 = 1,845,006.30 — যা এখন ship_as_is-এর +1,935,008.55-এর চেয়ে কম, তাই ইউটিলিটারিয়ান সেরা পছন্দ উল্টে ship_as_is হয়ে যাবে। maximin floorও কমে −3.15 হবে, যা no_ship-এর −1.80-এর চেয়ে খারাপ, তাই ম্যাক্সিমিন সেরা পছন্দও উল্টে no_ship হয়ে যাবে। এটি দেখায় "তিনটি ফ্রেমওয়ার্কের একমত হওয়া" ফলাফলটি নির্দিষ্ট সংখ্যার উপর নির্ভরশীল — একটি ভঙ্গুর, নিশ্চিত নয় এমন সমাধান, প্যারামিটার বদলালেই দ্বন্দ্ব আবার ফিরে আসতে পারে।

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

আগের পাঠ
কন্ট্রাক্টুয়ালিজম ও “ভেইল অফ ইগনোরেন্স”