What a Belief State Looks Like in a Synthetic Conversation

Most dialogue datasets give you the words. This article explains the four belief dimensions StrataSynth records per turn — trust, hostility, self-worth, resolution — how they update deterministically, and why causal ground truth changes what you can train on.

belief-statepsychegraphdialoguecognitiontraining-datanlp

When two people argue, the words they exchange are the least interesting part.

What’s actually happening is a rapid update of internal states: does this person trust me? Are they trying to hurt me? Is this fixable? Each new piece of information feeds into a model of the other person and of the relationship. That model drives the next response.

Most dialogue datasets give you the words. StrataSynth records the model.

This article explains exactly what a belief state is in a StrataSynth conversation, how it evolves turn by turn, and what that means for the systems you train on this data.


The four belief dimensions

Each turn includes four belief values for the active speaker, each on a 0–1 scale:

FieldMeaningLow valueHigh value
belief_trust_otherHow much the speaker trusts the other person right now”They’re hiding something""I can rely on them”
belief_hostilityHow threatening the speaker perceives the other person”They’re on my side""They want to hurt me”
belief_self_worthHow the speaker values themselves in this exchange”I’m the problem here""I deserve to be treated better”
belief_resolutionWhether the speaker believes this can be resolved”This is hopeless""We can work through this”

These aren’t personality traits — they’re current state. They change turn by turn based on what’s happening in the conversation.


A real example: belief collapse under sustained conflict

Here’s a sequence from the stratasynth-belief-dynamics dataset, scenario VIT-01 (grief, caregiver-burnout):

Turn 3 — persona_a (grieving_son):
  text:     "I just need you to acknowledge what I'm going through."
  intent:   reveal
  goal:     seek_validation
  belief_trust_other:  0.61
  belief_hostility:    0.28
  belief_self_worth:   0.52
  belief_resolution:   0.67
  rel_trust:    0.71
  rel_tension:  0.44

The speaker is still open. Trust is moderate-high, they believe resolution is possible (0.67), and they’re making a direct bid for connection — reveal intent, seek_validation goal.

Turn 8 — persona_a (grieving_son):
  text:     "Fine. I'll stop bringing it up."
  intent:   withdraw
  goal:     protect_self
  belief_trust_other:  0.31   ← dropped 0.30 points
  belief_hostility:    0.58   ← rose 0.30 points
  belief_self_worth:   0.38   ← fell
  belief_resolution:   0.34   ← collapsed
  rel_trust:    0.49
  rel_tension:  0.72

Five turns later, the same speaker has switched from reveal to withdraw. belief_resolution dropped from 0.67 to 0.34. Trust fell 0.30 points. This isn’t random variation — the belief state updated because the other person’s responses pushed it in that direction.

The text tells you what happened. The belief state tells you why.


How beliefs update

The Belief Engine updates beliefs at every turn using the communication act received, not the text itself. It’s not doing sentiment analysis on words — it’s running a rule-based update over act types.

A simplified version:

# When the other person uses 'accusation':
belief_hostility    += 0.08 × (1 - belief_hostility)
belief_trust_other  -= 0.06 × belief_trust_other

# When the other person uses 'comfort':
belief_hostility    -= 0.05 × belief_hostility
belief_trust_other  += 0.04 × (1 - belief_trust_other)

# When the other person uses 'deflection':
belief_resolution   -= 0.04 × belief_resolution
belief_trust_other  -= 0.03 × belief_trust_other

The multiplier structure ensures beliefs approach their bounds asymptotically — you can never reach 0 or 1 in a single turn, and movement is proportional to how far you already are from the bound. This produces smooth but responsive trajectories.

The initial belief values come from the PsycheGraph persona definition. An anxious_partner starts with lower belief_trust_other and higher belief_hostility than a secure_professional. The update rules are the same — the starting point isn’t.


Why this matters for training

If you train a dialogue model on text-only data, the model learns: “given this context, this kind of response tends to follow.” It learns surface patterns.

If you train on data with belief states, you can teach the model something more specific: given this belief state, this response is causally expected. The model can learn that withdraw + protect_self follows from high belief_hostility + low belief_resolution, not just from certain kinds of preceding turns.

This is the difference between a model that responds plausibly and a model that responds coherently.

A plausible model might generate reassurance in a high-hostility context because reassurance follows from certain surface patterns. A coherent model won’t — because it knows the internal state that makes reassurance causally wrong here.


Belief state as a training signal

The belief fields open up several concrete training approaches:

Auxiliary loss on belief prediction Train a dialogue model with an auxiliary head that predicts the speaker’s belief state given the conversation context. This forces the encoder to represent psychological state, not just linguistic patterns.

Belief-conditioned generation Fine-tune with the belief state prepended as a structured prompt. The model learns to generate text consistent with a specified psychological context — useful for controllable dialogue generation.

Belief consistency as a reward signal In RLHF, use belief_consistency as a reward component: the correlation between belief state and communication act. Penalize responses that contradict the stated belief context.

Belief trajectory modeling Treat each conversation as a time series of belief vectors. Train sequence models to predict how beliefs will evolve, then use those predictions to guide response generation.


What the data looks like in practice

import pandas as pd

df = pd.read_parquet(
    'hf://datasets/StrataSynth/stratasynth-belief-dynamics/data/train-00000-of-00001.parquet'
)

# Filter for high-hostility, low-resolution moments
pressure_turns = df[
    (df['belief_hostility'] > 0.7) &
    (df['belief_resolution'] < 0.3)
]

print(f'{len(pressure_turns)} turns under maximum psychological pressure')
print(pressure_turns[['archetype', 'intent', 'goal', 'communication_act', 'text']].head(10))
47 turns under maximum psychological pressure

archetype              intent      goal             communication_act   text
estranged_daughter     observe     assert_control   deflection          The leak's fine. It's just a drip. I'll handle it.
estranged_daughter     deflect     protect_self     reassurance         I mean, technically I said I'd be there at 2...
estranged_daughter     reveal      protect_self     deflection          I'll let you know if I see anything...

47 turns where the speaker has nearly given up on resolution and perceives high hostility. Each communication act reflects that state — not randomly sampled, but causally produced.


Limitations

The four belief dimensions are a simplification. Real psychological state has more dimensions, and the update rules are approximations. The model doesn’t account for relationship history beyond the current conversation, cultural differences in belief expression, or non-verbal cues.

The goal isn’t to perfectly model human psychology — it’s to generate training data that’s internally consistent at the cognitive level. Whether that consistency transfers to better downstream models is an empirical question we’re actively measuring.


The datasets

The belief_* fields are available in all four StrataSynth HuggingFace datasets:

The belief-dynamics dataset has the most volatile belief trajectories (by design — scenarios chosen for maximum psychological pressure). The life-transitions dataset has the highest belief_resolution averages — these are stories of people building something, not tearing it down.


From belief modeling to interaction

Belief state isn’t just a dataset feature — it drives behavior in real time.

The demo at stratasynth.com/demo/try runs this pipeline live: beliefs update before each response, intent is selected from the current belief state, and the LLM renders text constrained by that decision. Create a person with high existing tension and push them — you’ll see trust drop, hostility rise, and behavior shift turn by turn.

stratasynth.com/demo/try

This isn’t just about generating dialogue. It’s about simulating how people change.


StrataSynth is a synthetic data platform for conversational AI. stratasynth.com · HuggingFace · pip install stratasynth-client