Spaces:
Sleeping
Sleeping
File size: 7,618 Bytes
2ccd934 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 | """
Simple Example - Using the Bias Detector Directly
This script shows how to use the bias detection modules
without running the full Streamlit dashboard.
"""
import sys
import os
# Add current directory to path
sys.path.insert(0, os.path.dirname(__file__))
from modules.bias_detector import BiasDetector
from modules.fairness_metrics import FairnessMetrics, get_default_weat_word_sets
from modules.data_loader import DataLoader
def example_1_single_text_english():
"""Example 1: Analyze a single English text."""
print("\n" + "="*70)
print("EXAMPLE 1: Single English Text Analysis")
print("="*70)
# Initialize detector
detector = BiasDetector(language='english')
# Analyze text
text = "The doctor asked the nurse to help him with the procedure."
print(f"\nText: {text}")
result = detector.analyze_text(text)
print(f"\nResults:")
print(f" Overall Bias Score: {result['overall_bias_score']:.3f}")
print(f" Is Biased: {result['is_biased']}")
print(f" Gender Bias: {result['gender_bias']['bias_direction']} ({result['gender_bias']['severity']})")
print(f" Gender Score: {result['gender_bias']['bias_score']:.3f}")
def example_2_single_text_arabic():
"""Example 2: Analyze a single Arabic text."""
print("\n" + "="*70)
print("EXAMPLE 2: Single Arabic Text Analysis")
print("="*70)
# Initialize detector for Arabic
detector = BiasDetector(language='arabic')
# Analyze Arabic text
text = "طلب الطبيب من الممرضة أن تساعده في الإجراء."
print(f"\nText: {text}")
result = detector.analyze_text(text)
print(f"\nResults:")
print(f" Overall Bias Score: {result['overall_bias_score']:.3f}")
print(f" Is Biased: {result['is_biased']}")
print(f" Gender Bias: {result['gender_bias']['bias_direction']}")
def example_3_batch_analysis():
"""Example 3: Batch analysis on dataset."""
print("\n" + "="*70)
print("EXAMPLE 3: Batch Analysis on English Dataset")
print("="*70)
# Initialize components
detector = BiasDetector(language='english')
fairness_metrics = FairnessMetrics(detector)
data_loader = DataLoader()
# Load dataset
dataset = data_loader.load_dataset('english')
print(f"\nLoaded {len(dataset)} sentences")
# Analyze all texts
results = []
for item in dataset:
result = detector.analyze_text(item['text'])
results.append(result)
# Calculate fairness score
fairness = fairness_metrics.calculate_fairness_score(results)
print(f"\nFairness Metrics:")
print(f" Overall Fairness Score: {fairness['overall_fairness_score']:.2f}/100")
print(f" Grade: {fairness['grade']}")
print(f" Biased Texts: {fairness['biased_count']}/{fairness['total_count']}")
print(f" Bias Percentage: {fairness['bias_percentage']:.1f}%")
def example_4_weat_analysis():
"""Example 4: WEAT analysis."""
print("\n" + "="*70)
print("EXAMPLE 4: WEAT Analysis")
print("="*70)
# Initialize components
detector = BiasDetector(language='english')
fairness_metrics = FairnessMetrics(detector)
# Get word sets
word_sets = get_default_weat_word_sets('english')
print("\nTarget Words:")
print(f" Male names: {', '.join(word_sets['male_names'][:4])}...")
print(f" Female names: {', '.join(word_sets['female_names'][:4])}...")
print("\nAttribute Words:")
print(f" Career: {', '.join(word_sets['career_words'][:4])}...")
print(f" Family: {', '.join(word_sets['family_words'][:4])}...")
# Calculate WEAT
weat = fairness_metrics.calculate_weat(
word_sets['male_names'],
word_sets['female_names'],
word_sets['career_words'],
word_sets['family_words']
)
print(f"\nWEAT Results:")
print(f" WEAT Score: {weat['weat_score']:.4f}")
print(f" Effect Size: {weat['effect_size']:.4f}")
print(f" Interpretation: {weat['interpretation']}")
print(f" Statistically Significant: {weat['is_significant']}")
def example_5_filtered_comparison():
"""Example 5: Compare filtered vs unfiltered."""
print("\n" + "="*70)
print("EXAMPLE 5: Filtered vs Unfiltered Comparison")
print("="*70)
# Initialize components
detector = BiasDetector(language='english')
fairness_metrics = FairnessMetrics(detector)
data_loader = DataLoader()
# Load dataset
dataset = data_loader.load_dataset('english')
# Analyze unfiltered
print("\nAnalyzing unfiltered texts...")
unfiltered_results = []
for item in dataset:
result = detector.analyze_text(item['text'])
unfiltered_results.append(result)
# Create filtered version
print("Creating filtered versions...")
filtered_dataset = data_loader.create_filtered_version(dataset, detector)
# Analyze filtered
print("Analyzing filtered texts...")
filtered_results = []
for item in filtered_dataset:
result = detector.analyze_text(item['text'])
filtered_results.append(result)
# Compare
comparison = fairness_metrics.compare_filtered_unfiltered(
unfiltered_results,
filtered_results
)
print("\n" + "-"*70)
print("COMPARISON RESULTS")
print("-"*70)
print(f"\nUnfiltered:")
print(f" Fairness Score: {comparison['unfiltered']['overall_fairness_score']:.2f}/100")
print(f" Grade: {comparison['unfiltered']['grade']}")
print(f"\nFiltered:")
print(f" Fairness Score: {comparison['filtered']['overall_fairness_score']:.2f}/100")
print(f" Grade: {comparison['filtered']['grade']}")
print(f"\nImprovement:")
print(f" Absolute: +{comparison['improvement']:.2f} points")
print(f" Relative: {comparison['improvement_percentage']:.1f}%")
print(f" Bias Reduction: {comparison['bias_reduction']:.3f}")
print(f" Status: {comparison['status'].upper()}")
def main():
"""Run all examples."""
print("\n")
print("╔" + "="*68 + "╗")
print("║" + " "*15 + "BIAS DETECTOR - USAGE EXAMPLES" + " "*23 + "║")
print("╚" + "="*68 + "╝")
print("\nThis script demonstrates how to use the bias detection modules.")
print("Choose an example to run:")
print("\n1. Single English Text Analysis")
print("2. Single Arabic Text Analysis")
print("3. Batch Analysis on Dataset")
print("4. WEAT Analysis")
print("5. Filtered vs Unfiltered Comparison")
print("6. Run All Examples")
print("0. Exit")
choice = input("\nEnter your choice (0-6): ").strip()
examples = {
'1': example_1_single_text_english,
'2': example_2_single_text_arabic,
'3': example_3_batch_analysis,
'4': example_4_weat_analysis,
'5': example_5_filtered_comparison,
}
if choice == '0':
print("\nGoodbye!")
return
elif choice == '6':
# Run all examples
for func in examples.values():
func()
elif choice in examples:
examples[choice]()
else:
print("\nInvalid choice!")
return
print("\n" + "="*70)
print("Done! For the full dashboard, run: streamlit run app.py")
print("="*70 + "\n")
if __name__ == "__main__":
main()
|