نویسنده(های): جاناتان بنیون
در ابتدا منتشر شد به سمت هوش مصنوعی.
مجموعه داده 2023 که توزیع سوگیری شغلی را در یک مجموعه داده متعادل می کند، ممکن است تعصب نژادی را کاهش دهد (ناخواسته)، اما سوگیری های جنسیتی و سنی را در مقایسه با پایه آلپاکا وانیلی افزایش داده است.
TLDR:
- کاهش یک بعد سوگیری انسانی منفرد از یک مجموعه دستورالعمل که برای تنظیم دقیق مدلهای زبان استفاده میشود، احتمالاً میتواند باعث ایجاد دلتاهای ناخواسته در سایر سوگیریها شود.
- تحقیقات آینده باید بر روی بسیاری از تکنیکهای کاهش تعصب چند بعدی تا حد امکان (همزمان) تمرکز کند تا بیشترین تأثیر را بر انواع سوگیری داشته باشد که تعامل پیچیده را نشان میدهند.
- در مورد OccuQuest، تعصب شغلی را متعادل می کند، اما ممکن است تعصبات نژادی را کاهش داده و سوگیری های جنسیتی و سنی را افزایش دهد، در هنگام مقایسه وجود هر یک با مواردی که در خط پایه آلپاکا وانیلی قرار دارند.
مقدمه ای بر اندازه گیری اثرات سوگیری انسانی در مجموعه داده های مدل زبان
با توجه به نقش مهم LLM ها در چندین حوزه، پرداختن به تعصب انسانی در خروجی در طول آموزش و استقرار بسیار مهم است. ابعاد سوگیری تاریخی انسان از سن، جنسیت، قومیت، مذهب و شغل همچنان بر نظرات کاربران هر برنامه LLM تأثیر می گذارد. در حالی که برخی از مدلها درجهای از کاهش سوگیری را در روشهای جدید نشان دادهاند (از جمله تنظیم دقیق با یادگیری تقویتی پاییندست)، سوگیریها همچنان مشخص هستند و حتی میتوانند بسته به تنظیم مدل و نیز تشدید شوند. مجموعه داده کیفیت، به خصوص زمانی که نظارت نمی شود.
سوال تحقیق اولیه:
هنگام کاهش تعصبات انسانی در مجموعه داده ها برای تنظیم دقیق مدلهای زبان برای برنامههای هوش مصنوعی استفاده میشود، آیا تداخل بین ابعاد سوگیری انسانی بر نتیجه تأثیر میگذارد؟ اگر چنین است، چگونه و هنگام ادامه کاهش تعصبات انسانی باید به چه چیزی فکر کنیم؟
توضیح این تحقیق و قصد:
یک مطالعه موردی اخیر در کاهش تنها یک سوگیری انسانی از طریق یافت شد اشغال کنید (Xue et al.)، مقاله ای که اثرات کاهش تعصب شغلی را به تنهایی (به معنای مفرد) کمیت می کند. این مطالعه مختصر از خودم (کد در پایین این پست و همچنین در این مخزن GitHub) اندازه سوگیری انسان را در مجموعه داده های دستورالعمل OccuQuest و Alpaca (با محاسبه شباهت کسینوس بین مقادیر جاسازی SBERT کلمات مغرضانه و کلمات هدف) مقایسه می کند تا نشان دهد که پرداختن به یک نوع سوگیری می تواند اثرات غیرعمدی بر سایر ابعاد سوگیری داشته باشد، چه مثبت و چه منفی.
یافته های کلیدی:
تعصب جنسیتی: OccuQuest: 0.318، آلپاکا: 0.244
OccuQuest سوگیری جنسیتی بالاتری نسبت به آلپاکا نشان می دهد. این نتیجه غیرمنتظره نشان میدهد که تلاشها برای کاهش سوگیری شغلی ممکن است بهطور ناخواسته سوگیری جنسیتی را افزایش داده باشد، احتمالاً به دلیل تعامل پیچیده بین شغل و کلیشههای جنسیتی.
تعصب نژادی: OccuQuest: 0.203، آلپاکا: 0.360
OccuQuest تعصب نژادی کمتری را در مقایسه با آلپاکا نشان می دهد. این نشان می دهد که کاهش تعصب شغلی ممکن است به طور بالقوه با پرداختن به سوگیری های متقاطع مربوط به نژاد و شغل، تأثیر مثبتی بر تعصب نژادی داشته باشد.
تعصب سنی: OccuQuest: 0.091، آلپاکا: 0.004
OccuQuest تعصب سنی کمی بالاتر از Alpaca نشان می دهد، اگرچه هر دو مقدار نسبتاً پایین هستند. این نشان میدهد که تلاشها برای کاهش سوگیری شغلی احتمالاً به دلیل ارتباط بین سن و مشاغل خاص، ممکن است به طور جزئی باعث افزایش سوگیریهای مرتبط با سن شود.
مفاهیم و جهت گیری های آینده:
- رویکرد کل نگر: تحقیقات آتی باید شامل روشهای فنی باشد که تا حد امکان به ابعاد متعدد سوگیری به طور همزمان توجه کند تا از عواقب ناخواسته جلوگیری شود.
- متقاطع بودن: تحقیقات آینده باید به طور استراتژیک برای تقاطع ابعاد مختلف سوگیری (به عنوان مثال، جنسیت، نژاد، سن، و شغل) در یک رویکرد متفکرانه برنامه ریزی کند – احتمالاً محدوده را محدود می کند تا بیشترین تعصب را کاهش دهد (بسته به اهداف مجموعه داده).
هشدارها:
- مقاله Ocuquest شامل طیف گستردهای از خطوط پایه بود، و این مطالعه خاص در این پست فقط با یک خط پایه آلپاکا مقایسه میشود (همه مجموعه دادههای مورد استفاده به عنوان خطوط پایه هنوز وانیلی بودند از نظر کار زیادی که با کاهش تعصب انجام نشده است) – مقایسه در این پست هنوز Occuquest را با یک مجموعه داده وانیلی به روشی مشابه مقایسه می کند.
- تعداد کلمات هدف برای سنجش تعصب محدود است. با این حال، آنها از جمله کلماتی هستند که بیشتر با زبان مغرضانه در متون همراه است. با توجه به این محدودیت، این هنوز برای یک تحلیل مقایسه ای کار می کند، اما احتمالاً به دلیل تعداد محدود، به نوارهای خطا کمک می کند.
- کلماتی که برای خود زبان مغرضانه استفاده میشوند نیز مجموعه کامل کلماتی را که میتوان استفاده کرد را نشان نمیدهند (اما این همچنان برای تجزیه و تحلیل کار میکند زیرا این یک مقایسه است).
- شباهت کسینوس تنها یک معیار است. سایر معیارهای فاصله را می توان برای تأیید یافته ها استفاده کرد.
- مدل SBERT تنها یک نسخه از مقادیر embeddings را ارائه می دهد. می توان از مدل های تعبیه اضافی برای مشاهده مشابه بودن یافته ها استفاده کرد.
کد زیر (4 مرحله)
مرحله 1: راه اندازی و بارگذاری داده ها
ابتدا کتابخانههای لازم را وارد میکنیم و مجموعه دادههای نمونهشده خود را بارگذاری میکنیم – اندازه اثر را یادداشت کنید و با خیال راحت بر اساس هدف یادگیری تنظیم کنید:
import random
import matplotlib.pyplot as plt
import numpy as np
from sentence_transformers import SentenceTransformer
from scipy import stats
from datasets import load_dataset
import json
from tqdm import tqdmimport warnings
warnings.filterwarnings("ignore")
# auth to HF
from huggingface_hub import login
from getpass import getpass
def huggingface_login():
print("Please enter your HF API token.")
token = getpass("Token: ")
huggingface_login()
# Sample size function in order for efficiency to occur here
def calculate_sample_size(effect_size, alpha=0.05, power=0.8):
z_alpha = stats.norm.ppf(1 - alpha/2)
z_beta = stats.norm.ppf(power)
sample_size = ((z_alpha + z_beta) / effect_size) ** 2
return int(np.ceil(sample_size))
# Calculate sample size
effect_size = 0.1 # Small effect size
alpha = 0.05 # Significance level
power = 0.8 # Desired power
sample_size = calculate_sample_size(effect_size, alpha, power)
print(f"Sample size for an effect size of 0.1: {sample_size}")
# Load SBERT model
model = SentenceTransformer('all-MiniLM-L6-v2')
# Load datasets
occuquest = load_dataset("OFA-Sys/OccuQuest", split="train")
alpaca = load_dataset("tatsu-lab/alpaca", split="train")
# Sample from datasets
occuquest_sample = occuquest.shuffle(seed=42).select(range(sample_size))
alpaca_sample = alpaca.shuffle(seed=42).select(range(sample_size))
مرحله 2: دسته بندی های سوگیری و توابع اندازه گیری را تعریف کنید
در مرحله بعد، دستهها و توابع سوگیری خود را تعریف میکنیم که از شباهت کسینوس و اندازه اثر WEAT بین زبان بایاس و کلمات هدف استفاده میکنند. این سوگیری را برای این روابط در مجموع اندازه گیری می کند (به احتیاط های این تحلیل در بالا مراجعه کنید، زیرا این به کلمات و صفت های هدف محدود می شود و با فرض اینکه آنها حاوی توصیفگرهای مغرضانه هستند):
bias_categories = {
'gender_bias': {
'target_1': ['man', 'male', 'boy', 'brother', 'he', 'him', 'his', 'son'],
'target_2': ['woman', 'female', 'girl', 'sister', 'she', 'her', 'hers', 'daughter'],
'attribute_1': ['career', 'professional', 'corporation', 'salary', 'office', 'business', 'job'],
'attribute_2': ['home', 'parents', 'children', 'family', 'cousins', 'marriage', 'wedding']
},
'racial_bias': {
'target_1': ['european', 'caucasian', 'white'],
'target_2': ['african', 'black', 'negro'],
'attribute_1': ['pleasant', 'peace', 'wonderful', 'joy', 'love', 'happy', 'laughter', 'health'],
'attribute_2': ['unpleasant', 'agony', 'terrible', 'horrible', 'evil', 'hurt', 'sick', 'failure']
},
'age_bias': {
'target_1': ['young', 'youth', 'teenager', 'adolescent'],
'target_2': ['old', 'elderly', 'senior', 'aged'],
'attribute_1': ['active', 'energetic', 'lively', 'quick', 'sharp'],
'attribute_2': ['slow', 'tired', 'passive', 'sluggish', 'weak']
}
}def cosine_similarity_matrix(A, B):
norm_A = np.linalg.norm(A, axis=1, keepdims=True)
norm_B = np.linalg.norm(B, axis=1, keepdims=True)
return np.dot(A / norm_A, (B / norm_B).T)
def weat_effect_size_batch(W, A, B, X, Y):
s_W_A = np.mean(cosine_similarity_matrix(W, A), axis=1)
s_W_B = np.mean(cosine_similarity_matrix(W, B), axis=1)
s_X_A = np.mean(cosine_similarity_matrix(X, A))
s_X_B = np.mean(cosine_similarity_matrix(X, B))
s_Y_A = np.mean(cosine_similarity_matrix(Y, A))
s_Y_B = np.mean(cosine_similarity_matrix(Y, B))
numerator = (s_W_A - s_W_B) - (s_X_A - s_X_B + s_Y_A - s_Y_B) / 2
denominator = np.std(np.concatenate([cosine_similarity_matrix(X, A).flatten() - cosine_similarity_matrix(X, B).flatten(),
cosine_similarity_matrix(Y, A).flatten() - cosine_similarity_matrix(Y, B).flatten()]))
return numerator / denominator if denominator != 0 else np.zeros_like(numerator)
مرحله 3: تجزیه و تحلیل سوگیری در مجموعه داده ها
اکنون یک تابع ایجاد می کنیم تا این توابع بالا را با هم جمع کنیم و بایاس (برای هر بعد) در هر مجموعه داده را تجزیه و تحلیل کنیم:
def analyze_bias(dataset, text_field, is_occuquest=False, batch_size=32):
bias_scores = {category: [] for category in bias_categories}attribute_target_encodings = {
category: {
'A': model.encode(words['attribute_1']),
'B': model.encode(words['attribute_2']),
'X': model.encode(words['target_1']),
'Y': model.encode(words['target_2'])
} for category, words in bias_categories.items()
}
for i in tqdm(range(0, len(dataset), batch_size), desc="Analyzing bias"):
batch = dataset[i:i+batch_size]
texts = [item.get(text_field, '') if isinstance(item, dict) else str(item) for item in batch]
W = model.encode(texts)
for category, encodings in attribute_target_encodings.items():
scores = weat_effect_size_batch(W, encodings['A'], encodings['B'], encodings['X'], encodings['Y'])
bias_scoresLatest.extend(scores)
return {category: (np.mean(scores), np.std(scores)) for category, scores in bias_scores.items()}
occuquest_bias = analyze_bias(occuquest_sample, 'messages', is_occuquest=True)
alpaca_bias = analyze_bias(alpaca_sample, 'instruction', is_occuquest=False)
مرحله 4: نتایج را تجسم کنید
در نهایت، یک نمودار میله ای با فواصل اطمینان در 95٪ ایجاد می کنیم تا نتایج خود را تجسم کنیم:
bias_types = [bt for bt in occuquest_bias.keys() if bt != 'occupation_bias'] # remove occupation_bias since am not quite sure what the negatives mean in the alpaca dataset already for this dataset to change
occuquest_values = [occuquest_bias[bt][0] for bt in bias_types]
occuquest_stds = [occuquest_bias[bt][1] for bt in bias_types]
alpaca_values = [alpaca_bias[bt][0] for bt in bias_types]
alpaca_stds = [alpaca_bias[bt][1] for bt in bias_types]confidence_level = 0.95
degrees_of_freedom = sample_size - 1
t_value = stats.t.ppf((1 + confidence_level) / 2, degrees_of_freedom)
occuquest_ci = [t_value * (std / np.sqrt(sample_size)) for std in occuquest_stds]
alpaca_ci = [t_value * (std / np.sqrt(sample_size)) for std in alpaca_stds]
fig, ax = plt.subplots(figsize=(12, 6))
x = range(len(bias_types))
width = 0.35
occuquest_bars = ax.bar([i - width/2 for i in x], occuquest_values, width, label='OccuQuest', color='#1f77b4', yerr=occuquest_ci, capsize=5)
alpaca_bars = ax.bar([i + width/2 for i in x], alpaca_values, width, label='Alpaca', color='#ff7f0e', yerr=alpaca_ci, capsize=5)
ax.set_ylabel('Bias Score (WEAT Effect Size)')
ax.set_title(f'Confounds of Removing Bias: OccuQuest (Removing Occupation Bias) vs Alpaca (Close to Original Baseline) Instruction Sets\nusing SBERT and WEAT (n={sample_size}, 95% CI)')
ax.set_xticks(x)
ax.set_xticklabels(bias_types, rotation=45, ha='right')
ax.legend()
plt.tight_layout()
plt.show()
باز هم، به طور خلاصه، این کد از طریق فرآیند تجزیه و تحلیل و تجسم سوگیری در مجموعه دادههای تنظیم دستورالعمل میگذرد و [possible] پیامدهای ناخواسته پرداختن به یک نوع سوگیری در ابعاد دیگر (در مقابل Alpaca، OccuQuest ممکن است تعصب شغلی را کاهش داده باشد، اما همچنین ممکن است تعصب نژادی را کاهش داده و تعصبات جنسیتی و سنی را افزایش دهد)
نویسنده را برای بینش های مشابه دنبال کنید (قصدی برای اینفلوئنسر شدن ندارید، اما خودتان فکر کنید و با دنبال کردن نتایج فید خود را بهبود ببخشید).
لطفاً در صورت لزوم در پست نظر دهید (مطالب پذیرفته می شود) و در صورت تمایل به نقل قول زیر مراجعه کنید.
@article{
jonathan.bennion,
author = {Bennion, Jonathan},
title = {Confounds and Complex Bias Interplay from Human Bias Mitigation in Language Model Datasets Used for Finetuning LLMs},
year = {2024},
month = {10},
howpublished = {\url{https://towardsdatascience.com}},
url = {https://towardsdatascience.com/confounds-in-human-bias-mitigation-in-language-model-datasets-jonathan-bennion-001bee212bb0}
}
منتشر شده از طریق به سمت هوش مصنوعی