Language features
Low-level lexical & word-level features
Per-word lexical/psycholinguistic annotation is a mature, mostly CPU-friendly pipeline problem rather than a deep-learning frontier. The backbone is a fast tokenizer/POS/NER/dependency engine (spaCy) that segments the transcript and tags each word, followed by table lookups against well-established norm databases (SUBTLEX/wordfreq for frequency; Brysbaert for concreteness; Kuperman for AoA; Warriner/NRC-VAD for valence/arousal/dominance; NRC-EmoLex/LIWC for affect categories). The one genuinely model-dependent feature is word-level surprisal/entropy, computed from an incremental LLM (GPT-2 through larger autoregressive models) via the minicons or surprisal packages. For time-alignment, all of these are per-token features that inherit timestamps from forced alignment of the transcript to the audio (e.g. WhisperX/Montreal Forced Aligner) — that alignment step is upstream and out of scope here but is the mechanism that turns per-word features into a per-second movie timeline. The main design decisions for a small lab are: (1) which norm databases to license/merge, (2) how to handle out-of-vocabulary words and lemmatization for lookups, and (3) which LLM to use for surprisal given the size/fit tradeoff.
| Tool | Measures | Per-timepoint output | Modality | Granularity | Local | Rating | Rec |
|---|---|---|---|---|---|---|---|
| spaCy (3.7+, en_core_web_trf / en_core_web_lg) | Tokenization, lemmatization, part-of-speech (coarse UPOS + fine PTB tags), morphological features, dependency parse, named entities, and the anchor for all downstream per-word lookups | Per token: lemma, UPOS tag (one of ~17), fine-grained POS tag, dependency relation+head, is_stop/is_punct flags, NER label (PERSON/ORG/GPE/DATE/etc.) with BILUO span; person/pronoun reference derivable from PronType + PERSON entities | transcript | per-word (per token) | yes-cpu | best-in-class | include |
| wordfreq (Speer 2022, Python) / SUBTLEX-US norms | Word frequency / lexical familiarity, the single most predictive low-level lexical variable for reading time and neural response | Per word: Zipf frequency (log10 per-billion scale, ~1-7), raw frequency, derivable log-frequency; SUBTLEX-US adds Lg10WF, contextual diversity (Lg10CD), %known | transcript | per-word | yes-cpu | best-in-class | include |
| Brysbaert Concreteness Norms (40,000 words) | Concreteness (and serves as proxy for imageability) of each word’s referent | Per word: concreteness mean (1=abstract to 5=concrete), SD, percent-known; covers 37,058 English lemmas + 2,896 two-word expressions | transcript | per-word | yes-cpu | best-in-class | include |
| Kuperman Age-of-Acquisition Norms (30,000 words) | Estimated age at which a word is typically learned (developmental/lexical accessibility) | Per word: AoA rating in years (mean), SD, percent-known; ~30,121 English words | transcript | per-word | yes-cpu | best-in-class | include |
| Warriner VAD Norms (13,915 lemmas) + NRC-VAD lexicon (20,000 words) | Continuous affective dimensions of word meaning: valence (pleasantness), arousal (intensity), dominance (control) | Per word: valence, arousal, dominance each on ~1-9 scale (Warriner, with SDs) or 0-1 (NRC-VAD); supersedes the small 1,034-word ANEW set | transcript | per-word | yes-cpu | best-in-class | include |
| NRC Emotion Lexicon (EmoLex, ~14,000 words) | Discrete (Plutchik) emotion category membership per word — categorical affect beyond the VAD continuum | Per word: 8 binary emotion associations (anger, anticipation, disgust, fear, joy, sadness, surprise, trust) + positive/negative sentiment flags; can be summed into per-second emotion-density signals | transcript | per-word | yes-cpu | strong | include |
| LIWC-22 | Dictionary-based psychological and linguistic category membership — pronouns/person reference, affect, cognitive/social process words, function-word style | Per word (and aggregable per window): membership in up to 118 categories incl. 1st/2nd/3rd-person pronouns, positive/negative emotion, cognitive-process, social, certainty/tentativeness; summary scores (Analytic, Clout, Authentic, Tone) at the segment level | transcript | per-word (category hits) / per-segment (summary scores) | yes-cpu | strong | alternative |
| minicons (IncrementalLMScorer) — GPT-2 / Pythia / GPT-Neo surprisal | Word-level surprisal and entropy: how unexpected each word is given its left context, the core information-theoretic predictor of reading time and N400/neural response | Per token: surprisal = -log2 P(word | left context) in bits; next-word entropy; per-word log-probability; aggregates subword pieces to whole-word surprisal | transcript | per-word | yes-gpu | best-in-class | include |
| surprisal (aalok-sathe, Python) | Same as minicons — word/token surprisal — via a unified interface across neural, n-gram (KenLM), and black-box API models | Per token/word: surprisal in bits, log-probabilities; convenient .word_level aggregation and built-in plotting; can target OpenAI/Petals/HF backends | transcript | per-word | yes-gpu | strong | alternative |
| GLiNER (urchade/gliner, 2024) | Zero-shot / open-type named entity recognition when you need entity types beyond spaCy’s fixed ontology (e.g. character names, fictional places, custom referents in narratives) | Per span: entity label (user-defined types) + confidence score; maps to per-word entity flags (is_named_entity, entity_type, person-reference) | transcript | per-word (span-derived) | yes-gpu | strong | include-if-resources |
| NLTK | Tokenization, POS tagging, stemming, basic lexical utilities (legacy) | Per token: Penn-Treebank POS tag, stem/lemma (WordNet), basic chunk tags | transcript | per-word | yes-cpu | legacy/superseded | drop |
Recommended (best-in-class): spaCy (en_core_web_trf/lg) as the tokenizer/POS/NER/dependency backbone; wordfreq + SUBTLEX-US for frequency; Brysbaert concreteness + Kuperman AoA + Warriner/NRC-VAD norm joins for psycholinguistic per-word features; NRC EmoLex for discrete emotion channels; minicons (or surprisal) with GPT-2-medium/Pythia for word surprisal & entropy
Likely redundant:
- NLTK — superseded by spaCy for tokenization/POS/NER (keep only for WordNet synset access)
- surprisal package — direct overlap with minicons; pick one surprisal library
- ANEW (1,034 words) — superseded by Warriner VAD (13,915) and NRC-VAD (20,000)
- MRC Psycholinguistic Database — legacy imageability/concreteness, superseded by Brysbaert and Glasgow norms
- LIWC-22 affect categories — most per-word affect content is reproducible with free NRC EmoLex + Warriner VAD + spaCy POS; LIWC is justified mainly for its validated pronoun/person-reference and function-word category scheme
- Glasgow Norms — overlaps Brysbaert/Kuperman/Warriner on the same dimensions at smaller coverage; useful only as a single-source merge or for its imageability/familiarity/semantic-size/gender scales
- VADER — sentence/social-media-tuned sentiment, redundant with Warriner+NRC for per-word valence
Open questions:
- Time-alignment is upstream: per-word features are only as good as the forced alignment (WhisperX / Montreal Forced Aligner) that assigns each token a start/end timestamp — confirm which aligner the pipeline uses before binning to per-second.
- Lemmatization vs surface-form lookup: norm databases key on lemmas/base forms while surprisal and frequency can be surface-form; need a consistent OOV and morphology strategy (e.g. fall back lemma->surface->subword).
- Whether to merge Warriner and NRC-VAD (and with what priority) for valence/arousal/dominance, vs picking one to avoid double-counting correlated features.
- Choice of surprisal LM: smaller GPT-2/Pythia models often fit human reading-time/neural data better than the largest LLMs — decide whether the goal is best psycholinguistic fit (small model) or best raw language modeling (large model).
- Coverage/OOV handling for proper nouns and disfluencies in spoken-narrative transcripts, which are common in movies/audio stories but absent from norm databases.
- LLM-generated norm estimates (2024-2026 work) could fill OOV gaps for concreteness/valence/AoA, but require validation/fine-tuning against the human tables before use.
References
- spaCy (3.7+, en_core_web_trf / en_core_web_lg) — spacy.io; github.com/explosion/spaCy
- wordfreq (Speer 2022, Python) / SUBTLEX-US norms — github.com/rspeer/wordfreq; Brysbaert & New 2009 SUBTLEX-US
- Brysbaert Concreteness Norms (40,000 words) — Brysbaert, Warriner & Kuperman 2014, Behavior Research Methods
- Kuperman Age-of-Acquisition Norms (30,000 words) — Kuperman, Stadthagen-Gonzalez & Brysbaert 2012, Behavior Research Methods
- Warriner VAD Norms (13,915 lemmas) + NRC-VAD lexicon (20,000 words) — Warriner, Kuperman & Brysbaert 2013; Mohammad 2018 NRC-VAD
- NRC Emotion Lexicon (EmoLex, ~14,000 words) — Mohammad & Turney 2013, NRC EmoLex
- LIWC-22 — Boyd, Ashokkumar, Seraj & Pennebaker 2022, LIWC-22
- minicons (IncrementalLMScorer) — GPT-2 / Pythia / GPT-Neo surprisal — Misra 2022 (arXiv:2203.13112); github.com/kanishkamisra/minicons
- surprisal (aalok-sathe, Python) — github.com/aalok-sathe/surprisal
- GLiNER (urchade/gliner, 2024) — Zaratiana et al. 2024 (arXiv:2311.08526); github.com/urchade/GLiNER
- NLTK — nltk.org
Syntactic & grammatical structure
Sentence/utterance-level syntactic annotation for movie/audio narratives rests on a mature stack: a few NLP pipelines (spaCy, Stanza, Trankit) emit dependency parses, POS/morphology (tense/aspect/mood as UD feats), and lemmas per token; dedicated constituency parsers (benepar, supar, Stanza/CoreNLP conparse) yield phrase-structure trees from which complexity metrics (tree depth, Yngve/Frazier scores, L2SCA clause/T-unit ratios) are derived; coreference (Maverick, fastcoref, Stanza-coref) links mentions across the timeline; and lightweight libraries (textstat, readability) plus DA classifiers handle readability and dialogue acts. All core tools are open-source and CPU-runnable; transformer variants want a modest GPU. The main workflow is: parse transcript utterances time-aligned to the movie/audio timeline (via forced alignment elsewhere), then compute per-utterance/per-second syntactic features. Most complexity, readability, and Yngve/Frazier metrics are derived post-hoc from parser output rather than being separate models.
| Tool | Measures | Per-timepoint output | Modality | Granularity | Local | Rating | Rec |
|---|---|---|---|---|---|---|---|
| spaCy 3.8 (en_core_web_trf / en_core_web_lg) | Full token-level syntactic pipeline: dependency parse, POS/tag, morphology, lemma, sentence segmentation, noun chunks | Per-token: dependency label (UD/CLEAR), head index, UPOS+fine POS tag, morphological feats (Tense, Aspect, Mood, Number, Person, VerbForm), lemma; per-span: noun chunks; sentence boundaries. trf model LAS ~87.9, UAS ~89.6 on OntoNotes (CLEAR scheme). | transcript | per-utterance (parses sentences; tokens map to timeline) | yes-cpu | best-in-class | include |
| Stanza 1.10 (Stanford NLP, UD pipeline) | Neural UD pipeline: tokenization, MWT, POS/UPOS+XPOS, lemma, morphological features, biaffine dependency parse; plus optional constituency parser and neural coreference | Per-token: UD dependency relation + head, UPOS/XPOS, UFeats (Tense/Aspect/Mood/Voice/VerbForm/Person/Number etc.), lemma; constituency tree (PTB-style); coref clusters. True Universal Dependencies labels (cleaner for cross-tool complexity metrics than spaCy’s CLEAR). | transcript | per-utterance | yes-gpu | best-in-class | include |
| benepar (Berkeley Neural Parser, self-attentive-parser) | Constituency (phrase-structure) parsing with a self-attentive encoder; basis for tree-depth, Yngve, Frazier, and clause-based complexity metrics | Per-sentence PTB-style constituency tree (NP/VP/S/SBAR labels, nesting depth) integrable as a spaCy component; ~95.4-96.3 F1 on revised WSJ. From the tree you derive: max/mean tree depth, # clauses, # SBAR, phrase-type counts, Yngve/Frazier scores. | transcript | per-utterance | yes-gpu | best-in-class | include |
| supar (yzhangcs/parser) | State-of-the-art biaffine/CRF dependency and constituency parsing (and semantic dependency); research-grade trees with explicit scoring algorithms | Per-token dependency arcs+labels (Biaffine, CRF, CRF2o); per-sentence constituency CRF trees; semantic dependency graphs. Exposes MST/Eisner/CKY/TreeCRF; useful when you want labeled tree probabilities/marginals for complexity weighting. | transcript | per-utterance | yes-gpu | strong | alternative |
| Trankit 1.x | Light multilingual transformer (XLM-R + adapters) UD pipeline: tokenization, sentence seg, POS, morphology, lemma, dependency parse | Per-token UD dependency relation + head, UPOS/XPOS, morphological UFeats, lemma; sentence boundaries. Reported +5 LAS / +4 sent-seg over Stanza on UD v2.5 in many languages; strongest sentence segmentation, which matters for utterance alignment. | transcript | per-utterance | yes-gpu | strong | alternative |
| Maverick (coreference resolution) | Coreference resolution: links mentions (pronouns, names, NPs) into entity clusters across the narrative for tracking referents over the timeline | Mention spans grouped into coreference clusters with cluster IDs; resolves who/what each pronoun refers to. SOTA on CoNLL-2012 (OntoNotes) with ~500M params, ~170x faster inference and far less memory than 13B generative coref models. | transcript | per-utterance (clusters span document/scene) | yes-gpu | best-in-class | include |
| fastcoref / F-coref (LingMess) | Fast, easy English coreference resolution; LingMess (accurate) and F-coref (fast) modes | Coreference clusters of mention spans per document. LingMess near-SOTA accuracy; F-coref ~25s for 2.8K OntoNotes docs on a V100 (vs 6-12 min for older systems) with modest accuracy drop. | transcript | per-utterance (document-level clusters) | yes-gpu | strong | alternative |
| L2 Syntactic Complexity Analyzer (L2SCA) + Tregex | Syntactic complexity indices derived from constituency parses: clause, T-unit, coordination, and phrasal complexity | 14 indices per text incl. mean length of clause/T-unit/sentence, clauses per T-unit, dependent clauses per clause, complex-nominals per clause, coordinate phrases per T-unit, T-units per sentence. Standard, validated set for syntactic complexity scoring. | transcript | per-utterance / per-window (aggregate over span) | yes-cpu | strong | include |
| textstat (Python) | Readability and surface complexity indices as a coarse proxy for grammatical/processing difficulty | Per-text scalars: Flesch Reading Ease, Flesch-Kincaid Grade, Gunning Fog, SMOG, Coleman-Liau, ARI, Dale-Chall, plus syllable/word/sentence counts and lexicon counts. Cheap per-second feature when computed over sliding transcript windows. | transcript | per-window / per-utterance | yes-cpu | usable | include-if-resources |
| Dialogue act classifier (DialogTag / DistilBERT-SwDA / silicone-finetuned) | Dialogue act / speech act of each utterance (function in conversation), relevant for dialogue-heavy film/audio | Per-utterance categorical DA label (SwDA 42-tag or DAMSL set: statement, yes-no-question, wh-question, backchannel, agreement, opinion, etc.) with class probabilities. Maps directly onto time-aligned dialogue turns. | transcript | per-utterance | yes-cpu | usable | include-if-resources |
Recommended (best-in-class): spaCy 3.8 (en_core_web_trf) for dependency/POS/morphology; Stanza 1.10 for UD-scheme parses + built-in constituency + coref in one tool; benepar for constituency trees feeding complexity metrics; Maverick for coreference resolution; L2SCA (+ Yngve/Frazier from trees) as the derived syntactic-complexity layer
Likely redundant:
- Trankit — superseded by spaCy/Stanza for English; keep only for multilingual or superior sentence-segmentation needs
- supar — overlaps benepar/Stanza; use only when you need joint dep+constituency or CRF marginals
- fastcoref/F-coref — superseded by Maverick on accuracy+efficiency; keep for high-throughput batch coref
- textstat — overlaps py-readability-metrics; surface-only, redundant with L2SCA’s deeper syntactic complexity
- Stanford CoreNLP constituency/coref — largely superseded by Stanza’s neural pipeline and Maverick
References
- spaCy 3.8 (en_core_web_trf / en_core_web_lg) — spacy.io; github.com/explosion/spaCy; en_core_web_trf
- Stanza 1.10 (Stanford NLP, UD pipeline) — stanfordnlp.github.io/stanza; Qi et al. 2020
- benepar (Berkeley Neural Parser, self-attentive-parser) — github.com/nikitakit/self-attentive-parser; Kitaev & Klein 2018/2019
- supar (yzhangcs/parser) — github.com/yzhangcs/parser; Zhang et al. ACL/IJCAI 2020
- Trankit 1.x — github.com/nlp-uoregon/trankit; Nguyen et al. EACL 2021
- Maverick (coreference resolution) — github.com/SapienzaNLP/maverick-coref; Martinelli et al. ACL 2024; arXiv:2407.21489
- fastcoref / F-coref (LingMess) — github.com/shon-otmazgin/fastcoref; Otmazgin et al. AACL 2022; arXiv:2209.04280
- L2 Syntactic Complexity Analyzer (L2SCA) + Tregex — Lu 2010; personal.psu.edu/xxl13 (L2SCA); en.wikipedia.org/wiki/L2_Syntactic_Complexity_Analyzer
- textstat (Python) — github.com/textstat/textstat
- Dialogue act classifier (DialogTag / DistilBERT-SwDA / silicone-finetuned) — github.com/bhavitvyas/DialogTag; SwDA/SILICONE benchmark; Raheja & Tetreault N19-1373
High-level semantics, discourse & narrative
This subclass covers meaning at the sentence/passage/scene level: dense semantic embeddings, topic structure, semantic coherence/similarity over time, discourse relations, and narrative structure (arcs, turning points, summaries, LLM-derived tags). For a movie/audio-story timeline the practical pipeline is: align a transcript (with word/utterance timestamps from ASR), window it into rolling segments (e.g. per-sentence, per-utterance, or sliding N-second windows), then emit per-segment features. The dominant, most flexible feature source in 2024-2026 is dense passage embeddings from instruction-tuned encoders (Qwen3-Embedding, E5/multilingual-e5, GTE, BGE, plus API options like OpenAI/Voyage/Gemini), from which you derive coherence (cosine similarity between adjacent windows), drift, and topic clusters. BERTopic gives interpretable topics-over-time. Instruction-tuned LLMs (Llama-3, Qwen2.5, GPT-4o-class) used as zero/few-shot feature extractors now cover the harder, more abstract signals — turning points, discourse relations, event/scene segmentation, narrative tags, and structured summaries — that no specialized supervised model does robustly. Note: in this neuroimaging context, the LAST-token/last-layer hidden states of autoregressive LLMs (GPT-2 through Llama-3) are themselves a primary per-word/per-TR feature and the current standard for naturalistic language-comprehension encoding models.
| Tool | Measures | Per-timepoint output | Modality | Granularity | Local | Rating | Rec |
|---|---|---|---|---|---|---|---|
| Qwen3-Embedding (0.6B / 4B / 8B) | Instruction-tuned dense semantic embedding of a sentence/passage; supports task-specific instructions prepended to the text. Best open-weight model on MTEB-multilingual as of mid-2025 (8B = 70.58). | Per-window L2-normalized embedding vector (1024-dim for 0.6B, up to 4096-dim for 8B; Matryoshka-truncatable). Derived per-timepoint signals: cosine similarity to adjacent window (local coherence), cosine to a running mean (semantic drift/novelty), distance to topic/scene centroids, per-window similarity to a fixed semantic probe (e.g. ‘fear’, ‘social interaction’). | transcript | per-utterance / per-sentence / per-sliding-window (set by how transcript is segmented) | yes-gpu | best-in-class | include |
| multilingual-e5-large-instruct / e5-mistral-7b-instruct | General-purpose instruction-tuned passage embeddings; strong, very widely used, well-documented baseline. e5-mistral is a 7B decoder-as-embedder; multilingual-e5-large is a compact 560M encoder. | Per-window embedding (1024-dim for multilingual-e5-large; 4096-dim for e5-mistral). Same derived signals as Qwen3 (adjacent-window cosine coherence, drift, probe similarity, cluster assignment). | transcript | per-utterance / per-sentence / per-sliding-window | yes-gpu | strong | alternative |
| GTE (gte-Qwen2-7B-instruct / gte-large-en-v1.5) and BGE (bge-m3, bge-large-en-v1.5) | Two additional top-tier open embedding families. gte-Qwen2-7B-instruct is a high-MTEB instruction embedder; bge-m3 is notable for multi-functionality (dense + sparse + ColBERT multi-vector) and 8k context, useful for embedding longer passages/scenes. | Per-window dense embedding (1024-dim bge-large/gte-large; up to 3584/4096 for 7B variants). bge-m3 additionally yields sparse lexical weights and token-level multi-vectors. Derived: coherence, drift, lexical-overlap-vs-semantic divergence. | transcript | per-utterance / per-sentence / per-sliding-window / per-scene | yes-gpu | strong | alternative |
| OpenAI text-embedding-3-large / Voyage-3 / Gemini Embedding (API) | Commercial managed embeddings. Convenient, no local GPU; Gemini Embedding and Voyage-3 currently top several leaderboards. text-embedding-3-large is widely used but not updated since Jan 2024 and now matched/beaten by open models. | Per-window embedding (3072-dim openai-3-large, dimension-reducible; 1024/2048 Voyage; ~3072 Gemini). Same derived coherence/drift/probe signals. | transcript | per-utterance / per-sentence / per-sliding-window | api-only | usable | alternative |
| BERTopic (with dynamic / topics-over-time) | Neural topic modeling: clusters embeddings (UMAP+HDBSCAN) and labels clusters with class-based TF-IDF; topics_over_time recomputes topic representations per time bin without refitting, giving an interpretable topic timeline. | Per-window: hard topic assignment (topic id) and soft topic-probability distribution; per-time-bin: topic prevalence/frequency series and time-varying top keywords per topic. Yields a categorical topic label plus a continuous topic-activation vector per timepoint. | transcript | per-window (assignment) + per-time-bin (prevalence series) | yes-cpu | best-in-class | include |
| Semantic coherence / drift over time (sliding-window cosine pipeline) | Derived analysis layer (not a model): from any sentence-embedding stream, compute local semantic coherence, topical drift, novelty, and recurrence over the timeline. Mirrors classic latent-semantic coherence measures used in psycholinguistics/clinical NLP, modernized with transformer embeddings. | Per-timepoint scalars: cosine(window_t, window_{t-1}) = local coherence; cosine(window_t, running-mean) = drift/integration; 1-max-similarity-to-past = novelty; mean similarity within a lag window = coherence-at-lag; segmentation boundary score (similarity trough) for event/scene cuts. | transcript | per-window / per-second (after resampling to the stimulus timeline) | yes-cpu | best-in-class | include |
| Autoregressive LLM hidden-state extractor (GPT-2, Llama-3-8B, Qwen2.5-7B) for encoding models | Contextualized per-word/per-token representations from a causal LM as the stimulus is read word-by-word. In neuroimaging this is the standard high-level-semantic feature for naturalistic language comprehension; layer activations predict comprehension and brain responses. | Per-token hidden-state vector at a chosen layer (e.g. 768-dim GPT-2, 4096-dim Llama-3-8B); next-word surprisal/entropy (-log p); per-token contextual embedding. Aggregated to per-word then averaged within each TR/second for the stimulus timeline. | transcript | per-word (timestamp-aligned) then resampled per-second / per-TR | yes-gpu | best-in-class | include |
| Instruction-tuned LLM as zero/few-shot feature extractor (Llama-3.1-8B-Instruct / Qwen2.5-7B-Instruct local; GPT-4o / Claude API) | Prompt an instruction-tuned LLM over a transcript window to emit structured high-level semantic/narrative tags that no specialized supervised model covers robustly: scene/topic labels, narrative-stage classification, turning-point likelihood, discourse-relation between adjacent segments, character/event mentions, abstractness, and structured summaries. | Per-window structured tags (JSON): categorical narrative stage (setup/conflict/climax/resolution), turning-point flag + type, discourse relation label (cause/contrast/elaboration), valence/tension Likert score, topic/theme label, entity/event list, one-line summary. Also ‘interpretable embeddings’ = vector of yes/no answers to a fixed question battery (Benara/Gao 2024). | transcript | per-window / per-scene / per-utterance | yes-gpu | strong | include |
| DMRST / neural RST discourse parser | Supervised rhetorical-structure-theory parsing: segments text into elementary discourse units (EDUs) and builds a labeled discourse tree (nuclearity + relation labels) within a passage. The structured, theory-grounded alternative to asking an LLM for discourse relations. | Per-passage: EDU segmentation boundaries; discourse-tree edges with relation labels (Elaboration, Contrast, Cause, Background, ~18-30 relation classes) and nuclearity (nucleus/satellite). Per-timepoint derivable: discourse-boundary indicator, local tree depth, relation-type at each boundary. | transcript | per-EDU / per-sentence (within passage windows) | yes-gpu | usable | include-if-resources |
| Supervised narrative turning-point / story-arc model (TRIPOD / Papalampidi-style; sentiment-arc tooling) | Identifies screenplay/story turning points (Opportunity, Change of Plans, Point of No Return, Major Setback, Climax) and/or computes the emotional/sentiment arc (Reagan ‘six story shapes’) across the narrative. | Per-scene/per-segment: turning-point probability for each of 5 TP types; normalized story position; continuous sentiment/emotional-arc value (smoothed valence trajectory); arc-shape class. Yields a tension/arc scalar per timepoint plus sparse turning-point markers. | transcript | per-scene / per-segment (smoothed to a continuous arc) | yes-gpu | usable | alternative |
Recommended (best-in-class): Qwen3-Embedding-0.6B (lab default open encoder; scale to 4B/8B if GPU allows) as the backbone for all semantic features; Sliding-window cosine coherence/drift pipeline on top of those embeddings to produce per-second time-resolved scalars; BERTopic with topics-over-time for interpretable topic timelines (reuses the same embeddings); Autoregressive LLM hidden-state + surprisal extractor (GPT-2 / Llama-3.1-8B) for word-level / per-TR comprehension features (the neuroimaging standard); Instruction-tuned LLM (Llama-3.1-8B-Instruct / Qwen2.5-7B-Instruct local, or GPT-4o/Claude API) as a zero/few-shot extractor for narrative stage, turning points, discourse relations, and structured tags
Likely redundant:
- multilingual-e5, GTE, BGE — pick ONE primary open encoder; the others are interchangeable alternatives to Qwen3-Embedding, not separate features
- OpenAI/Voyage/Gemini embedding APIs — superseded for most needs by open encoders (Qwen3/E5); use only if a leaderboard-topping API embedding is required and off-site transcript transfer is acceptable
- Supervised RST parser (DMRST) and supervised turning-point models — largely subsumed by the instruction-tuned LLM extractor, which is more flexible on spoken transcripts; keep the supervised ones only when standardized, reproducible discourse labels are specifically required
- Standalone raw-embedding clustering — superseded by BERTopic, which wraps clustering with labeling and dynamic topics-over-time
References
- Qwen3-Embedding (0.6B / 4B / 8B) — github.com/QwenLM/Qwen3-Embedding; huggingface.co/Qwen/Qwen3-Embedding-0.6B; MTEB/MMTEB
- multilingual-e5-large-instruct / e5-mistral-7b-instruct — huggingface.co/intfloat/multilingual-e5-large-instruct; arXiv:2212.03533, 2401.00368
- GTE (gte-Qwen2-7B-instruct / gte-large-en-v1.5) and BGE (bge-m3, bge-large-en-v1.5) — huggingface.co/Alibaba-NLP/gte-Qwen2-7B-instruct; huggingface.co/BAAI/bge-m3
- OpenAI text-embedding-3-large / Voyage-3 / Gemini Embedding (API) — platform.openai.com/docs/guides/embeddings; docs.voyageai.com; ai.google.dev embeddings
- BERTopic (with dynamic / topics-over-time) — github.com/MaartenGr/BERTopic; arXiv:2203.05794; maartengr.github.io/BERTopic/getting_started/topicsovertime
- Semantic coherence / drift over time (sliding-window cosine pipeline) — Standard sliding-window cosine; cf. coherence/tangentiality NLP literature; TextTiling for segmentation
- Autoregressive LLM hidden-state extractor (GPT-2, Llama-3-8B, Qwen2.5-7B) for encoding models — Caucheteux & King 2022; Goldstein et al. 2022; ‘Narratives’ fMRI dataset (Nastase et al.); biorxiv 2021.04.20.440622
- Instruction-tuned LLM as zero/few-shot feature extractor (Llama-3.1-8B-Instruct / Qwen2.5-7B-Instruct local; GPT-4o / Claude API) — Benara/Gao ‘QA-Emb / Crafting Interpretable Embeddings by Asking LLMs Questions’ arXiv:2405.16714; Papalampidi turning-point work; Story Ribbons arXiv:2508.06772
- DMRST / neural RST discourse parser — Liu et al. DMRST (arXiv:2110.04518 / 2012.01704); eRST (Computational Linguistics 2025); GUM/RST-DT corpora
- Supervised narrative turning-point / story-arc model (TRIPOD / Papalampidi-style; sentiment-arc tooling) — Papalampidi et al. TRIPOD ‘Movie Plot Analysis via Turning Points’; Reagan et al. ‘emotional arcs of stories’; arXiv:2511.11857; culturalanalytics.org Beyond Plot