Bias control in AGISystem2 uses dimension masking to prevent protected attributes from influencing decisions. The BiasController can selectively disable dimensions during reasoning, implementing a geometric "veil of ignorance".
The BiasController applies dimension masks to prevent protected attributes from influencing reasoning. When a mask has 0 in a dimension, that dimension is ignored during distance calculations. This implements fair decision-making by making the system "blind" to sensitive attributes.
Bias control operates by modifying the masked L1 distance calculation:
| Mask Type | Dimensions Masked | Use Case |
|---|---|---|
| Ontology-only | 256-383 (all axiology) | Pure factual reasoning |
| Protected attributes | Specific ontological dims | Fair hiring, lending |
| Custom domain | Domain-specific subset | Medical, legal contexts |
| Full mask | None (all dims active) | Normal reasoning |
// Define protected dimensions
biasController.setProtectedDimensions([120, 121, 122, 123]); // e.g., age, gender
// Create mask (384 dims, 1 = active, 0 = masked)
const mask = biasController.createFairnessMask();
// Result: [1,1,...,1,0,0,0,0,1,1,...] with 0s at positions 120-123
// Use in reasoning
const fairDistance = mathEngine.maskedL1(conceptA, conceptB, mask);
// Audit log entry created automatically:
// { action: "BIAS_MASK_APPLIED", dims: [120-123], context: "employment_decision" }
For maximum fairness, enable veil of ignorance mode which masks all axiological dimensions plus protected ontological ones:
// Full veil: no values, no protected attributes
biasController.enableVeilOfIgnorance({
protectedOntology: [120, 121, 122, 123],
includeAllAxiology: true
});
// Now all reasoning ignores both values and protected attributes
ASK "Should applicant be hired?" # Based only on qualifications
The system can detect potential bias by comparing results with and without masks:
// Run query twice: with and without mask
const normalResult = reasoner.ask(query, { mask: fullMask });
const fairResult = reasoner.ask(query, { mask: fairnessMask });
// If results differ, bias may be present
if (normalResult !== fairResult) {
auditLog.warn("BIAS_DETECTED", { query, diff: [...] });
}