Human Emotion Ontology (HEO) · Schema version 1.0.0
The ontology is designed to answer the question: can it represent the emotional states and transitions a real human might experience, rather than merely providing a dictionary of emotion words? The design follows from that goal:
of 18 edge types; similarity, opposition, blending, transition, co-occurrence, amplification, inhibition, motivation, expression, physiology, appraisal, and culture are all first-class.
Contested nodes carry multiple parents/groupers, low confidence, and notes documenting the dispute.
desire, motivation, appraisal, physiological state, behavioral tendency, trait, sentiment, and mental state are distinct node categories (see §1.4 of the research report). The graph can be filtered to "emotions only" or queried across categories.
unsupported, strength is strong | moderate | weak | unknown and strength_value is absent. No numeric similarity is fabricated.
level and an evidence status, with citation keys resolved in data/ontology-meta.json → sources.
See schema/emotion-node.schema.json (JSON Schema draft 2020-12). Key fields:
| Field | Meaning | |||
|---|---|---|---|---|
id | Stable identifier, namespaced: emotion., mood., feeling., drive., need., motivation., desire., appraisal., physio., behavior., trait., mental., meta., system., cultural., cat. (category roots), grp. (subcategory groupers), abstract. | |||
category | One of 17 ontological kinds (see research report §1.4) | |||
subcategory | Finer class: basic_emotion, social_emotion, self_conscious_emotion, moral_emotion, epistemic_emotion, aesthetic_emotion, prospective_emotion, retrospective_emotion, empathic_emotion, mixed_emotion, cultural_emotion, mood_state, homeostatic_drive, appraisal_type, affective_trait, neurobehavioral_system, category_grouper, superordinate, … | |||
definition | Concise definition distinguishing the state from near neighbors | |||
synonyms | Alternative labels for the same concept | |||
near_synonyms | Ids of distinct-but-close states (generates near_synonym_of edges) | |||
parents | Ids of direct superordinates (generates subtype_of edges); children is computed | |||
dimensions | Prototypical valence/arousal/dominance (+ optional approach-avoidance, certainty, agency, sociality, temporal orientation). Estimates — see §2.6 | |||
common_triggers, appraisals, physiological_associations, behavioral_tendencies | Content fields; the last three also generate edges | |||
duration, object_directedness | Emotion-episode vs. mood-like structure | |||
cultural_scope | broad | western_bias | culturally_specific | unclear |
confidence, evidence_status, evidence | Confidence model (see 05-confidence-model.md) | |||
theoretical_frameworks | Which traditions treat this as a genuine construct |
See schema/relationship.schema.json. Edge types and their semantics:
| Type | Directional | Semantics |
|---|---|---|
subtype_of | yes | Class–subclass. Generated from every parent link. |
is_a | yes | Instance-of. Reserved for instance nodes (none currently; documented for future use, e.g., "this person's state at t"). |
part_of | yes | Whole–part within a construct (e.g., appraisal_process part_of emotion episodes; valence/arousal/dominance are parts of core affect). |
component_of | yes | Inverse of part_of (derivable; not emitted separately). |
blend_of | yes | Target is a combination of source + sibling components (component → blend). |
similar_to | no | Continuous similarity (non-hierarchical closeness). |
near_synonym_of | no | Near-interchangeable terms. |
opposite_of | no | Bipolar contrast (Plutchik pairs, circumplex opposites, semantic contrasts). |
co_occurs_with | no | Frequently experienced together (mixed emotions, background+foreground). |
amplifies | yes | Source intensifies target. |
inhibits | yes | Source dampens target. |
transitions_to | yes | People commonly move from source state to target state (temporal dynamics). |
often_follows / often_precedes | yes | Weaker temporal regularities; mirrors of each other (both emitted for query convenience). |
triggered_by | yes | Source state is elicited by the target (used for non-appraisal elicitors: fatigue → irritation, pain → anger, systems → emotions). |
appraised_as | yes | Source state characteristically involves the target appraisal. |
motivates | yes | Source state instigates the target motivation/behavior. |
behavioral_expression_of | yes | Target is the expressive behavior of source. |
physiological_association | yes | Source co-occurs with target bodily state (weakly and inconsistently; see disagreement registry). |
culturally_related_to | no | Cultural concept maps partially onto the target concept. |
Design choices worth noting:
similar (fear ≈ anxiety) without a person typically transitioning between them; and a transition (threat → fear → relief) may pass through dissimilar states. This is the distinction the field's static taxonomies usually lack.
materialize both directions. directional: false marks the symmetry.
but a blend can also be a node that co-occurs with or transitions to its components.
Every node has at least one parent. Structural nodes:
cat.* — 15 category roots (emotion, mood, feeling, drive, need, motivation,desire, appraisal, physiological_state, behavioral_tendency, trait, sentiment, mental_state, affective_system, meta_state).
positive_emotion, negative_emotion, social_emotion, self_conscious_emotion, moral_emotion, epistemic_emotion, aesthetic_emotion, prospective_emotion, retrospective_emotion, empathic_emotion, mixed_emotion, cultural_emotion, homeostatic_drive, appraisal_type).
Because subcategory groupers are themselves nodes, the hierarchy is queryable: emotion.guilt is subtype_of cat.emotion, grp.self_conscious_emotion, grp.moral_emotion, and grp.negative_emotion; emotion.fear is subtype_of cat.emotion, grp.basic_emotion, and grp.negative_emotion. A machine-readable taxonomy tree can be derived directly from subtype_of edges (see 03-taxonomy.md).
The ontology's schema supports a state-space representation that no single JSON node expresses:
Momentary state. A person at time t is a vector over node ids. The graph places soft constraints on plausible vectors: co_occurs_with edges mark pairs that frequently co-activate; opposite_of edges mark pairs unlikely to co-activate strongly; inhibits edges mark causal damping; amplifies marks escalation. Representing a moment as {Fear: 0.7, Curiosity: 0.6, Excitement: 0.4, Sadness: 0.2} is fully consistent with the schema; the weights are degrees of activation/prototypicality (a blend of fuzzy-set and appraisal-intensity readings), not physiological measurements.
Blends. blend_of edges model composition: nostalgia = joy + sadness (Sedikides et al. 2015), schadenfreude = pleasure + resentment (Smith et al. 1996), heartbreak = love + grief. Where Plutchik's dyads are idiosyncratic (e.g., guilt = joy + fear), confidence is low and the dispute is recorded.
Transitions. transitions_to edges form directed paths, e.g.: uncertainty → concern → fear → panic; desire → anticipation → frustration → anger; loss → sadness → grief → resignation; threat → fear → relief; injustice → anger → resentment; achievement → pride → confidence. The research report and 04-disagreement-registry.md note which transitions have direct empirical support (e.g., frustration → aggression, Berkowitz 1989; guilt → reparation, Tangney & Dearing 2002) versus which are plausible modeling choices.
Intensity. Intensity is not a separate node type; it is (a) the arousal and dominance dimensions, (b) intensity-pole nodes already present (irritation → anger → rage; unease → anxiety → terror), and (c) a free parameter in the state-vector representation.
Every node with a dimensions object carries valence ∈ [−1, 1], arousal ∈ [0, 1], dominance ∈ [−1, 1], and optional appraisal-like dimensions (certainty, agency, sociality, temporal_orientation), all marked confidence: low with the note that they are prototypical estimates anchored on:
English lemmas);
These values are useful for plotting (the Valence × Arousal map view), clustering, and approximate inference. They are not measurements of any individual's state and should not be treated as ground truth. See 05-confidence-model.md.
The datasets load directly into any property-graph system:
edges = typed relationships with strength, confidence, evidence_status.
directional: false edges can be added in both directions or treated as undirected.
to properties; subtype_of maps to rdfs:subClassOf; part_of to dcterms:isPartOf; opposite_of to a custom property.
tools/inspect_graph.py is a working minimal loader and integrity checker (validates node/edge existence and non-redundant symmetric storage). A NetworkX one-liner example is in the README.