মডেল প্রতিকার কেস স্টাডি

এই নোটবুকে, আমরা বিষাক্ত বা ক্ষতিকারক বলে বিবেচিত হতে পারে এমন লিখিত বিষয়বস্তু শনাক্ত করার জন্য একটি পাঠ্য শ্রেণিবিন্যাসকারীকে প্রশিক্ষিত করব এবং কিছু ন্যায্যতার উদ্বেগের প্রতিকার করতে MinDiff প্রয়োগ করব। আমাদের কর্মপ্রবাহে, আমরা করব:

  1. সংবেদনশীল গোষ্ঠীর রেফারেন্স ধারণকারী পাঠ্যে আমাদের বেসলাইন মডেলের কার্যকারিতা মূল্যায়ন করুন।
  2. MinDiff-এর সাথে প্রশিক্ষণের মাধ্যমে যেকোন কম পারফরমিং গ্রুপে কর্মক্ষমতা উন্নত করুন।
  3. আমাদের নির্বাচিত মেট্রিকে নতুন মডেলের কর্মক্ষমতা মূল্যায়ন করুন।

আমাদের উদ্দেশ্য হল খুব ন্যূনতম ওয়ার্কফ্লো সহ MinDiff কৌশলের ব্যবহার প্রদর্শন করা, মেশিন লার্নিংয়ে ন্যায্যতার জন্য নীতিগত পদ্ধতির আউট করা নয়। যেমন, আমাদের মূল্যায়ন শুধুমাত্র একটি সংবেদনশীল বিভাগ এবং একটি একক মেট্রিকের উপর ফোকাস করবে। আমরা ডেটাসেটের সম্ভাব্য ত্রুটিগুলিকেও সম্বোধন করি না, বা আমাদের কনফিগারেশনগুলিকে টিউন করি না। একটি প্রোডাকশন সেটিংয়ে, আপনি কঠোরতার সাথে এর প্রতিটির সাথে যোগাযোগ করতে চান। সততা জন্য মূল্যায়ন সম্পর্কে আরো তথ্যের জন্য, দেখুন এই সহায়িকার

সেটআপ

আমরা ফেয়ারনেস ইন্ডিকেটর এবং টেনসরফ্লো মডেল রিমিডিয়েশন ইনস্টল করে শুরু করি।

ইন্সটল করে

মূল্যায়নের জন্য MinDiff এবং ন্যায্যতা সূচক সহ সমস্ত প্রয়োজনীয় উপাদান আমদানি করুন।

আমদানি

আমরা একটি ইউটিলিটি ফাংশন ব্যবহার করে প্রি-প্রসেসড ডেটা ডাউনলোড করি এবং মডেলের আউটপুট আকৃতির সাথে মেলে লেবেলগুলি প্রস্তুত করি। পরবর্তী মূল্যায়ন দ্রুত করার জন্য ফাংশনটি TFRecords হিসাবে ডেটা ডাউনলোড করে। বিকল্পভাবে, আপনি যেকোনো উপলব্ধ ইউটিলিটি রূপান্তর ফাংশনের সাথে পান্ডাস ডেটাফ্রেমকে TFRecords-এ রূপান্তর করতে পারেন।

# We use a helper utility to preprocessed data for convenience and speed.
data_train, data_validate, validate_tfrecord_file, labels_train, labels_validate = min_diff_keras_utils.download_and_process_civil_comments_data()
Downloading data from https://storage.googleapis.com/civil_comments_dataset/train_df_processed.csv
345702400/345699197 [==============================] - 8s 0us/step
Downloading data from https://storage.googleapis.com/civil_comments_dataset/validate_df_processed.csv
229974016/229970098 [==============================] - 5s 0us/step
Downloading data from https://storage.googleapis.com/civil_comments_dataset/validate_tf_processed.tfrecord
324943872/324941336 [==============================] - 9s 0us/step

