← all projects
Case study · NLP · Temporal Analysis

TRACE
detecting narrative shifts without defining phases first.

Can semantic embeddings automatically discover how an organization's public narrative evolved over time — without hand-labelling the phases? Case study: OpenAI 2015–2026. 66 events, two structurally independent embedding backends, one question.

Live demo ↗ Repository ↗
66
EVENTS ANALYSED
2
BACKENDS CROSS-VALIDATED
2/5
TURNING POINTS AGREED
11 days
CROSS-BACKEND WINDOW

01 · The research question

Most organizational histories are written after the fact, with phases defined by whoever is telling the story. TRACE asks something different: can an algorithm detect where the phases are, without being told?

The approach: take a chronological set of 66 public OpenAI events — research releases, product launches, company structure changes, safety work, infrastructure — embed them semantically, and look for where the public narrative shifts most sharply. The algorithm detects candidate turning points first. We interpret and label them afterward.

What TRACE does not claim: it does not prove internal strategy or intent. A detected turning point means the public narrative shifted significantly according to the chosen data and method — not that "the organization officially changed strategy on this date."

02 · How the pipeline runs

Seven stages, each independently reproducible. Re-running any script end-to-end regenerates every number and figure from the raw CSV — nothing is hand-edited output. The embedding backend is pluggable: swap SBERT for GloVe and the rest of the pipeline is unchanged.

A · Preprocessingclean · sort · build embedding text · TF-IDF keywords
B · Embeddingspluggable · SBERT (recommended) · GloVe (cross-check)
ROLLING COSINE SIMILARITY · WINDOW = 5 EVENTS EACH SIDE
C · Similarity analysisshift score · 2D PCA map · temporal heatmap
D · ClusteringK-Means · k by silhouette · JS divergence for transitions
EVOLUTION SCORE = 0.5 · SHIFT + 0.3 · CLUSTER-JS + 0.2 · NOVELTY
E · Turning pointstop 5 extracted · cross-validated across backends
F · Phase segmentationcut at turning points · TF-IDF keyword labelling · entropy check
G · DashboardStreamlit · 14 interactive sections · all outputs precomputed

03 · Cross-validation — what held up

The most important test: run the full pipeline with two structurally different embedding methods (GloVe static word vectors vs SBERT transformer embeddings) and see where they agree. Agreement across backends is much stronger evidence than either run alone.

November 2023 — strongest detected boundary

GloVe flags the Sam Altman firing (Nov 17). SBERT independently flags DevDay (Nov 6). Different anchor events, same 11-day window, two independent methods. This is the most robust finding TRACE produced — it required no post-hoc alignment.

Governance events form their own cluster

In both PCA projections, Company-type events (funding, restructuring, leadership) sit visibly apart from research and product events — regardless of embedding method. Structural changes are semantically distinct in embedding space, not just categorically different.

The 2024–2026 "mega-phase" is a method limit, not a flat era

41% of events land in one final phase. Internal entropy check: GloVe shows 4/4 clusters present (entropy 0.84); SBERT shows 4/5 clusters (entropy 0.91). High entropy means real sub-structure exists — the method ran out of turning-point budget, not signal. Reported as a finding, not hidden.

0.91
SBERT MEGA-PHASE ENTROPY
11 days
BOUNDARY AGREEMENT WINDOW
2/5
EXACT TURNING POINT AGREEMENT

04 · Data and technical design

The dataset is 66 hand-curated events, 2015–2026. Every event carries a direct source URL — 60 of 66 link to the relevant openai.com post; the remaining 6 are labelled "secondary source" with a reason. No event is unverified or approximate.

The evolution score formula is documented as a heuristic, not a validated metric: 0.5 · semantic_shift + 0.3 · cluster_transition + 0.2 · novelty. Weights are a starting guess and treated as such throughout — the README says so explicitly.

Cluster and phase keywords are TF-IDF-based with corpus-wide terms and injected category labels excluded, so labels reflect actual semantic content rather than structural noise. Switching to this approach changed real output — Phase 0 went from "Product-leaning" to "reinforcement learning", an accurate description of OpenAI's earliest public era.

Python SBERT (all-MiniLM-L6-v2) GloVe scikit-learn K-Means PCA SciPy Plotly Streamlit

05 · Lessons & where it goes next

Cross-backend agreement is the real signal.

A finding that holds across GloVe and SBERT — two methods with no shared weights or architecture — is much more trustworthy than a result from either alone. The November 2023 boundary is TRACE's strongest claim precisely because both backends found it independently.

Investigate the large phase, don't accept it.

A phase covering 41% of the dataset is a flag, not a finding. Computing its internal entropy directly — rather than accepting "OpenAI had a long stable era" — turned a potential confound into a concrete, falsifiable finding about the method's turning-point budget.

Label precision changes real output.

Switching cluster labels from dominant source type to TF-IDF keywords isn't cosmetic — it changed what Phase 0 said. Getting the labelling right is as important as getting the clustering right.

Next: extend to a second organization (Anthropic or DeepMind) to test whether November 2023 is a genuine industry-wide inflection point or specific to OpenAI's public narrative.