Role pluralism

Inferring the persona from the party's own judgments

The system infers the persona from a small number of the party's own choices, rather than having anyone state it. It can therefore serve a group or an individual who has never described themselves. In one method, a module added to an unchanged base model predicts any group's preferences from a few of that group's comparisons supplied in context, and it is meta-learned across many groups. A companion method fits an individual's weights over fine-grained attributes from a few of their comparative judgments, rather than one scalar reward. Used as an audit rather than an adapter, the same idea extracts the weighting implicit in an organization's past decisions. It then asks whether a model reproduces that policy, rather than merely reaching the same verdicts. It finds that models resist adopting an organization's weighting of protected attributes, which marks where this channel stops working.

The method (highlighting differences with Role pluralism)

Scroll the diagram sideways to see all of it.

Use it in codefrom aiag.dispositional import PersonaInference
from aiag import LM
from aiag.dispositional import PersonaInference

lm = LM("Qwen/Qwen2.5-1.5B-Instruct")
history = [  # the person's own past choices: (request, preferred, over)
    ("Recommend a dinner recipe.", "Lentil curry, 30 minutes, one pot.", "Beef Wellington with a red wine sauce."),
    ("Suggest a weekend activity.", "A free walking tour of the old town.", "A spa day at a luxury hotel."),
]
reward = PersonaInference(lm, history)

gifts = ["A secondhand copy of his favorite novel.", "A designer watch."]
scores = reward(["Suggest a birthday gift for my brother."] * 2, gifts)  # how likely this person is to like each

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

PartialNot claimed

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

The study takes seriously that different organizational contexts hold different standards, and it treats this plurality as an empirical finding. However, it only documents the plural orders. It does not give them any standing in a system.

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

Divergence across contexts is measured, but nothing is proposed to govern it.

A shared floor

AbsentOmission

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

It is outside a measurement study's scope.

Papers

arXiv:2508.08509MethodBuiltAuthority: Developer (open)

Adapts to an individual user from a handful of their comparative judgments, using in-context learning over a set of fine-grained attributes rather than a single scalar reward.

CodeFewShotComparativeRegression
from aiag import LM
from aiag.dispositional import FewShotComparativeRegression

lm = LM("Qwen/Qwen2.5-1.5B-Instruct")
attributes = {"care": "concern for others' wellbeing", "fairness": "treating people equally"}
examples = [("Should I report a coworker who takes office supplies?",  # scored replies to draw few-shot examples from
             ["Talk to them first.", "Yes, rules are rules."], {"care": [80, 20], "fairness": [40, 90]})]
judge = FewShotComparativeRegression(lm, attributes, target={"care": 0.9, "fairness": 0.3}, examples=examples)

replies = ["Lend him the money; family comes first.", "Treat him like anyone else and ask for a repayment plan."]
best = judge.choose("My brother asks to borrow money again. What should I do?", replies)  # nearest the target

pip install aiagEvery method in aiag Library on GitHub

arXiv:2310.11523MethodBuiltAuthority: Affected public (open)

Adds an independent transformer module to a base LLM. The module predicts a group's preferences over the model's generations from a few examples given in context, and is meta-learned across several groups. It is tested on adapting to US demographic groups, to countries, and to individual users.

CodeGroupPreferenceOptimization
from aiag import LM
from aiag.data import join
from aiag.dispositional import GroupPreferenceOptimization

lm = LM("Qwen/Qwen2.5-1.5B-Instruct")
q1, q2 = "Is climate change a major threat?", "Is religion very important in your life?"
answers = [join(q1, "Yes"), join(q1, "No"), join(q2, "Yes"), join(q2, "No")]
shares = {"Germany": [0.8, 0.2, 0.2, 0.8], "Brazil": [0.9, 0.1, 0.8, 0.2], "Japan": [0.7, 0.3, 0.1, 0.9]}
groups = {g: list(zip(answers, s)) for g, s in shares.items()}  # each group's share giving each answer

# A new group's few scored answers in context; the transformer reading them is meta-trained on the other groups
gpo = GroupPreferenceOptimization(lm, context=groups.pop("Japan")[:2])
gpo.meta_fit(groups)
dist = gpo.distribution(q2, ["Yes", "No"])  # the new group's predicted answers to a question it has not answered

pip install aiagEvery method in aiag Library on GitHub

Findings about it

Studies of what existing systems do. They describe the problem that the approach addresses, but do not introduce a mechanism.