আমরা কয়েকটি দরকারী ধ্রুবক সংজ্ঞায়িত করি। আমরা এতে মডেল শেখাতে হবে 'comment_text' বৈশিষ্ট্য হিসাবে আমাদের লক্ষ্য ট্যাগ 'toxicity' । মনে রাখবেন যে এখানে ব্যাচের আকার নির্বিচারে বেছে নেওয়া হয়েছে, তবে একটি উৎপাদন সেটিংয়ে আপনাকে সেরা পারফরম্যান্সের জন্য এটি টিউন করতে হবে।

TEXT_FEATURE = 'comment_text'
LABEL = 'toxicity'
BATCH_SIZE = 512

এলোমেলো বীজ সেট করুন। (মনে রাখবেন যে এটি ফলাফলগুলিকে সম্পূর্ণরূপে স্থিতিশীল করে না।)

বীজ

বেসলাইন মডেল সংজ্ঞায়িত করুন এবং প্রশিক্ষণ দিন

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

use_pretrained_model = True

if use_pretrained_model:
  URL = 'https://storage.googleapis.com/civil_comments_model/baseline_model.zip'
  BASE_PATH = tempfile.mkdtemp()
  ZIP_PATH = os.path.join(BASE_PATH, 'baseline_model.zip')
  MODEL_PATH = os.path.join(BASE_PATH, 'tmp/baseline_model')

  r = requests.get(URL, allow_redirects=True)
  open(ZIP_PATH, 'wb').write(r.content)

  with zipfile.ZipFile(ZIP_PATH, 'r') as zip_ref:
    zip_ref.extractall(BASE_PATH)
  baseline_model = tf.keras.models.load_model(
      MODEL_PATH, custom_objects={'KerasLayer' : hub.KerasLayer})
else:
  optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)
  loss = tf.keras.losses.BinaryCrossentropy()

  baseline_model = min_diff_keras_utils.create_keras_sequential_model()

  baseline_model.compile(optimizer=optimizer, loss=loss, metrics=['accuracy'])

  baseline_model.fit(x=data_train[TEXT_FEATURE],
                     y=labels_train,
                     batch_size=BATCH_SIZE,
                     epochs=20)

আমরা অর্ডার ব্যবহার নির্ণয় করা মডেল সংরক্ষণ ফর্সা সূচক

base_dir = tempfile.mkdtemp(prefix='saved_models')
baseline_model_location = os.path.join(base_dir, 'model_export_baseline')
baseline_model.save(baseline_model_location, save_format='tf')
INFO:tensorflow:Assets written to: /tmp/saved_models867b8d74/model_export_baseline/assets
INFO:tensorflow:Assets written to: /tmp/saved_models867b8d74/model_export_baseline/assets

এরপর আমরা ফেয়ারনেস ইন্ডিকেটর চালাই। একটি অনুস্মারক হিসেবে, আমরা শুধু একটি বিভাগ, ধর্মীয় গ্রুপ উল্লেখ মন্তব্যের জন্য স্লাইসড মূল্যায়ন সঞ্চালন যাচ্ছি। একটি উত্পাদন পরিবেশে, আমরা কোন বিভাগ এবং মেট্রিক্স জুড়ে মূল্যায়ন করতে হবে তা নির্ধারণ করার জন্য একটি চিন্তাশীল পদ্ধতি গ্রহণ করার পরামর্শ দিই।

মডেল পারফরম্যান্স গণনা করার জন্য, ইউটিলিটি ফাংশন মেট্রিক্স, স্লাইস এবং ক্লাসিফায়ার থ্রেশহোল্ডের জন্য কয়েকটি সুবিধাজনক পছন্দ করে।

# We use a helper utility to hide the evaluation logic for readability.
base_dir = tempfile.mkdtemp(prefix='eval')
eval_dir = os.path.join(base_dir, 'tfma_eval_result')
eval_result = fi_util.get_eval_results(
    baseline_model_location, eval_dir, validate_tfrecord_file)
