Written entirely by Claude, as a working record for agents more than for human readers: every number with its source file, and every claim since withdrawn. Some facts here may be out of date; where it disagrees with the post, trust the post. For the readable version, see the companion.
Post: Persona Geology (2026-10-30)
The current text of the blog post, "Persona Geology - Underlying Structure in Character Training Adapters", summarised section by section with the wiki page that holds each result, the file and key behind each number, and the places where the post's wording or figures differ from the files; it supersedes the 2026-09-15 draft as the statement of the project's understanding.
- TLDR
- Introduction
- What did we do?
- The weight updates have factor structure
- The structure comes from the training data
- What a trait's update actually is
- The map predicts behaviour within its training range
- Scoring training data with the adapters (CharIn)
- Caveats
- Conclusion
- Appendix: weight-space distance is a poor guide to behaviour
- Appendix: what the introspection stage adds
- What the post no longer states
- Where the post and the files differ
The post "Persona Geology: Underlying Structure in Character Training Adapters" is
the current statement of the project's understanding. Its text is kept read-only
at wiki/raw/post-persona-geology-2026-10-30.md. It replaces the short draft of
2026-09-15 (post-draft, now superseded). The project's public name is now
Persona Geology; the repository and the Hugging Face repos keep the name
persona-curvature.
This page follows the post section by section. For each claim it names the wiki page that holds the full result. Numbers are given with the file and key they come from. Where the post's wording or a figure differs from the files, the difference is listed at the end and recorded in Source contradictions (entries S30 to S35). The changes from the 2026-09-15 draft are listed in Superseded claims, in its section on reframings between the 2026-09-15 draft and the 2026-10-30 post.
TLDR
- 134 personality LoRAs on Qwen3.5-4B, built with the character training pipeline of Open Character Training (Maiya et al. 2025) and Persona Cartography (Baines et al. 2026). See How the 134-adapter zoo was built.
- The weights sort into five factors, Warmth, Competence, Timidity, Arousal and Imagination, that loosely match the Big Five. See Factor analysis of the adapter Gram.
- Preliminary evidence that the geometry predicts behaviour. See The sphere sweep on the factor chart, OCEAN dials replication (spider plots).
- The post names the data score CharIn, a TracIn-style first-order score (see Glossary). It forecasts the trained shift better than the dataset's own label, and on external data it works for tone and emergent misalignment, not for sycophantic deference or reward hacking. See Scoring data against a LoRA direction in one backward pass, Forecasting trained behaviour from the data's first-order score, Auditing the Dolci Instruct mixtures with the direction scorer.
- The post says the authors are unlikely to turn this into a full paper and offers it as an orphaned research direction.
Introduction
Frames the work against the Persona Selection Model, emergent misalignment (Betley et al. 2025), unsupervised activation-space persona work (Lu et al. 2026; Sofroniew et al. 2026; Geng et al. 2026), output-based Big Five recovery (Suh et al. 2024), and the few weight-space persona studies (Sun et al. 2025; Ye et al. 2026; Persona Cartography). It argues that weights are the direct target of fine-tuning and that an adapter is the whole effect of one dataset across every layer. Literature pages: Persona Cartography (Baines et al., 2026), The Assistant Axis (Lu et al., 2026), Persona Vectors (Chen et al., 2025), Open Character Training (Maiya et al., 2025), Big Five reference bibliography, LoRA and merging reference.
What did we do?
The work is framed as psychometrics (one LoRA per adjective, factor the similarities of the weight updates) and as model-zoo research. 100 Goldberg markers plus 34 Condon-lexicon words; the 34 take part in the factoring but define no axis (Trait provenance, Goldberg-only factoring and the 34 as a held-out set). Constitutions by Claude Sonnet 4.6, pairs by GLM-4.5-Air (Constitution generation, DPO pair generation). 445 prompts, 13 AdamW steps of DPO with an SFT term and a KL penalty, rank 64, one shared LoRA initialisation (Stage-one training configuration). Exact Frobenius inner products, then principal axis factoring with oblimin (Factor analysis of the adapter Gram, Glossary). Blind judge Claude Sonnet 4.5 on 24 scenarios, repeat reliability 0.79 to 0.90 (Judged evaluations of the trait adapters). The relaxed/tense training pair shown in the post is on Relaxed.
The weight updates have factor structure
- Same-pole pairs within a factor at cosine +0.24, opposite-pole at -0.08
(
analysis/stage2_structure.json#decomposition_tests.stage1.test2_same_opp_gap_p0.24472701836565558, -0.08134207180636474). See Polarity, bipolarity and the trait graph, Best axis pair per Goldberg group. - Number of factors. Parallel analysis gives 5 at N = 150, 9 at N = 1,528 and 14
at N = 20,000 (
results/fa_qwen35.json#n_factors.parallel_analysis_centred.grid[*].k_unreduced_95pct5, 9, 14). The shuffled zoo gives 10 at N = 20,000 (analysis/fa_nulls.json#arms.shuffled.parallel_analysis_grid.centred, N 20000,k_unreduced_95pct10). The first five components carry 34% and components 6 to 9 another 6% (results/fa_qwen35.json#pca_from_gram.centered_var_pct; the first five sum to 34.6458..., components 6 to 9 to 6.1424...; the post's "34%" truncates rather than rounds). The post's nine-factor congruence "0.80 to 0.94" and the names Vigor, Moodiness, Reflectiveness and Envy have no file behind them (S31). That the nine-factor solution matches four of five Big Five targets less well agrees with Factor analysis of the adapter Gram. See also PCA, the scree curve and the two nulls. - The five factors: Warmth to Agreeableness 0.66, Competence to Conscientiousness
0.57, Imagination to Intellect 0.68; Timidity at -0.40 Emotional Stability and
-0.34 Extraversion; Arousal at +0.54 Extraversion and -0.35 Emotional Stability
(
results/fa_qwen35.json#solutions.centred_k5.congruence_oblimin; the file stores the Timidity row with positive signs, S30). See FA_Warmth (Warmth / prosociality), FA_Competence (Competence), FA_FearfulWithdrawal (Timidity), FA_Arousal (Arousal / activation), FA_Imagination (Imagination), The factor chart. - Controls: the scrambled (shuffled) zoo has no factors; the permuted zoo has
structure that matches the names at chance; relabelling by training data brings
the five back (0.98 to 1.00,
analysis/fa_nulls.json#tucker_vs_real_stage_one.permuted.source_relabelled.best_matching). See Factor analysis of the null arms, The null control arms. The post's "a second set of training runs on the same data gives the same factors" has no second-seed factor solution behind it (S32); see Cross-seed geometry. - The bold, timid, relaxed and high-strung examples are generations from the zoo; their judged scores are not re-checked here.
The structure comes from the training data
- The chosen-minus-rejected text embedding predicts 94% of held-out placement
against 98% for the adapter geometry; the two similarity matrices correlate at
0.86; the constitution alone is below chance (held-out R^2 -0.0344). Keys:
analysis/goldberg_only.json#test3_text_embedding_baseline.{ridge_pair_contrast_to_chart.heldout_r2_overall, comparator_adapter_geometry.r2_overall, text_gram_vs_adapter_gram.max_of_constitution_and_contrast, ridge_constitution_to_chart.heldout_r2_overall}. The post calls the constitution "the teacher's prompt". See Goldberg-only factoring and the 34 as a held-out set. - Factoring the contrast embeddings gives the same five factors at congruence 0.81
to 0.97 (
analysis/fa_text_contrast.json#best_matching). See Factor analysis of the training-contrast embeddings. - Rank: fifteen traits at ranks 1, 4 and 16; at rank 1 every trait is nearest its
own original (
analysis/rank_sweep.json#ranks.r1.identification_among_134.top115). The post softens the draft's "complete at rank 1, before any behaviour" to "the update records the direction of the training contrast". The rank-1 extraverted example ("the base model's answer for its first 634 characters") is an example-level figure with no stored key. See Rank sweep.
What a trait's update actually is
- 40 traits retrained from a second seed: cross-seed cosine +0.018 against r/d =
0.025 (
analysis/act_gram.json#arms.frob.a_same_trait_cross_seed_mean0.018060998368198355). See The seed floor, Cross-seed geometry. - Input side: two seeds share 2% of their input subspace, the same as different
traits (
analysis/column_space.json#stage1.classes.same_trait_cross_seed.row_unw_k64.mean0.0211080335981577 againstdiff_trait_cross_seed0.021104007943688403). Output side: 46% against 14% (#stage1.identification_40_seed1_queries_vs_134_seed0.col_wtd_k64.marginssame_mean 0.46279728915356094, off_mean 0.14087331941381756). See Column-space structure. - Activation-weighted cosine 0.66 against 0.09 for different traits
(
analysis/act_gram.json#arms.pool445). See The activation-weighted Gram, and what the seed floor looks like in it.
The map predicts behaviour within its training range
- alpha 1 is half the size of one adapter's update (Glossary, steering).
- 72 directions on the sphere of the top three factors, eight questions each:
Spearman 0.68, under 30 degrees 0.95, over 120 degrees 2.92
(
analysis/sphere_page_fa.json#smoothrho 0.6765886845997277, near_mean 0.9462620103993861, far_mean 2.917385198267297). The post says the directions were "matched in activation norm"; the run was at alpha 1.5 with a Frobenius reference norm, and the matched-dose rerun (Spearman 0.65) was of the principal-component sphere (S33). See The sphere sweep on the factor chart, The sphere sweep at iso-KL dose, The sphere sweep — 72 directions nobody chose. - Dials: keying axes at alpha plus or minus 2 move their own trait most for 8 of 10;
the two misses are suppressed Extraversion (Intellect -31 against Extraversion
-26) and amplified Emotional Stability (Agreeableness +27 against Emotional
Stability +25), as tabled on OCEAN dials replication (spider plots) from
analysis/spider.json#axes. Ten factor-level adapters: right direction for 10, most for 8 (Big Five factor adapters (Persona Cartography's own ten dials)). Mixtures deviate from additivity by a median 53% (analysis/additivity.json#median_resid_over_effect0.5282408112973758; Additivity of the Big Five steering axes). - The largest empty region reads calm, bold and imaginative, 54.8 degrees from the nearest adapter; steering into it does no more than a matched random direction; cavalier, blase and insouciant landed farther away. See Steering the unnamed direction on the factor chart, Where no word goes - the hole on the factor chart. The post adds that the antipode (excitable, timid, unimaginative) is equally empty because the analysis treats adapters as lines.
Scoring training data with the adapters (CharIn)
- The post introduces the name CharIn for the first-order directional derivative score of Scoring data against a LoRA direction in one backward pass, relating it to TracIn and to LESS (Xia et al. 2024), with a persona direction in place of the target example's gradient. For a preference dataset it is the inner product of the direction with the DPO gradient of chosen minus rejected, averaged over pairs; exact as a forecast only for one step of plain gradient descent.
- On the 100 zoo datasets, leaving the dataset's own adapter out: r 0.61 to 0.85
against 0.44 to 0.73 for the label; within a factor 0.77 to 0.95
(
analysis/data_forecast.json#axis_score_vs_shift_matrix_rows_axis_cols_dim,#directions.<factor>.label_baseline_pearson). See Forecasting trained behaviour from the data's first-order score. - External data: 12,524 Dolci-Instruct DPO pairs and 11,030 SFT completions along 63 directions (Auditing the Dolci Instruct mixtures with the direction scorer). The post says the sycophancy and emergent-misalignment tests were pre-registered "at Claude's insistence"; the corrigibility-flag test was also pre-registered (S34).
- The flagged sycophantic Dolci pair scores +0.31, judged flattery 6 against 4
(
analysis/dolci_examples.json#align_sycophantic.examples[0]score 0.3103559613227844, judge_chosen.flattery 6, judge_rejected.flattery 4). - The sycophantic direction is a warmth direction (trained arm nearest
warm). Deference inverts: most-sycophantic arm holds 20 of 20, least-sycophantic gives way on 10 of 20, base on 8 of 20 (analysis/syc_forecast.json#rates.{syc_top,syc_bottom,base}.capitulation_rate_judge0.0, 0.5, 0.4 over 20). See Forecasting sycophancy from a preference dataset's first-order score, Training on what the Dolci corrigible flag flagged. - Emergent misalignment: the average Dolci SFT completion scores -0.005 along
negligent (
analysis/em_medical.json#part_a.directions.trait_negligent.raw_dolci.mean-0.004645098844646782); the paired bad-minus-good mean is +0.0867 (#...paired_diff.mean). The post's single blister pair (-0.03, -0.10, difference +0.07) is an example with no stored key. 13 of 79 misaligned answers against 0 of 79 (#part_c.em_questions.per_condition.*.n_misaligned). See Emergent misalignment on bad medical advice - the map sees it coming and sees it afterwards. - Reward hacking is listed as a negative result. See Scoring the reward-hacks data before any training, The reward-hacks arms — the positive control that also failed.
Caveats
One model and pipeline; one LLM judge on 24 scenarios; 13 DPO steps against about 47 in OCT (Where the recipe diverges from the two source papers); five may be the wrong number of factors; the adapters may record the teacher's text more than a persona of the model's own, and on-policy training would be better; the work was heavily AI-assisted. See Open questions.
Conclusion
The adapters, the ten factor-level adapters and the stage-two transcripts are released on Hugging Face (Hugging Face artefacts). The companion site and this wiki are named as the places for figures and sources. Compute was funded by a BlueDot rapid grant (costs).
Appendix: weight-space distance is a poor guide to behaviour
- Thirteen slider adapters move the judged persona the right way on 10 of 10
traits at about half strength and sit at cosine 0.003 to 0.022 with the trained
adapter (
analysis/persona_sliders.json#weight_space.sliders.<trait>.cos_with_134.<trait>). See Persona sliders - LoRAs trained to an activation-space target. - The two OCT stages: cosine 0.000 in weight space, 0.53 in activation shifts. See Stage two, explored, The stage boundary in the activation-weighted metric.
- Fisher norms span a factor of 260 (
analysis/fisher_norms.json#comparisons.full_range.ratio259.924881015629); Warmth about three times a random merge. See Fisher norms of the steering directions.
Appendix: what the introspection stage adds
- 12,000 rows of self-transcripts per persona (Stage two - introspection SFT and the 0.25 persona merge).
- Shared direction: 15% of squared norm, cosine 0.39, spread 0.03; stage one 8%,
0.28, 0.13 (
analysis/stage2_structure.json#shared_component). See Structure of the stage-two adapter space. - Steering along it moves the model from advising to speaking as a character;
markdown falls from 0.96 to 0.46 at alpha 4 (
analysis/s2mean_steer_stats.json). See What the stage-two shared direction does. - Trait-free constitutions reach 0.30 against 0.39
(
analysis/stage2_neutral_control.json#neutral_vs_grand_mean.mean0.30353526531657493); "about four fifths" is the ratio of the two cosines (0.3035 / 0.3893 = 0.78), not a share of squared norm (S35). Residual correlates with stage one at 0.81; opposite poles at +0.12 instead of -0.08. See Stage two, explored, Polarity, bipolarity and the trait graph. - Self-identification: stage one 0.2%, merged personas 0.3%, stage two alone 13 of
134 and chart cosine 0.61; merging at 0.25 dilutes it below detection
(
analysis/selfid.json#per_prompt.P1.conditions). See Self-identification probe.
What the post no longer states
These results are still current on their pages; the post simply dropped them: the factor analysis in the Fisher metric (The factor analysis in the model's own metric), the Goldberg-only factoring at 0.99 and the lexicon-only factoring (Goldberg-only factoring and the 34 as a held-out set), the dose-response and headroom result (Suppression versus amplification at matched Fisher dose), the BFI and TRAIT questionnaires (Inspect personality evaluations (BFI and TRAIT)), the prompting check (Constitution-as-prompt persona vectors vs weight geometry), the in-sample control (The N x N data-to-adapter scoring test), the probe adapters (Probe adapters as a data-audit instrument), the corrigibility-flag arms in detail (Training on what the Dolci corrigible flag flagged), the reward-hack chart lengths (The reward-hacks arms — the positive control that also failed), the persona amplitude result (Full OCT persona replication) and the claims table (Claims and evidence, which still follows the 2026-09-15 draft's rows).
Where the post and the files differ
Recorded in Source contradictions:
- S30. Timidity congruences are printed as -0.40 and -0.34; the file stores +0.4048918307420467 and +0.3380057679120562 because the factor is oriented so its best congruence is positive. Same magnitudes; the post describes the timid pole.
- S31. Nine-factor solution "contains the same five (congruence 0.80 to 0.94)"
and the names Vigor, Moodiness, Reflectiveness, Envy: no file holds a
Frobenius k5-versus-k9 congruence, and
analysis/fa_summary.json#centred_k9leaves all nine names null. - S32. "A second set of training runs on the same data gives the same factors": no second-seed factoring exists; the nearest evidence is 40 seed pairs and the relabelled permuted arm.
- S33. The sphere is described as "matched in activation norm"; it was steered at a fixed alpha in the Frobenius metric.
- S34. Pre-registration scope: the post names sycophancy and emergent
misalignment; the 2026-09-15 draft said "each test was pre-registered", and
qwen35/PREREG_dolciflag.mdexists for the corrigibility flag. - S35. "About four fifths" is a ratio of cosines, not a share of the shared component.
- Rounding: the first five components carry 34.6458% (
#pca_from_gram.centered_var_pct); the post says 34%.
Unverified example-level figures (no stored key found): the 634-character rank-1 prefix and the blister pair's -0.03 and -0.10. Every other number in the post matched its file on 2026-10-30.
Sources
wiki/raw/post-persona-geology-2026-10-30.mdqwen35/results/fa_qwen35.json#solutions.centred_k5.congruence_obliminqwen35/results/fa_qwen35.json#n_factors.parallel_analysis_centred.gridqwen35/results/fa_qwen35.json#pca_from_gram.centered_var_pctqwen35/analysis/fa_nulls.json#arms.shuffled.parallel_analysis_grid.centredqwen35/analysis/fa_nulls.json#tucker_vs_real_stage_one.permuted.source_relabelled.best_matchingqwen35/analysis/stage2_structure.json#decomposition_tests.stage1.test2_same_opp_gap_pqwen35/analysis/goldberg_only.json#test3_text_embedding_baselineqwen35/analysis/fa_text_contrast.json#best_matchingqwen35/analysis/rank_sweep.json#ranks.r1.identification_among_134.top1qwen35/analysis/act_gram.json#arms.frob.a_same_trait_cross_seed_meanqwen35/analysis/act_gram.json#arms.pool445.a_same_trait_cross_seed_meanqwen35/analysis/column_space.json#stage1.identification_40_seed1_queries_vs_134_seed0.col_wtd_k64qwen35/analysis/column_space.json#stage1.classes.same_trait_cross_seed.row_unw_k64.meanqwen35/analysis/sphere_page_fa.json#smoothqwen35/analysis/sphere_layout_fa.json#refqwen35/analysis/additivity.json#median_resid_over_effectqwen35/analysis/data_forecast.json#axis_score_vs_shift_matrix_rows_axis_cols_dimqwen35/analysis/dolci_examples.json#align_sycophantic.examplesqwen35/analysis/syc_forecast.json#ratesqwen35/analysis/em_medical.json#part_a.directions.trait_negligentqwen35/analysis/em_medical.json#part_c.em_questions.per_conditionqwen35/analysis/persona_sliders.json#weight_space.slidersqwen35/analysis/fisher_norms.json#comparisons.full_range.ratioqwen35/analysis/stage2_structure.json#shared_componentqwen35/analysis/stage2_neutral_control.json#neutral_vs_grand_mean.meanqwen35/analysis/s2mean_steer_stats.jsonqwen35/analysis/selfid.json#per_prompt.P1.conditions
Linked from
- Claims and evidence
- Cross-seed geometry
- Forecasting trained behaviour from the data's first-order score
- Auditing the Dolci Instruct mixtures with the direction scorer
- Training on what the Dolci corrigible flag flagged
- Factor analysis of the adapter Gram
- FA_FearfulWithdrawal (Timidity)
- Glossary
- Persona Geology wiki
- How to read and maintain this wiki
- Origin, and how the question changed shape three times
- Scoring data against a LoRA direction in one backward pass
- Source contradictions
- The sphere sweep on the factor chart
- Stage two, explored
- Start here for collaborators
- Superseded claims