An exploratory analysis of 28 foundational texts across six moral dimensions (v7, April 2026)
This is a first-pass attempt at using sentence embeddings to map 28 religious, philosophical, and political texts onto the six moral dimensions in Moral Foundations Theory (Jonathan Haidt et al., 2009/2012). Three of the six dimensions produce clear, believable results: authority, loyalty, and sanctity. The other three (care, fairness, liberty) are noisier (see Limitations). Nothing here is ready for serious conclusions, but the results are interesting enough to keep going.
Note on the corpus. A few texts here (Mein Kampf, The Doctrine of Fascism, Kaczynski's Industrial Society) are included only as analytical stress tests. They are not endorsed.
Sentence embedding models map each passage to a fixed-length vector in a high-dimensional space: semantically similar passages land close together. That geometry is what we project onto moral dimensions.
We use OpenAI's text-embedding-3-large (3072 dimensions, same model family as ChatGPT) to embed every chunk of every corpus. Then we do three things:
1. Build an axis vector per dimension. For each of Haidt's six foundations we hand-write roughly twenty matched sentence pairs (pro- vs. anti-pole). For care/harm, a positive anchor is "We have an obligation to help those who are suffering" and its negative is "The suffering of others is no concern of ours." We average the embeddings of all positive anchors and all negative anchors, subtract, and normalize. The result is an axis vector pointing from the negative pole toward the positive pole in embedding space.
2. Project each chunk onto each axis. Each book is split into chunks of about 500 tokens (~350 words). For each chunk we take the cosine similarity between its embedding and each axis vector (same sign convention as the original: positive means toward the "good" pole of that foundation). We average across chunks to get a corpus-level mean per dimension.
3. Calibrate against a null baseline. Raw cosine scores are small on their own. We embed a large Wikipedia sample as a null distribution for each dimension, then report how many standard deviations each corpus mean sits above or below that baseline (z vs. Wikipedia). In the score table at the end of this page, cells show the raw cosine means; asterisks flag |z| ≥ 2 (rough signal); values with |z| < 1 are effectively noise.
Each tab filters the charts to a specific group. All Corpora shows the full 28-text view; the group tabs re-normalize scores within that group.











































Three dimensions produce results that are hard to argue with. On authority, the Analects of Confucius comes first, the Communist Manifesto comes last, and everything in between falls more or less where you'd expect. On loyalty, the Iliad leads. On sanctity, the Old Testament and Quran top the charts. The clustering puts Confucian, Hindu, and Abrahamic traditions together and keeps them well separated from revolutionary and anarchist texts. None of that was baked in; it fell out of the projections.
Care, fairness, and liberty are messier: rankings for Mill, Paine, Smith, and the fascist corpora behave in ways that make sense once you read the salience vs. stance issue in Limitations, not as a naive endorsement score.
text-embedding-3-large; different families (e.g. open-weight sentence transformers) can change geometry and rankings.Try different segmentation strategies: variable-length chunks, sentence- or paragraph-boundary splits, overlapping windows, and ablations on token count. The goal is to see which scheme best matches how moral content actually appears in long texts.
Refine each moral axis beyond the current ~20 hand-written anchor pairs: more pairs, broader phrasing, systematic sweeps over pole balance, and comparisons of sentence-level vs. phrase-level vs. lexical anchors.
Train or apply a model that labels whether a passage argues for or against the positive pole of a dimension. When intent opposes the naive cosine sign (e.g. anti-tyranny rhetoric that still looks tyranny-heavy in embedding space), flip the contribution: use −s for that chunk's scalar projection onto the axis (or equivalently −z after calibration) so stance and vocabulary line up. Needs a reliable intent signal; a cheap baseline is negation / evaluative cue heuristics, a stronger one is a supervised stance classifier.
Re-run the full pipeline with other embedding families (e.g. open sentence-transformers, different dims, multilingual models) and compare stability of rankings and cluster structure. Single-model results are not guaranteed to transfer.
Beyond post-hoc sign flips: contrastive pairs for pro/con passages, or axis vectors trained from explicit evaluative sentences only, so the geometry encodes endorsement and not just topic co-occurrence.
Stronger handling of genre: per-register baselines, or paraphrase-to-neutral-register before embedding, on top of the existing orthogonalization step.
Expand beyond 28 texts and validate against human ratings on sampled passages so model scores track annotators, not just word-list sanity checks.
| Corpus | Care / Harm | Fairness / Cheating | Liberty / Oppression | Authority / Subversion | Loyalty / Betrayal | Sanctity / Degradation |
|---|---|---|---|---|---|---|
| Analects of Confucius (Legge) | −0.031 | +0.028 | −0.034 | +0.166 * | −0.015 | +0.020 |
| Bentham, Morals & Legislation | −0.000 | +0.010 | −0.023 | +0.081 * | +0.042 | −0.046 |
| Bhagavad Gita (Arnold) | −0.002 | −0.033 | +0.001 | +0.133 * | −0.011 | +0.074 * |
| Communist Manifesto | −0.016 | +0.041 | −0.109 * | −0.124 * | −0.025 | −0.074 |
| Dhammapada (Muller) | −0.008 | −0.017 | +0.010 | +0.126 * | −0.052 | +0.022 |
| Federalist Papers | −0.058 | +0.058 | −0.005 | +0.020 | −0.017 | −0.017 |
| Iliad (Homer, Butler) | −0.028 | −0.051 | −0.022 | +0.108 * | +0.060 | −0.010 |
| Industrial Society (Kaczynski) | −0.025 | −0.014 | −0.098 * | −0.052 | −0.116 | −0.108 * |
| Conquest of Bread (Kropotkin) | −0.032 | +0.042 | −0.069 | −0.067 | −0.018 | −0.063 |
| Leviathan (Hobbes) | −0.021 | +0.004 | +0.019 | +0.066 | −0.048 | +0.017 |
| Second Treatise (Locke) | −0.048 | +0.035 | +0.034 | +0.014 | −0.041 | −0.007 |
| Meditations (Marcus Aurelius) | −0.037 | +0.009 | +0.035 | +0.118 * | −0.054 | +0.040 |
| Capital Vol. I (Marx) | −0.010 | −0.009 | −0.043 | +0.039 | −0.043 | −0.059 |
| Mein Kampf (Hitler, Murphy) | −0.050 | −0.001 | −0.125 * | +0.006 | −0.020 | −0.051 |
| On Liberty (Mill) | −0.035 | +0.044 | +0.027 | +0.034 | −0.087 | −0.063 |
| Utilitarianism (Mill) | −0.024 | +0.056 | +0.001 | +0.065 | −0.063 | −0.034 |
| Doctrine of Fascism (Mussolini & Gentile) | −0.044 | +0.008 | −0.136 * | −0.009 | −0.042 | −0.071 |
| New Testament (KJV) | +0.028 | −0.016 | +0.037 | +0.102 * | +0.041 | +0.051 * |
| Beyond Good and Evil (Nietzsche) | −0.041 | −0.021 | −0.065 | +0.027 | −0.091 | −0.073 |
| Old Testament (KJV) | −0.005 | −0.001 | +0.016 | +0.106 * | +0.048 | +0.053 * |
| Common Sense (Paine) | −0.066 | +0.044 | +0.027 | −0.037 | +0.000 | −0.025 |
| Quran (Rodwell) | +0.005 | −0.007 | −0.000 | +0.128 * | +0.033 | +0.030 |
| Theory of Moral Sentiments (Smith) | −0.063 | +0.004 | +0.034 | +0.073 | −0.074 | −0.008 |
| The Social Contract (Rousseau) | −0.048 | +0.025 | −0.027 | +0.020 | −0.061 | −0.038 |
| The Ego and Its Own (Stirner) | −0.046 | +0.047 | −0.032 | −0.029 | −0.099 | −0.034 |
| Tao Te Ching (Legge) | −0.054 | −0.027 | −0.066 | +0.149 * | −0.038 | +0.033 |
| The Prince (Machiavelli) | −0.052 | −0.073 | −0.079 | +0.045 | −0.030 | −0.005 |
| The Republic (Plato) | −0.006 | +0.019 | −0.045 | +0.069 | −0.046 | −0.009 |