WARNING:absl:Tensorflow version (2.5.0) found. Note that TFMA support for TF 2.0 is currently in beta
WARNING:apache_beam.runners.interactive.interactive_environment:Dependencies required for Interactive Beam PCollection visualization are not available, please use: `pip install apache-beam[interactive]` to install necessary dependencies to enable all data visualization features.
WARNING:apache_beam.io.tfrecordio:Couldn't find python-snappy so the implementation of _TFRecordUtil._masked_crc32c is not as fast as it could be.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow_model_analysis/writers/metrics_plots_and_validations_writer.py:113: tf_record_iterator (from tensorflow.python.lib.io.tf_record) is deprecated and will be removed in a future version.
Instructions for updating:
Use eager execution and: 
`tf.data.TFRecordDataset(path)`
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow_model_analysis/writers/metrics_plots_and_validations_writer.py:113: tf_record_iterator (from tensorflow.python.lib.io.tf_record) is deprecated and will be removed in a future version.
Instructions for updating:
Use eager execution and: 
`tf.data.TFRecordDataset(path)`

রেন্ডার মূল্যায়ন ফলাফল

widget_view.render_fairness_indicator(eval_result)
FairnessIndicatorViewer(slicingMetrics=[{'sliceValue': 'Overall', 'slice': 'Overall', 'metrics': {'accuracy': …

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

আমরা FPR-এ ফোকাস করা বেছে নিয়েছি, কারণ উচ্চতর FPR মানে এই পরিচয় গোষ্ঠীর উল্লেখ করা মন্তব্যগুলি অন্য মন্তব্যের তুলনায় ভুলভাবে বিষাক্ত হিসাবে পতাকাঙ্কিত হওয়ার সম্ভাবনা বেশি। এটি ধর্ম সম্পর্কে কথোপকথনে নিযুক্ত ব্যবহারকারীদের জন্য অসম ফলাফলের দিকে নিয়ে যেতে পারে, কিন্তু মনে রাখবেন যে অন্যান্য মেট্রিক্সে বৈষম্য অন্যান্য ধরনের ক্ষতির দিকে নিয়ে যেতে পারে।

MinDiff মডেল সংজ্ঞায়িত করুন এবং প্রশিক্ষণ দিন

এখন, আমরা দুর্বল ধর্মীয় গোষ্ঠীগুলির জন্য FPR উন্নত করার চেষ্টা করব৷ আমরা ব্যবহার তা করার চেষ্টা করব MinDiff , একটি উপসম কৌশল প্রশিক্ষণের সময় কর্মক্ষমতা অসমতা দণ্ড আরোপ করে আপনার ডেটার টুকরা জুড়ে ত্রুটি হার সামঞ্জস্য বজায় রাখা কামনা করে। যখন আমরা MinDiff প্রয়োগ করি, তখন মডেলের কর্মক্ষমতা অন্যান্য স্লাইসে কিছুটা হ্রাস পেতে পারে। যেমন, MinDiff এর সাথে আমাদের লক্ষ্যগুলি হবে:

  • কম পারফরমিং গ্রুপের জন্য উন্নত কর্মক্ষমতা
  • অন্যান্য গোষ্ঠী এবং সামগ্রিক কর্মক্ষমতার জন্য সীমিত অবনতি

আপনার ডেটা প্রস্তুত করুন

MinDiff ব্যবহার করতে, আমরা দুটি অতিরিক্ত ডেটা বিভাজন তৈরি করি:

  • সংখ্যালঘু গোষ্ঠীগুলিকে উল্লেখ করে অ-বিষাক্ত উদাহরণগুলির জন্য একটি বিভাজন: আমাদের ক্ষেত্রে, এতে আমাদের কম পারফরমিং পরিচয় শর্তাবলীর উল্লেখ সহ মন্তব্য অন্তর্ভুক্ত থাকবে। আমরা কিছু গোষ্ঠীকে অন্তর্ভুক্ত করি না কারণ এখানে খুব কম উদাহরণ রয়েছে, যা বিস্তৃত আত্মবিশ্বাসের ব্যবধানের সীমার সাথে উচ্চতর অনিশ্চয়তার দিকে পরিচালিত করে।
  • সংখ্যাগরিষ্ঠ গোষ্ঠীর উল্লেখ করে অ-বিষাক্ত উদাহরণের জন্য একটি বিভাজন।

কম পারফরমিং ক্লাসের জন্য পর্যাপ্ত উদাহরণ থাকা গুরুত্বপূর্ণ। আপনার মডেল আর্কিটেকচার, ডেটা ডিস্ট্রিবিউশন এবং MinDiff কনফিগারেশনের উপর ভিত্তি করে, প্রয়োজনীয় ডেটার পরিমাণ উল্লেখযোগ্যভাবে পরিবর্তিত হতে পারে। অতীতের অ্যাপ্লিকেশনগুলিতে, আমরা প্রতিটি ডেটা বিভাজনে 5,000 উদাহরণের সাথে MinDiff ভালভাবে কাজ করতে দেখেছি।

আমাদের ক্ষেত্রে, সংখ্যালঘু বিভক্ত গোষ্ঠীগুলির উদাহরণ পরিমাণ 9,688 এবং 3,906। ডেটাসেটে শ্রেণির ভারসাম্যহীনতা নোট করুন; বাস্তবে, এটি উদ্বেগের কারণ হতে পারে, কিন্তু আমরা এই নোটবুকে সেগুলিকে সম্বোধন করার চেষ্টা করব না যেহেতু আমাদের উদ্দেশ্য শুধুমাত্র MinDiff প্রদর্শন করা।

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

MinDiff ডেটাফ্রেম তৈরি করুন

# Create masks for the sensitive and nonsensitive groups
minority_mask = data_train.religion.apply(
    lambda x: any(religion in x for religion in ('jewish', 'muslim')))
majority_mask = data_train.religion.apply(lambda x: x == "['christian']")

# Select nontoxic examples, so MinDiff will be able to reduce sensitive FP rate.
true_negative_mask = data_train['toxicity'] == 0

data_train_main = copy.copy(data_train)
data_train_sensitive = data_train[minority_mask & true_negative_mask]
data_train_nonsensitive = data_train[majority_mask & true_negative_mask]

MinDiff ইনপুটের জন্য আমাদের পান্ডাস ডেটাফ্রেমগুলিকে টেনসরফ্লো ডেটাসেটে রূপান্তর করতে হবে। মনে রাখবেন যে Pandas DataFrames-এর জন্য Keras মডেল API-এর বিপরীতে, ডেটাসেট ব্যবহার করার মানে হল যে আমাদের মডেলের ইনপুট বৈশিষ্ট্য এবং লেবেলগুলি একসঙ্গে একটি ডেটাসেটে প্রদান করতে হবে। এখানে আমরা প্রদান 'comment_text' একটি ইনপুট বৈশিষ্ট্য হিসাবে এবং মডেল এর প্রত্যাশিত আউটপুট মেলে ট্যাগ পুনর্নির্মাণ।

আমরা এই পর্যায়ে ডেটাসেট ব্যাচ করি, যেহেতু MinDiff-এর ব্যাচড ডেটাসেট প্রয়োজন। নোট করুন যে আমরা ব্যাচের আকার নির্বাচনকে টিউন করি যেভাবে এটি বেসলাইন মডেলের জন্য টিউন করা হয়, মডেলের কার্যকারিতার সাথে ভারসাম্য বজায় রাখার সময় প্রশিক্ষণের গতি এবং হার্ডওয়্যার বিবেচনায় নিয়ে। এখানে আমরা তিনটি ডেটাসেটের জন্য একই ব্যাচের আকার বেছে নিয়েছি তবে এটি একটি প্রয়োজনীয়তা নয়, যদিও দুটি MinDiff ব্যাচের আকার সমতুল্য হওয়া ভাল অনুশীলন।

MinDiff ডেটাসেট তৈরি করুন

# Convert the pandas DataFrames to Datasets.
dataset_train_main = tf.data.Dataset.from_tensor_slices(
    (data_train_main['comment_text'].values, 
     data_train_main.pop(LABEL).values.reshape(-1,1) * 1.0)).batch(BATCH_SIZE)
dataset_train_sensitive = tf.data.Dataset.from_tensor_slices(
    (data_train_sensitive['comment_text'].values, 
     data_train_sensitive.pop(LABEL).values.reshape(-1,1) * 1.0)).batch(BATCH_SIZE)
dataset_train_nonsensitive = tf.data.Dataset.from_tensor_slices(
    (data_train_nonsensitive['comment_text'].values, 
     data_train_nonsensitive.pop(LABEL).values.reshape(-1,1) * 1.0)).batch(BATCH_SIZE)

ট্রেন এবং মডেল মূল্যায়ন

MinDiff প্রশিক্ষণের করার জন্য, শুধুমাত্র মূল মডেল গ্রহণ করা এবং একটি সংশ্লিষ্ট সঙ্গে একটি MinDiffModel মধ্যে এটি মোড়ানো loss এবং loss_weight । আমরা 1.5 ডিফল্ট হিসেবে ব্যবহার করছেন loss_weight , কিন্তু এই একটি প্যারামিটার আপনার ব্যবহার কেস জন্য অপেক্ষায় করা প্রয়োজন যে, যেহেতু এটি আপনার মডেল ও পণ্যের প্রয়োজনীয়তা উপর নির্ভর করে। মডেলটিকে কীভাবে প্রভাবিত করে তা দেখতে আপনি মান পরিবর্তন করে পরীক্ষা করতে পারেন, উল্লেখ্য যে এটি বৃদ্ধি করা সংখ্যালঘু এবং সংখ্যাগরিষ্ঠ গোষ্ঠীর কার্যক্ষমতাকে একত্রে আরও কাছাকাছি ঠেলে দেয় তবে আরও স্পষ্ট ট্রেডঅফের সাথে আসতে পারে।

তারপরে আমরা মডেলটি সাধারণভাবে কম্পাইল করি (নিয়মিত নন-মিনডিফ ক্ষতি ব্যবহার করে) এবং প্রশিক্ষণের জন্য উপযুক্ত।

ট্রেন MinDiffModel

use_pretrained_model = True

base_dir = tempfile.mkdtemp(prefix='saved_models')
min_diff_model_location = os.path.join(base_dir, 'model_export_min_diff')

if use_pretrained_model:
  BASE_MIN_DIFF_PATH = tempfile.mkdtemp()
  MIN_DIFF_URL = 'https://storage.googleapis.com/civil_comments_model/min_diff_model.zip'
  ZIP_PATH = os.path.join(BASE_PATH, 'min_diff_model.zip')
  MIN_DIFF_MODEL_PATH = os.path.join(BASE_MIN_DIFF_PATH, 'tmp/min_diff_model')
  DIRPATH = '/tmp/min_diff_model'

  r = requests.get(MIN_DIFF_URL, allow_redirects=True)
  open(ZIP_PATH, 'wb').write(r.content)

  with zipfile.ZipFile(ZIP_PATH, 'r') as zip_ref:
    zip_ref.extractall(BASE_MIN_DIFF_PATH)
  min_diff_model = tf.keras.models.load_model(
      MIN_DIFF_MODEL_PATH, custom_objects={'KerasLayer' : hub.KerasLayer})

  min_diff_model.save(min_diff_model_location, save_format='tf')

else:
  min_diff_weight = 1.5

  # Create the dataset that will be passed to the MinDiffModel during training.
  dataset = md.keras.utils.input_utils.pack_min_diff_data(
      dataset_train_main, dataset_train_sensitive, dataset_train_nonsensitive)

  # Create the original model.
  original_model = min_diff_keras_utils.create_keras_sequential_model()

  # Wrap the original model in a MinDiffModel, passing in one of the MinDiff
  # losses and using the set loss_weight.
  min_diff_loss = md.losses.MMDLoss()
  min_diff_model = md.keras.MinDiffModel(original_model,
                                         min_diff_loss,
                                         min_diff_weight)

  # Compile the model normally after wrapping the original model.  Note that
  # this means we use the baseline's model's loss here.
  optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)
  loss = tf.keras.losses.BinaryCrossentropy()
  min_diff_model.compile(optimizer=optimizer, loss=loss, metrics=['accuracy'])

  min_diff_model.fit(dataset, epochs=20)

  min_diff_model.save_original_model(min_diff_model_location, save_format='tf')
INFO:tensorflow:Assets written to: /tmp/saved_modelsb3zkcos_/model_export_min_diff/assets
INFO:tensorflow:Assets written to: /tmp/saved_modelsb3zkcos_/model_export_min_diff/assets

পরবর্তী আমরা ফলাফল মূল্যায়ন.

min_diff_eval_subdir = os.path.join(base_dir, 'tfma_eval_result')
min_diff_eval_result = fi_util.get_eval_results(
    min_diff_model_location,
    min_diff_eval_subdir,
    validate_tfrecord_file,
    slice_selection='religion')
WARNING:absl:Tensorflow version (2.5.0) found. Note that TFMA support for TF 2.0 is currently in beta

আমরা একটি নতুন মডেলকে সঠিকভাবে মূল্যায়ন করছি তা নিশ্চিত করার জন্য, আমাদের বেসলাইন মডেলের মতোই একটি থ্রেশহোল্ড নির্বাচন করতে হবে। একটি প্রোডাকশন সেটিংয়ে, এর অর্থ নিশ্চিত করা যে মূল্যায়ন মেট্রিক্স লঞ্চের মান পূরণ করে। আমাদের ক্ষেত্রে, আমরা থ্রেশহোল্ড বাছাই করব যার ফলে বেসলাইন মডেলের মতো সামগ্রিক FPR হয়। এই থ্রেশহোল্ড আপনি বেসলাইন মডেলের জন্য নির্বাচিত একটি থেকে ভিন্ন হতে পারে। থ্রেশহোল্ড 0.400 সহ মিথ্যা ইতিবাচক হার নির্বাচন করার চেষ্টা করুন। (উল্লেখ্য যে খুব কম পরিমাণের উদাহরণ সহ সাবগ্রুপগুলিতে খুব বিস্তৃত আত্মবিশ্বাসের পরিসরের ব্যবধান রয়েছে এবং তাদের অনুমানযোগ্য ফলাফল নেই।)

widget_view.render_fairness_indicator(min_diff_eval_result)
FairnessIndicatorViewer(slicingMetrics=[{'sliceValue': 'Overall', 'slice': 'Overall', 'metrics': {'accuracy': …

এই ফলাফলগুলি পর্যালোচনা করে, আপনি লক্ষ্য করতে পারেন যে আমাদের লক্ষ্য গোষ্ঠীগুলির জন্য FPRs উন্নত হয়েছে৷ আমাদের সর্বনিম্ন পারফর্মিং গ্রুপ এবং সংখ্যাগরিষ্ঠ গ্রুপের মধ্যে ব্যবধান .024 থেকে .006 এ উন্নীত হয়েছে। আমরা যে উন্নতিগুলি লক্ষ্য করেছি এবং সংখ্যাগরিষ্ঠ গোষ্ঠীর জন্য অবিরত শক্তিশালী পারফরম্যান্সের পরিপ্রেক্ষিতে, আমরা আমাদের উভয় লক্ষ্যকেই সন্তুষ্ট করেছি। পণ্যের উপর নির্ভর করে, আরও উন্নতির প্রয়োজন হতে পারে, তবে এই পদ্ধতিটি আমাদের মডেলটিকে সমস্ত ব্যবহারকারীর জন্য ন্যায়সঙ্গতভাবে সম্পাদন করার এক ধাপ কাছাকাছি পৌঁছে দিয়েছে।