A lightweight, multi-modal review agent that extracts prosodic affect signals from mid-layer speech representations (Wav2Vec2-base Layer 6) to flag teleprompter and scripted-reading anomalies in automated video interviews for human review — never an automated rejection verdict.
Teams running AI-powered asynchronous interview platforms (such as micro1-style hiring pipelines) that automatically screen candidate technical responses at scale.
Current interview integrity checks rely almost exclusively on video signals (e.g., eye-gaze tracking, head posture analysis) or basic text plagiarism keyword matching.
- The Teleprompter Blindspot: A candidate can place a pre-written or AI-generated script on a secondary monitor right behind the webcam. They maintain natural camera eye contact, completely bypassing video gaze detectors while reading verbatim answers.
- Why Video Cannot Solve This: Eye-tracking cannot distinguish between looking at a camera lens versus reading bullet points positioned directly adjacent to the camera.
Human speech is fundamentally prosodic. When a candidate formulates a spontaneous answer, speech contains natural fundamental frequency (Wav2Vec2-base) encode these temporal prosodic signatures in their mid-layer representations, capturing scripted delivery that video monitoring cannot see.
The system does not treat anomaly detection as a naive black-box threshold. Instead, it coordinates three sensory modules through a multi-modal reasoning agent governed by a strict human-review safety gate:
[ Audio Waveform (.wav) + Transcript ]
│
▼
┌─────────────────────────────────────────────────────────────┐
│ MULTI-MODAL REASONING AGENT │
│ (VoiceAffectAnomalyAgent) │
│ │
│ [Acoustic Module] [Mid-Layer Probe] [Text Module] │
│ F0 std, Pause %, WPM Wav2Vec2-base L6 Hesitations │
│ │
│ Decision Logic & Priority Gating: │
│ 1. Probe Scripted Flag: flatness_score >= 0.55 │
│ 2. Blatant Acoustic Flag: F0 std < 6Hz, Pauses < 10% │
│ 3. Rehearsed Speed Flag: WPM > 165, Pauses < 8% │
│ 4. Fairness Guardrails (ESL, Stress, Neurodiverse) │
│ (Only active if probe confirms flatness < 0.55) │
└──────────────────────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ MANDATORY HUMAN REVIEW GATE │
│ (enforce_human_review_gate) │
│ │
│ • downstream_action_permitted: False │
│ • Status: HUMAN_REVIEW_REQUIRED │
│ • Appends trajectory to logs/agent_trajectory.json │
└─────────────────────────────────────────────────────────────┘
- Input: 16kHz mono audio waveform and transcript text.
-
Instruction / Configuration: Extracts signal-processing metrics:
-
$F_0$ Fundamental Frequency standard deviation (f0_std_hz) via time-domain autocorrelation over 25ms frames. - Pause ratio (
pause_ratio) based on RMS energy thresholding ($<0.02$ ). - Speaking tempo (
wpm) calculated as(word_count / duration_sec) * 60.
-
-
Flagging Rule: Flags an anomaly if
f0_std < 14.0 Hz,pause_ratio < 0.08(less than 8% silence), orwpm > 175 WPM.
-
Input: Raw audio array fed into pretrained
facebook/wav2vec2-base. - Instruction / Configuration: Extracts hidden states from Layer 6 (the empirical sweet spot where phonetic/prosodic affect is richest before collapsing into discrete vocabulary tokens). Embeddings are pooled across time using mean + standard deviation into a 1536-dimensional feature vector.
-
Output: A balanced logistic regression probe trained on multi-speaker ALLSSTAR data outputs:
-
flatness_score: Posterior probability$P(\text{Scripted})$ $[0.0, 1.0]$ . -
expressive_score: Posterior probability$P(\text{Spontaneous})$ $[0.0, 1.0]$ .
-
- Input: Joint acoustic metrics, mid-layer probe scores, and transcript text.
-
Decision Logic & Override Priority:
-
Scripted Delivery Detection: Flags if
flatness_score >= 0.55(deep prosodic reading signature) OR if blatant acoustic monotone reading is detected (f0_std < 6.0 Hzandpause_ratio < 0.10andwpm > 140.0). -
Rehearsed Canned Script Detection: Flags if
wpm > 165.0with compressed pauses (pause_ratio < 0.08) and zero spontaneous hesitation tokens. -
Fairness Guardrails (Demographic & Clinical Protection):
-
Honest Emotional Distress: Vocal tremor (
$F_0\text{ std} > 30\text{ Hz}$ ornervous_score > 0.40) with natural pauses is suppressed from flagging providedflatness_score < 0.55. -
Non-Native / ESL Cadence: Syllable-timed cadence with natural clause pauses (
$>18%$ silence) and hesitation markers is protected providedflatness_score < 0.55. -
Naturally Monotone / Neurodivergent Voice: Low baseline pitch variation (
$F_0\text{ std} < 10\text{ Hz}$ ) accompanied by relaxed tempo and natural conversational pauses is protected providedflatness_score < 0.55.
-
Honest Emotional Distress: Vocal tremor (
-
Strict Override Priority Rule: Fairness guardrails cannot suppress a flag if the neural embedding probe confidently indicates scripted delivery (
flatness_score >= 0.55). This prevents lively scripted readers from evading detection while maintaining zero false positives on genuine spontaneous speakers.
-
Scripted Delivery Detection: Flags if
- Input: Raw agent decision output and diagnostic trajectory.
- Instruction / Configuration: Intercepts every flagged case, hardcoding
downstream_action_permitted: Falseand mapping status strictly toHUMAN_REVIEW_REQUIRED. - Enforcement: Never outputs accusations of "cheating" or "fraud". Synthesizes plain-language diagnostic reasoning for human recruiters and records an immutable audit log to
logs/agent_trajectory.json.
Below is the consolidated history of verified iterations, empirical findings, and architectural decisions made throughout development:
| Iteration # | What Was Tried & Implemented | Why | Evidence / Empirical Result | Decision Made |
|---|---|---|---|---|
| 0. Baseline Setup | Initial synthetic audio generator and baseline heuristic detector. | Bootstrap test harness. | Baseline and agent tied with 10/10 identical flags. | Diagnosed benchmark as non-discriminating; synthetic test set was too simple. |
| 1. Benchmark Diagnosis | Audited synthetic test generation code. | Investigate lack of baseline separation. | Synthetic generator baked ground-truth labels directly into synthesized acoustic formulas (circular benchmark). | Decision: Switch to real human speech data (Northwestern ALLSSTAR corpus). |
| 2. Single-Class Collapse | First real-data run trained probe on DHR and tested on HT1. |
Evaluate real-speaker speech. | Probe collapsed to predicting single majority class (0% precision, 0% recall in ablation) because both DHR and HT1 are scripted tasks. |
Decision: Ingest spontaneous ALLSSTAR tasks (ST1, ST2) to build a balanced dataset with StratifiedGroupKFold. |
| 3. Balanced Retraining & Sanity Gate | Merged 4 ALLSSTAR tasks (309 clips, 26 speakers) and added probability-separation sanity gate. | Prevent single-class training collapse and speaker leakage. | Mean |
Decision: Probe verified trustworthy; proceed to full multi-modal pipeline evaluation. |
| 4. Guardrail Gating Fix | Evaluated full pipeline on 69 held-out ALLSSTAR clips. | Test real-world multi-speaker generalization. | Agent achieved only 54.5% scripted catch rate despite probe outputting 0.92–0.97 confidence. Root-caused to fairness guardrails overriding confident probe signals due to surface pitch/text matches. |
Decision: Require flatness_score < 0.55 before any fairness guardrail can suppress an anomaly flag. |
| 5. Headline Real-World Validation | Reran held-out evaluation on ALLSSTAR test partition ( |
Validate hardened multi-modal logic. | Scripted catch rate jumped from 6.1% (baseline) to 100.0% (agent) with 0.0% false positives on 36 spontaneous clips and 100% catch on matched lively readers. | Decision: Lock this as the primary reported result. |
| 6. Residual Noise Analysis | Audited single calibration disagreement on case_17 (noisy spontaneous clip). |
Trace why noise triggered a false flag. | 15 dB SNR background fan noise filled inter-word pauses (pause_ratio = 0.0%) and shifted spectral flatness to 0.624. |
Decision: Document transparently as an open limitation requiring an upstream SNR/VAD pre-filter gate. |
The primary empirical validation was conducted on DHR, HT1) against authentic spontaneous picture narratives (ST1, ST2):
========================================================================================================
REAL-WORLD HELD-OUT SPEAKER EVALUATION (ALLSSTAR TEST PARTITION, N = 69)
========================================================================================================
Ground Truth Framing: Scripted (DHR/HT1) = Positive (Should Flag) | Spontaneous (ST1/ST2) = Negative (Should Pass)
Metric Category | Acoustic Baseline | Combined Agent (Ours) | Practical Clinical Impact
------------------------------------------------------------------------------------------------------------------------
Scripted Catch Rate (True Positives) | 2/33 ( 6.1%) | 33/33 (100.0%) | 16x sensitivity gain over baseline
Scripted Miss Rate (False Negatives) | 31/33 ( 93.9%) | 0/33 ( 0.0%) | Zero missed scripted readings
Spontaneous Pass Rate (True Negatives) | 36/36 (100.0%) | 36/36 (100.0%) | Zero false accusations
Spontaneous False Flags (False Positives) | 0/36 ( 0.0%) | 0/36 ( 0.0%) | 100% Protected (0% FP)
========================================================================================================
Using speakers who appear in both scripted and spontaneous tasks, we evaluated whether the agent detects scripted readings from candidates whose natural voice is lively:
-
Speaker_052: Scripted Read ($P=0.975$ )$\rightarrow$ CORRECT CATCH (FLAGGED) | Spontaneous ($P=0.050$ )$\rightarrow$ CORRECT PASS (UNFLAGGED) -
Speaker_055: Scripted Read ($P=0.952$ )$\rightarrow$ CORRECT CATCH (FLAGGED) | Spontaneous ($P=0.021$ )$\rightarrow$ CORRECT PASS (UNFLAGGED) -
Speaker_060: Scripted Read ($P=0.928$ )$\rightarrow$ CORRECT CATCH (FLAGGED) | Spontaneous ($P=0.017$ )$\rightarrow$ CORRECT PASS (UNFLAGGED) -
Speaker_065: Scripted Read ($P=0.923$ )$\rightarrow$ CORRECT CATCH (FLAGGED) | Spontaneous ($P=0.084$ )$\rightarrow$ CORRECT PASS (UNFLAGGED)
(Note: Clearly labeled as a supplementary boundary stress test across controlled edge cases, not equivalent to the primary ALLSSTAR evidence above).
| Configuration | Accuracy (95% CI) | Precision | Recall | F1 Score | Subgroup False Positives |
|---|---|---|---|---|---|
| Acoustic-Only (Baseline) | 100.0% [83.9% - 100.0%] | 100.0% | 100.0% | 100.0% | 0/13 (0.0%) |
| Mid-Layer Embedding Only | 65.0% [43.3% - 81.9%] | 50.0% | 14.3% | 22.2% | 1/13 (7.7%) |
| Combined Agent (Ours) | 95.0% [76.4% - 99.1%] | 87.5% | 100.0% | 93.3% | 1/13 (7.7% - Noisy Audio) |
- Honest-Stressed / Distressed: 0.0% False Positive Rate (0/2 - Protected)
- Natural Monotone / Neurodiverse: 0.0% False Positive Rate (0/2 - Protected)
- Non-Native / Atypical Prosody: 0.0% False Positive Rate (0/2 - Protected)
- Standard Spontaneous: 0.0% False Positive Rate (0/6 - Protected)
- Noisy / Degraded Audio (15 dB SNR): 100.0% False Positive Rate (1/1 - Documented Limitation)
- Agreement Rate: 95.0% (19/20 cases)
- Single Disagreement (
case_17): Blind human ratedPASS (Spontaneous); agent flagged due to continuous 15 dB SNR background noise.
- OS: Windows / Linux / macOS
- Python: Python 3.10+
- Hardware Target: Local NVIDIA RTX 3050 (6GB VRAM) or CPU fallback.
-
Pretrained Speech Model:
facebook/wav2vec2-base(12 Transformer layers, 768 hidden dimension, ~95M parameters). -
Actual Runtime & Cost Profile (Measured on RTX 3050):
- Embedding extraction on 309 ALLSSTAR clips: ~35 seconds (VRAM usage
$<1.4$ GB). - StratifiedGroupKFold probe training: ~2 seconds.
- Complete multi-tier evaluation benchmark: ~12 seconds.
- Compute cost: $0.00 (100% local inference, zero API calls).
- Embedding extraction on 309 ALLSSTAR clips: ~35 seconds (VRAM usage
This project uses the following 4 task subsets from the Northwestern ALLSSTAR corpus:
ALL_ENG_ENG_DHR: Universal Declaration of Human Rights passage reading (26 speakers).ALL_ENG_ENG_HT1: Harvard Sentences list 1 reading (25 speakers).ALL_ENG_ENG_ST1: Picture Story Narrative 1 ("Frederick the Bird", 26 speakers).ALL_ENG_ENG_ST2: Picture Story Narrative 2 ("Jorge and the Bubbles", 26 speakers).
Access Procedure: Audio files are requested via Northwestern's public request form on the corpus website (email submission resulting in a direct SharePoint download link; no formal institutional DUA required). Place the extracted folders directly into the repository root:
d:/Projects/micro1/
├── ALL_ENG_ENG_DHR/
├── ALL_ENG_ENG_HT1/
├── ALL_ENG_ENG_ST1/
└── ALL_ENG_ENG_ST2/
# Clone repository and navigate to project root
cd micro1
# Create Python virtual environment (.venv)
python -m venv .venv
# Activate virtual environment:
# On Windows (PowerShell):
.venv\Scripts\Activate.ps1
# On Windows (CMD):
.venv\Scripts\activate.bat
# On Linux / macOS:
source .venv/bin/activate
# Upgrade pip and install all required dependencies
pip install --upgrade pip
pip install -r requirements.txt# Step 1: Audit ALLSSTAR corpus metadata and speaker overlap
python affect_model/audit_allsstar.py
# Steps 2-3: Retrain mid-layer affect probe with probability sanity gate
python affect_model/probe.py
# Steps 4-6: Run full real-world held-out evaluation & ablation suite
python eval/run_eval.py
# Step 7: Run agent on an individual candidate audio response
python agent/anomaly_agent.py eval/test_cases/case_05_scripted_monotone.wav "Sample candidate transcript..."The primary known failure mode is reduced reliability under degraded audio quality (low SNR).
-
Mechanism: Continuous acoustic background noise (such as air conditioning or fan hum at 15 dB SNR) fills the physical silent gaps between words, causing energy-based pause detection to collapse to
pause_ratio = 0.0%. Simultaneously, the elevated noise floor flattens spectral contrast, nudging the mid-layer probe embedding score from natural spontaneous ranges ($<0.10$ ) up to$0.624$ . - Status: This was not fully resolved in this iteration and was accepted as a documented trade-off for achieving 100% sensitivity on real human scripted reading.
- Future Work: An upstream Signal-to-Noise Ratio (SNR) and Voice Activity Detector (VAD) Pre-Filter Gate should be implemented to reject or denoise low-SNR audio before invoking the affect probe.
Speech affect models should NEVER be deployed as automated gatekeepers or fraud detectors. Human emotional delivery under pressure is inherently diverse and culturally variable. Using voice AI to automatically disqualify candidates introduces severe ethical risks and unfair bias against neurodivergent individuals, candidates with speech differences, and non-native speakers. Voice affect signals are valid only as secondary flags that surface diagnostic context to a trained human reviewer, accompanied by explicit plain-language rationale.
This project uses speech recordings from the ALLSSTAR Corpus (Archive of L1 and L2 Scripted and Spontaneous Transcripts and Recordings), specifically the DHR, HT1, ST1, and ST2 task subsets.
Citation: Bradlow, A. R. (n.d.). ALLSSTAR: Archive of L1 and L2 Scripted and Spontaneous Transcripts and Recordings. Retrieved from https://speechbox.linguistics.northwestern.edu/allsstar
Audio files were obtained via Northwestern's public request process and are included here for reproducibility of this project's benchmark, consistent with the corpus's stated use.