Snap misheard character names to GM-defined "heard as" aliases after transcription #579

Closed
opened 2026-09-09 10:49:21 +00:00 by claude-bot · 2 comments
Contributor

Problem. On the 2026-09-09 session, "Viq" (Viquilonto's nickname) was transcribed as Vic, Vick or Nick in all 22 mentions, and Idani as Adani/Bidani/Dani in 5 of 31, with the campaign vocabulary in the prompt and, per #577's measurement, equally with it as hotwords. Whisper's bias cannot overturn a common English word the acoustics already match, so no prompt setting fixes this. It matters twice: the transcript reads wrong, and the beat validator checks a claimed actor against speaker labels and character names, so a line about "Vic" cannot support a beat about Viq.

Design. A deterministic, GM-controlled correction applied to the segment list after the hallucination filter (#569) and before the merge:

  • Each campaign_characters row (and optionally each NPC / lore entry) gets a list of "heard as" aliases the GM types: for Viq, Vic, Vick; for Idani, Adani, Bidani. Reuse lore_entry_aliases where the character has a lore entry; add a small heard_as JSON column on campaign_characters otherwise. No automatic fuzzy matching: "Nick" is also a real name, and a GM is the only one who knows their table.
  • Whole-word, case-insensitive replacement of an alias with the character's name, in every speaker's lines. Count per alias on the run record (name_snaps, JSONB like hallucination_drops), never log the text.
  • The same aliases are worth adding to the ASR vocabulary as-is, so the decoder at least produces a consistent spelling to snap from.
  • UI: an "also heard as" field on the character card in the campaign page; the Admin panel needs nothing.

Measure on the dev replay with Vic, Vick on Viq and Adani, Bidani on Idani: expect Viq 22 / 0 and Idani 31 / 0 in the spelling query used on #577, and a higher beat validation rate for beats naming Viq.

Related: #569 (filter, same seam), #574 (the vocabulary cleaner), #577 (why prompting is not the fix).

**Problem.** On the 2026-09-09 session, "Viq" (Viquilonto's nickname) was transcribed as *Vic*, *Vick* or *Nick* in all 22 mentions, and Idani as *Adani*/*Bidani*/*Dani* in 5 of 31, with the campaign vocabulary in the prompt and, per #577's measurement, equally with it as hotwords. Whisper's bias cannot overturn a common English word the acoustics already match, so no prompt setting fixes this. It matters twice: the transcript reads wrong, and the beat validator checks a claimed actor against speaker labels and character names, so a line about "Vic" cannot support a beat about Viq. **Design.** A deterministic, GM-controlled correction applied to the segment list after the hallucination filter (#569) and before the merge: - Each `campaign_characters` row (and optionally each NPC / lore entry) gets a list of "heard as" aliases the GM types: for Viq, `Vic, Vick`; for Idani, `Adani, Bidani`. Reuse `lore_entry_aliases` where the character has a lore entry; add a small `heard_as` JSON column on `campaign_characters` otherwise. No automatic fuzzy matching: "Nick" is also a real name, and a GM is the only one who knows their table. - Whole-word, case-insensitive replacement of an alias with the character's name, in every speaker's lines. Count per alias on the run record (`name_snaps`, JSONB like `hallucination_drops`), never log the text. - The same aliases are worth adding to the ASR vocabulary as-is, so the decoder at least produces a consistent spelling to snap from. - UI: an "also heard as" field on the character card in the campaign page; the Admin panel needs nothing. **Measure** on the dev replay with `Vic, Vick` on Viq and `Adani, Bidani` on Idani: expect Viq 22 / 0 and Idani 31 / 0 in the spelling query used on #577, and a higher beat validation rate for beats naming Viq. Related: #569 (filter, same seam), #574 (the vocabulary cleaner), #577 (why prompting is not the fix).
Author
Contributor

Picking this up now (2026-09-09). Plan: heard_as aliases on campaign_characters (JSON list, raw-SQL migration), a snap step in process_audio right after the hallucination filter and before the merge, name_snaps counts on summarisation_runs, the aliases folded into the ASR vocabulary, and an "Also heard as" field on the character card. Measured afterwards on the dev replay with Vic, Vick on Viq and Adani, Bidani on Idani against the numbers on #577.

Picking this up now (2026-09-09). Plan: `heard_as` aliases on `campaign_characters` (JSON list, raw-SQL migration), a snap step in `process_audio` right after the hallucination filter and before the merge, `name_snaps` counts on `summarisation_runs`, the aliases folded into the ASR vocabulary, and an "Also heard as" field on the character card. Measured afterwards on the dev replay with `Vic, Vick` on Viq and `Adani, Bidani` on Idani against the numbers on #577.
Author
Contributor

Measured on the dev replay (same audio; aliases set to Vic, Vick on Viquilonto (Viq); Adani, Bidani on Idani; Parahark on Harrowhark; vocabulary grew from 36 to 41 terms with the aliases at the alias tier).

name before (right / mangled) after
Viquilonto / Viq 0 / 22 24 / 0
Idani 26 / 5 42 / 1
Harrowhark 12 / 2 18 / 1

name_snaps on the run: {"Viquilonto (Viq)": 27, "Idani": 60, "Harrowhark": 5}. Idani's count is higher than the mangled figure suggests because putting the aliases in the vocabulary made Whisper emit "Adani" consistently, which is exactly the spelling the snap wants; the mention count rose too (26 to 42 correct) because several lines that had been transcribed as other words now resolve. The one remaining Idani variant is "Dani", which was not in the alias list.

Shipped in #581, closing. #580 carries the export/import gap.

**Measured on the dev replay** (same audio; aliases set to Vic, Vick on Viquilonto (Viq); Adani, Bidani on Idani; Parahark on Harrowhark; vocabulary grew from 36 to 41 terms with the aliases at the alias tier). | name | before (right / mangled) | after | |---|---|---| | Viquilonto / Viq | 0 / 22 | 24 / 0 | | Idani | 26 / 5 | 42 / 1 | | Harrowhark | 12 / 2 | 18 / 1 | `name_snaps` on the run: `{"Viquilonto (Viq)": 27, "Idani": 60, "Harrowhark": 5}`. Idani's count is higher than the mangled figure suggests because putting the aliases in the vocabulary made Whisper emit "Adani" consistently, which is exactly the spelling the snap wants; the mention count rose too (26 to 42 correct) because several lines that had been transcribed as other words now resolve. The one remaining Idani variant is "Dani", which was not in the alias list. Shipped in #581, closing. #580 carries the export/import gap.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rbrooks/Quest-Board#579
No description provided.