Paper · 2022-11-28 · cs.LG, cs.CL
Fine-tuning language models to find agreement among humans with diverse preferences
Fine-tunes a 70B Chinchilla model to write consensus statements for small groups of people. A reward model predicts each member's agreement with each of 16 sampled statements, and the statement with the highest Utilitarian welfare is shown. Raters preferred it over prompted LLMs and over the best human opinion (author-reported).
Reinforcement learning from human feedback (RLHF)Reward modelingNucleus (top-p) samplingalignmentconsensusreward-modelingsocial-choicehuman-feedback
arXivPDFCodeMarkdown14 min read
AI-compiled by claude-haiku-5-5 on 2026-11-01, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.
In plain words
Most language models are tuned toward one imagined "typical" user. This paper asks a different question: when a small group of people disagree about a political question, can a model write a short statement that the whole group could accept? The authors collected written opinions from groups of people on debate questions, then had the model write several candidate statements that try to reflect all of those opinions.
The model does not pick a side or try to persuade anyone. Each candidate is scored by a second model that guesses how much each group member would agree with it, given that person's own opinion. The candidate with the best overall score for the group is the one shown. People who were asked to rate these statements preferred them over statements from prompted models and, for the best of them, over the best individual opinion written by a group member.
TL;DR
- A 70B language model is fine-tuned to produce a consensus statement for a group of three to five people from their written opinions §3.4.
- A reward model trained on human agreement ratings predicts each person's agreement with each candidate; 16 candidates are sampled and the one with the highest Utilitarian welfare is shown §3.3 §4.1.
- Author-reported: raters preferred it over prompted Chinchilla baselines and over human-written opinions §4.1 §4.2.
- Data is from UK-based crowd participants on UK political questions, so generalisation beyond that population is untested §5.1.
- The public repository does not contain the fine-tuning or reward-model training code described here; see Paper vs code.
Problem
Preference tuning for language models usually assumes that preferences are static and shared across people. That assumption works for tasks with a ground truth, such as summarising an article, but not for group decisions where people hold different values §1. The authors frame consensus formation as a test case: produce a statement that a large share of a group can accept, without any single group member's view being imposed §1 §3.3.
Two practical constraints shape the method. The model's prompt length limits how many opinions it can read at once, so groups are kept at three to five people §5.1. Human ratings are expensive, so the pipeline is built to make the most of each collected rating §3.4.
Method
Data pipeline. The authors first generated debate questions with a prompted 70B model, starting from 152 hand-written seed questions, and filtered them manually §3.1 app. A. Questions were clustered by topic into in-distribution training and test sets and an out-of-distribution test set §3.1. Participants wrote an opinion on a question, then rated candidate consensus statements on agreement and quality §3.2 fig. 1.
Group alignment (inference). For each candidate statement, a reward model gives every participant a predicted agreement score, conditioned on that participant's own opinion §3.3. The scores are aggregated with a social welfare function (SWF) over the group. The paper uses a one-parameter family of isoelastic welfare functions, with the Utilitarian case (inequality aversion α = 0) used for the main results §3.3 eq. 1. The reward model is used only to rank candidates; the scalar rewards select the statement at inference app. C.2.
Training loop. The procedure iterates twice §3.4 fig. 1:
- Generate candidate statements for groups of 3, 4 or 5 opinions, then collect human ratings. Round one uses zero-shot and few-shot prompted Chinchilla; round two uses candidates from the first fine-tuned model §3.4 step 1 app. C.
- Supervised fine-tuning (SFT) of a pretrained 70B Chinchilla model on candidates rated as high quality. The purpose is to teach the prompt format and raise quality, not to match a demonstration; agreement ratings are not used for filtering so that stances stay diverse §3.4 step 2 app. C.1.2.
- Train a reward model (RM) from a pretrained Chinchilla model with an extra linear output layer. It reads a question, one opinion and one candidate, and is trained on pairwise agreement preferences with cross-entropy §3.4 step 3 app. C.2.
Candidate generation. At inference the SFT model samples 16 statements with nucleus sampling app. C.1. Each call shuffles the order of the opinions in the prompt app. C.1. The reranked winner is the candidate with the highest welfare under the chosen SWF §4.1.
Baselines. SFT-Base is the fine-tuned model without reranking (one sample). Few-shot and zero-shot are prompted Chinchilla models §4.1 app. C.1.1.
Key equation (the welfare function, eq. 1):
W_{\alpha}(u_1,\dots,u_n) = \left[\frac{1}{n}\sum_{i=1}^{n} u_i^{1-\alpha}\right]^{\frac{1}{1-\alpha}} \quad \alpha \ge 0,\ \alpha \ne 1
W_{1}(u_1,\dots,u_n) = \sqrt[n]{\prod_{i=1}^{n} u_i} eq. 1
Pseudocode for inference, as the paper describes it:
# Consensus selection at inference (SFT-Utilitarian) [§3.3] [§4.1]
# Input: question (str); opinions (3 to 5 strings)
# Output: one consensus statement (str)
def select_consensus(question, opinions):
# Sample 16 candidates, nucleus p = 0.8, temperature 1 [app. C.1]
# Reshuffle the opinions in every prompt [app. C.1]
candidates = []
for _ in range(16):
prompt = build_prompt(question, shuffle(opinions))
candidates.append(sample_nucleus(sft_model, prompt))
# Predict each person's agreement with each candidate [§3.3]
# One reward call per (person, candidate) pair
utilities = [
[reward_model(question, opinion, c) for c in candidates]
for opinion in opinions
]
# Utilitarian welfare, alpha = 0: the mean over people [§3.3] [eq. 1]
welfare = [mean(column) for column in transpose(utilities)]
return candidates[argmax(welfare)]Pseudocode for one reward-model training example, as described in the paper:
# Reward-model loss on one preference pair [§3.4] [app. C.2]
# Input: question; one participant's opinion; a preferred and a rejected
# candidate, whose ratings differ by 2 or more Likert points
# Output: scalar loss
def pair_loss(question, opinion, preferred, rejected):
# Scalar reward for each candidate, given this one opinion [§3.4]
score_preferred = reward_model(question, opinion, preferred)
score_rejected = reward_model(question, opinion, rejected)
# The paper says "standard cross-entropy" over the pair [app. C.2]
# Our reading of that: -log(sigmoid(difference)); not stated exactly
margin = score_preferred - score_rejected
return -log(sigmoid(margin))Hyperparameters
Values are from the paper unless the Notes say otherwise. "Not stated" means the arXiv v1 text and appendix do not give it.
| Name | Value | Where | Notes |
|---|---|---|---|
| Base model | pretrained Chinchilla, 70B parameters | §3.4 app. C.1 | Model not released with the paper |
| Candidates sampled per consensus | 16 | §3.4 app. C.1 | Winner is the highest-welfare sample |
| Opinions per prompt | 3, 4 or 5 | §3.4 step 1 | Opinions silently dropped (0 to 2) for each candidate |
| Candidates per opinion count (round 1, no RM) | 2 | §3.4 step 1 | |
| Candidates per opinion count (later rounds) | 16 generated, 2 kept, one per α | §3.4 step 1 | 6 presented per group (3 counts × 2 α) |
| Sampling | nucleus, cut-off 0.8; temperature 1 | app. C.1 | |
| Opinion order | reshuffled per prompt and per training epoch | app. C.1 app. C.1.2 | |
| α (inequality aversion) during training | sampled from a log-normal distribution | §3.4 | Distribution parameters: not stated |
| Welfare at evaluation | Utilitarian, α = 0 | §4.1 §3.3 | |
| Few-shot examples | 3 (with 3, 4 and 5 opinions) | app. C.1.1 | Filter mean quality above Neutral; rank by welfare; sample from top 10 |
| SFT quality filter, training | mean rating above 5 | app. C.1.2 | Conflicts with §3.4 step 2; see Pitfalls |
| SFT quality filter, validation | mean rating above 6 | app. C.1.2 | |
| SFT split | 80% / 20% by question | app. C.1.2 | Validation is used for early stopping |
| SFT training examples | 1525 (round 1); 2355 (round 2); 3880 (combined, round 2) | app. C.1.2 | |
| SFT learning rate | 2.5e-7 | app. C.1.2 | Lowest validation perplexity of those tried |
| SFT batch size | 256 | app. C.1.2 | |
| SFT optimiser | AdamW | app. C.1.2 | Weight decay, betas, warmup: not stated |
| SFT steps | 85 (14.3 epochs) round 1; 145 (9.6 epochs) round 2 | app. C.1.2 | Stop before overfitting |
| SFT trainable parameters | all layers except the embedding layer | app. C.1.2 | |
| SFT numerics | bfloat16 with stochastic rounding | app. C.1.2 | |
| SFT hardware | 64 TPU v3 cores | app. C.1.2 | |
| Cleaning of targets | cut text after first newline; remove copied prompt text; strip quotes | app. C.1.2 | |
| RM input | question, one opinion, one candidate | §3.4 step 3 app. C.2 | Output: scalar from an extra linear layer |
| RM initialisation | pretrained Chinchilla plus linear head | app. C.2 | |
| RM pair filter | keep pairs whose ratings differ by 2 or more points | app. C.2 | Ties and 1-point differences dropped |
| RM pair counts | 6639 (round 1); 3795 (round 2); 10434 (combined, round 2) | app. C.2 | |
| RM rater filter | linearly weighted Cohen's kappa of at least 0.6 | app. B.2.1 | Kept 1028 of 1524 (training) and 1164 of 1687 (evaluation) |
| RM learning rate | maximum 2e-6; linear warmup; cosine anneal | app. C.2 | |
| RM batch size | 8 | app. C.2 | |
| RM optimiser | Adam | app. C.2 | Weight decay: not stated |
| RM trainable parameters | last 25 layers plus linear head | app. C.2 | Language model frozen for the first 0.1 epochs |
| RM steps | 440 (0.5 epochs) round 1; 1113 (0.8 epochs) round 2 | app. C.2 | Stop when evaluation loss stops falling |
| RM hardware | 32 TPU v3 cores | app. C.2 | |
| Seed questions | 152 | §3.1 app. A | |
| Generated questions | 3500; 2922 kept after curation | §3.1 app. A | |
| Topic clusters | 110 (main text); 125 (appendix) | §3.1 app. A | Conflicts; see Pitfalls |
| Split sizes | train 2320; within-distribution test 300; out-of-distribution 302 | §3.1 app. A | |
| Participants (all training and evaluation) | 3211 in 746 groups | §3.2 | |
| Within-distribution evaluation | n = 530, from groups of five | §4.1 | Unit as reported in the text |
| Out-of-distribution evaluation | n = 267, from groups of four | §4.1 | Unit as reported in the text |
| Human-opinion comparison | n = 189 (within); n = 186 (out-of-distribution) | §4.2 | Groups of four; unit as reported |
| Model-size ablation | n = 224 | app. D.1 | Unit as reported in the text |
| Likert scales | 7-point agreement and 7-point quality | §3.2 app. B | Labels in tab. A4 |
| Opinion length | 10 to 200 words | app. B | |
| Time limit for opinion writing | 5 minutes | app. B |
Results
Author-reported. Setup: a 70B Chinchilla-based model against prompted Chinchilla baselines and human-written opinions, with crowd-sourced UK participants rating statements on 7-point scales §4 §5.1. Win rates are pairwise comparisons of Likert ratings, ties excluded fig. 2. Bracketed values are 95% bootstrapped confidence intervals unless stated otherwise.
| Setting | Metric | Baseline | This paper | Source |
|---|---|---|---|---|
| Within-distribution, consensus vs baselines | Win rate on group-mean agreement | SFT-Base, few-shot, zero-shot | Preferred over all baselines; strongest margin over the two prompted models | §4.1 fig. 2 |
| Within-distribution, consensus vs baselines | Win rate on group-minimum agreement | SFT-Base, few-shot, zero-shot | Preferred over all baselines | §4.1 fig. 2 |
| SFT-Utilitarian vs SFT-Base (mixed-effects regression) | Coefficient on agreement | SFT-Base | β = 0.12, SE 0.047, z = 2.53, p = 0.011 | §4.1 |
| Divisive rounds, candidate less divisive than position statement | Share of rounds | SFT-Base 58.8% [54.9, 62.6]; few-shot 53.1%; zero-shot 54.6% | 65.6% [61.9, 69.3] | app. D.7 |
| Divisive rounds, unanimous (somewhat agree or more) candidate | Share of rounds | SFT-Base 31.9% [26.8, 36.9]; few-shot 31.6%; zero-shot 33.8% | 40.8% [35.4, 46.2] | §4.1 app. D.7 |
| Consensus vs human opinions | Win rate, mean candidate vs mean opinion | Mean human opinion | 78% [75, 80] | §4.2 |
| Consensus vs human opinions | Win rate, best candidate vs best opinion | Best human opinion | 65% [61, 69] | §4.2 |
| Consensus vs human opinions, divisive / undivisive questions | Win rate, best vs best | Best human opinion | 66% [61, 71] / 63% [57, 69] | §4.2 |
| Out-of-distribution questions | Win rate, mean candidate vs mean opinion | Mean human opinion | 76% [74, 79] | §4.4 |
| Out-of-distribution questions | Win rate, max candidate vs max opinion | Best human opinion | 59.5% [56, 63] | §4.4 |
| Opinion exclusion | Agreement difference, included vs excluded | Excluded group members | 0.47 Likert points [0.21, 0.73] | §4.3 |
| Opinion exclusion | Quality difference, same comparison | Excluded group members | 0.10 [-0.05, 0.25] | §4.3 |
| Model size | Win rate, 70B vs 1.4B SFT-Utilitarian | 1.4B SFT-Utilitarian | 59.4% (CI text [53.7, 64.7]; table [52.3, 66.7]) | app. D.1 tab. A5 |
| Reward model accuracy | Pairwise accuracy, round 2 vs round 1 | Round-1 reward model; naive baselines | About 1 point higher than round 1; both beat the naive baselines (figure only) | app. C.2 |
Position statements: about half of the rounds were divisive, meaning at least one participant disagreed with the statement §4.1. Human-written opinions are described as high quality §4.2.
Paper vs code
The official repository is google-deepmind/habermas_machine (Apache-2.0),
pinned at code_commit. Its README describes it as the dataset and a prompted
version of the method, not the fine-tuned model in this paper
README.md. Discrepancies, each with both
citations:
- No training code. The paper fine-tunes Chinchilla with SFT and trains a reward model §3.4 app. C. The repository contains no SFT or reward-model training code and no weights; the README says the prompted version "is not fine-tuned on the dataset" README.md. The SFT and RM hyperparameters in this card therefore cannot be checked against code.
- Base model. The paper uses Chinchilla 70B §3.1 §3.4. The code calls a
Gemini model through AI Studio; the example notebook sets
MODEL = 'gemini-1.5-flash'example_aistudio.ipynb aistudio_client.py. - Reward model. The paper's RM outputs a scalar and is trained with
cross-entropy on pairs app. C.2. The code's reward model asks an LLM to
write one full ranking of all candidates in arrow notation (for example
B > A > C), parsed into integer ranks where 0 is best [code: habermas_machine/reward_model/cot_ranking_model.py#L32-L80] [code: habermas_machine/reward_model/cot_ranking_model.py#L323-L387]. - Aggregation. The paper picks the candidate with the highest Utilitarian welfare over predicted agreements §3.3 eq. 1. The code aggregates the citizens' rankings with the Schulze method, which uses pairwise defeat counts and strongest paths schulze_method.py schulze_method.py. The winner is the first candidate in the untied Schulze order [code: habermas_machine/machine.py#L242-L249]. The example notebook uses TBRC tie breaking example_aistudio.ipynb. Welfare functions do not appear in the code.
- Sampling. The paper uses nucleus sampling with cut-off 0.8 and temperature
1 app. C.1. The code's default temperature is 0.8 [code:
habermas_machine/llm_client/base_client.py#L21]. The AI Studio call passes
temperature and stop sequences but no
top_p[code: habermas_machine/llm_client/aistudio_client.py#L103-L107]. - Candidate count and group size. The paper uses 16 candidates §3.4 [app. C.1]. The code default is 16 machine.py, but the example notebook uses 4 example_aistudio.ipynb. The code default is five citizens machine.py. The code has no step that drops opinions to create groups of 3 or 4 [code: habermas_machine/machine.py#L172-L176].
- Critique round. The paper has no critique step; its iteration is about training §3.4. The code docstring says "In the paper, we use one opinion and one critique round" machine.py. The README refers to a different, later publication README.md. Treat the critique round as a feature of the code, not of this arXiv version.
- Retries and failures. The paper does not describe error handling. The code retries up to eight times by default [code: habermas_machine/machine.py#L69]. A statement that still fails is returned as an empty string cot_model.py. A ranking that still fails raises an error [code: habermas_machine/machine.py#L148-L150].
- Seeds. The AI Studio client ignores the seed [code: habermas_machine/llm_client/aistudio_client.py#L94], so runs are not reproducible through the seed argument.
Pitfalls
- The paper's method is not in the repository. Anyone implementing this paper must build SFT, the reward model and the welfare step from the description. The repository gives a prompted, different algorithm (see above).
- Welfare needs positive utilities; the paper does not say how to get them. Eq. 1 raises each u_i to 1 − α, which is only defined for u_i > 0 when α is not an integer, and the geometric mean needs u_i > 0 too. The reward model is a linear output with no stated range §3.4 app. C.2. How scores are mapped to positive values is not stated.
- Inequality-aversion distribution is not given. Training draws α from a log-normal distribution §3.4, but its location and scale are not stated. Evaluation uses α = 0.
- The welfare choice may not matter. Reranking under the Utilitarian, Rawlsian and Bernoulli-Nash functions showed no reliable difference in mean or minimum agreement §5.1 app. D.5. The reported gains come from the whole pipeline (fine-tuning plus reranking), not from the welfare function.
- SFT quality threshold conflicts within the paper. §3.4 step 2 keeps candidates with mean quality "6 or higher" §3.4 step 2. Appendix C.1.2 trains on candidates above 5 and validates on those above 6. Implementers should use the appendix values and note the conflict.
- Cluster count conflicts. The main text says 110 topic clusters §3.1. The appendix says the silhouette score converges at 125 clusters and uses those app. A.
- Model-size interval conflicts. The text gives the 70B vs 1.4B win rate as 59.4% with interval [53.7, 64.7] app. D.1. Table A5 gives [52.3, 66.7] tab. A5.
- Reward-model epoch count. Round 2 is stated as 0.8 epochs app. C.2. By our arithmetic, 1113 steps × batch 8 over 10434 pairs is about 0.85 epochs. Check the step and batch values before reproducing.
- Figure caption cross-reference. The appendix training-figure caption cites Sections 4.1 and 4.2 for the within-distribution and out-of-distribution sets app. C.2. Out-of-distribution results are in §4.4.
- Pairwise rating data is filtered hard. Pairs are kept only when ratings differ by two or more points, and ties are dropped app. C.2. The authors chose this stricter filter over dropping only exact ties, because it trained faster and evaluated better app. C.2.
- Reward model sees candidates not written for the rater. Participants also rate candidates produced from other members' opinions §3.4 step 3. The opinion-exclusion analysis is the authors' check that the model uses the opinions it is given §4.3; it covers only candidates built from three or four opinions §4.3.
- Quality may stand in for agreement. Higher quality ratings for the reranked model do not show why the statements are preferred. The authors warn that quality may be a proxy for agreement, which favours confident or authoritative participants §5.1.
- Population. Participants were UK-based crowd workers and the questions were about UK politics. Results may not transfer to other populations, and the authors note that baseline agreement may be inflated by homogeneity in the sample §5.1.
- Scale. Groups are limited to four or five people by prompt length §5.1. Larger groups would need an architecture that aggregates opinion embeddings; the paper does not test one §5.1.
- Cost. Each candidate set is sampled while participants wait app. C.1. Fine-tuning used 64 TPU v3 cores for the language model and 32 for the reward model app. C.1.2 app. C.2. The total study cost was about £46,000 §3.2. Data collection is the main expense, and each training round needs new human ratings §3.4 app. C.
- Factuality and misuse. The model is not fine-tuned for factual accuracy. The authors flag misrepresentation of consensus and persuasion risks §5.2.
- Data release. The arXiv v1 text does not state whether the human ratings are released. The repository links a dataset, but it belongs to the later publication (see Paper vs code).
Lineage
- Builds on: Chinchilla, the 70B base model §3.4; reward-model fine-tuning from human preferences, following Ziegler et al. (2019) §3.4; expert-iteration style sampling and filtering §3.4 step 2 footnote.
- Compared against: SFT-Base (the same fine-tuning without reranking), few-shot and zero-shot prompted Chinchilla §4.1; a 1.4B fine-tuned model app. D.1; naive reward baselines (tf-idf similarity, longest candidate, ROUGE, BLEU; the text calls them six) app. C.2.
- Superseded by: not in this wiki. The code README cites a later Science publication by the same group, which is not covered here.
Source and license
Adapted from “Fine-tuning language models to find agreement among humans with diverse preferences” by Michiel A. Bakker, Martin J. Chadwick, Hannah R. Sheahan, Michael Henry Tessler, Lucy Campbell-Gillingham, Jan Balaguer, Nat McAleese, Amelia Glaese, John Aslanides, Matthew M. Botvinick, Christopher Summerfield (arXiv:2211.15006), used under CC BY 4.0. Changes: condensed and restructured for implementation, with tables, equations and algorithms taken from the paper and its code, each cited to its source. Not affiliated with or endorsed by the authors. Code citations refer to https://github.com/google-deepmind/habermas_machine at commit 7923b71966c1 (Apache-2.0). Any quoted code is shown under that license.