Role pluralism

Collecting preferences from real people without pooling them

This approach changes the data rather than the model. It recruits representative samples of real people and keeps every rating tied to the person who gave it and to what that person said they valued, instead of averaging raters into one anonymous signal. Two large studies do this. The first maps the demographics and stated preferences of 1,500 participants from 75 countries onto their feedback in 8,011 live conversations. The second, a five-country study of 15,000 people, releases 233,319 multilingual comparisons, built by prompting for candidate answers that pull in opposite directions. Both report the finding that motivates the whole regime. People vary far more in what they want than the answers of today's models do, so pluralism that is absent from the training signal cannot be reached by steering later.

The method (highlighting differences with Role pluralism)

Scroll the diagram sideways to see all of it.

Use it in codefrom aiag.dispositional import FeedbackLedger
from aiag.dispositional import FeedbackLedger

ledger = FeedbackLedger()
question = "Is it rude to recline my seat on a plane?"
ledger.rate("ana", question, "It's allowed; just check behind you first.", "Never recline.", country="PT", age="25-34")
ledger.rate("raj", question, "Never recline.", "It's allowed; just check behind you first.", country="IN", age="45-54")

per_rater = FeedbackLedger.split(ledger.to_dataset())  # one preference dataset per rater, never pooled

pip install aiagEvery method in aiag Library on GitHub

Concept Analysis: Theoretical Foundations

Each concept is read twice: whether the approach carries it over, and whether the approach's own sources claim it. A concept that the approach claims but does not carry over is a shortfall. A concept that it neither claims nor carries over is an omission, which marks a gap in the field rather than a failure of the work.

Plural normative orders

PartialShortfall · partially preserved

Definition (John Griffiths, What Is Legal Pluralism?, 1986)

Different communities' norms are genuinely in force at the same time. Rather than one official rulebook with tolerated deviations, there are multiple active systems of rules side by side.

Analysis

Behavior does vary by user or group, which is a fine-grained kind of plurality. However, "order" overstates it. What varies is service to individuals, not communities maintaining norm systems of their own.

A conflict rule between orders

AbsentOmission

Definition (Conflict-of-laws tradition)

When two communities' norms disagree about the same case, a rule must state which one governs and why. This stated rule is what separates real pluralism from mere fragmentation into disconnected groups.

Analysis

Personalizing per user means that users' norms never meet in a single case. Conflicts are avoided by partition rather than resolved by a rule. The tradition's central question goes unasked.

A shared floor

PartialShortfall · partially preserved

Definition (J. S. Mill, On Liberty, 1859)

Accommodation of group differences has a limit stated in advance. The classic limit is Mill's harm principle: a person's practices are their own business until they harm others. Without an enforced floor, pluralism reduces to "each group gets whatever it wants".

Analysis

The limits of personalization are argued carefully (drawing on Mill's harm principle and Rawlsian stability), but only in prose. The philosophy sets the limits in the paper, not in the system, and no implemented constraint enforces the floor. The bounds are described but not built.

Papers

No method has been built for this approach yet. It rests on the work listed below.

Source artifacts

Primary documents and shared infrastructure that this approach works from or produces.

arXiv:2404.16019ResourceBuilt

Links the demographics and stated preferences of 1,500 participants from 75 countries to their actual feedback in 8,011 live conversations with 21 models. As a result, each rating can be traced back to who gave it and what they said they valued.

CodePRISM
from aiag import LM
from aiag.dispositional import PRISM, PersonaPrompt

lm = LM("Qwen/Qwen2.5-1.5B-Instruct")
prism = PRISM()
prism.survey("p17", {"factuality": 95, "creativity": 40}, system_string="Be concise and honest.", location="Chile")

# Stand-ins for the participant: a 1-100 score for each reply, and their next message
rate = lambda convo, reply: 100 * lm.yes([f"{reply}\n\nIs this reply concise and honest?"])[0]
follow = lambda convo: "Why do you say that?"
models = {"plain": lm, "brief": PersonaPrompt(lm, "Answer in two sentences.")}
opening = "Is it selfish to move abroad and leave my aging parents?"
prism.converse("p17", models, opening, rate, follow, kind="values guided")
pairs = prism.pairs()  # better-worse pairs from each turn, still tied to the participant
  • PRISMRecordaiag/dispositional/role_pluralism.py:338 PRISM: each participant's survey (stated preferences, own system string, self-description, demographics) is kept with every rating they give in live conversations, where up to four models are rated 1-100 on the opening turn and the top-rated one then offers two replies a turn (Kirk et al., 2024).

pip install aiagEvery method in aiag Library on GitHub

arXiv:2507.09650ResourceBuilt

Runs a preference study with representative samples from five countries (N = 15,000). It finds that people vary far more in what they want than the responses of 21 state-of-the-art models do. It also releases Community Alignment, a multilingual multi-turn dataset of 233,319 comparisons built by prompting for candidate answers that take opposing positions.

CodeCommunityAlignment
from aiag import LM
from aiag.dispositional import CommunityAlignment

lm = LM("Qwen/Qwen2.5-1.5B-Instruct")
ledger = CommunityAlignment()

prompt = "How should I respond when my 6-year-old lies?"
candidates = CommunityAlignment.candidates(lm, [prompt])[0]  # written together to span diverse values, plus the default
ledger.choose("a041", prompt, candidates, pick=0, why="It explains instead of punishing.", country="BR")
pairs = ledger.pairs()  # the annotator's pick over each other candidate, tied to the annotator
  • CommunityAlignmentRecordaiag/dispositional/role_pluralism.py:384 Community Alignment: candidate sets drawn by negatively-correlated sampling, one generation asked for several responses that represent diverse values, from which each annotator picks the best and may say why; coverage counts sets holding a reply aligned with a value (Zhang et al., 2025).

pip install aiagEvery method in aiag Library on GitHub