Pronouncing Hard Words: Phoneme Adaptation of a Pretrained Conversational Text to Speech Model

Abstract

Voice agents built as cascaded automatic speech recognition (ASR) → large language model (LLM) → text-to-speech (TTS) pipelines increasingly rely on conversational TTS: streaming, context condi- tioned models that adapt delivery to dialogue history. Such models are natural and expressive but offer little explicit control over how rare, trust-critical drug names are pronounced, because these enti- ties are too infrequent, and their vocabulary too fast-growing to be covered by any amount of pre-, mid-, or post-training. We retrofit phoneme controllability onto a pretrained conversational TTS model avoiding any pre/mid-training, using an ARPAbet vocabulary exten- sion, continued phoneme-augmented supervised fine-tuning (SFT), and a training-free inference-time acoustic-biasing step. On a 7,500- clip clinical drug-pronunciation evaluation, our model raises strict Gemini-judged correctness from 54.6% (no phoneme augmenta- tion) to 90.7%, outperforming every conversational and stateless TTS baseline on the automatic metric. Because no training stage sees a drug name, the entire evaluation is out-of-domain, so the gains reflect learned pronunciation rather than memorization. In a blinded, randomized human study, adult listeners judge 84% of our clips correct, the highest across all the baselines. Across all 250 matched clips, Gemini agrees with the human majority on 84.8% of binary labels (κ=0.57).

Results

Audio Samples

We evaluate pronunciation accuracy on three held-out drug names. For each drug, we show a human reference recording followed by five generations from each model. Samples are scored 1–3 by a Gemini judge (3 = correct).

Appendix

Gemini-as-Judge Prompts

Drug-Pronunciation Judge

The drug-pronunciation eval calls Gemini-3.1-Pro at T = 0 with two audio inputs (AUDIO 1 = reference recording of the drug name spoken in isolation; AUDIO 2 = the TTS-generated clip) and the prompt below. The IPA block is shown only as descriptive context for error annotations and is explicitly excluded from the scoring decision.

You are evaluating whether a TTS system correctly pronounced a medical/drug term. Focus ONLY on the pronunciation of the target term. Ignore the surrounding sentence quality, speaker voice, pacing, and expressiveness.

Target term: {drug_name}
Reference IPA (for error description only -- do NOT use this to determine your score): {ipa}
AUDIO 1: Reference recording of "{drug_name}" spoken in isolation.
AUDIO 2: TTS synthesis of the sentence: "{sentence}"

## Scoring instructions

Base your score SOLELY on how the pronunciation in AUDIO 2 compares to AUDIO 1. Do NOT score against the IPA text -- the reference audio is the only ground truth.

Rate the pronunciation of "{drug_name}" in AUDIO 2:
  3 = Correct: matches the reference audio clearly and correctly
  2 = Flawed but recognizable: identifiable as the same drug, but has audible errors vs the reference
  1 = Wrong or unintelligible: sounds like a different word, is garbled, or is skipped entirely

Output structured JSON:
  - If 3: {"score": 3}
  - If 2/1: include error_type, heard_as (phonetic description), and confidence (high|medium|low).

The corpus-level strict correct rate (% of clips with score=3) is reported as mean ± 5-run σ from a 5-generation partition. The same prompt is applied verbatim to the Drug-OOD split and to every cross-system row.

ARPAbet Vocabulary Extension (131 tokens)

Controllability is exposed via a fixed ARPAbet phone inventory registered as atomic special tokens. A pronunciation span is wrapped as <|arpa_start|>…<|arpa_end|> with one token per phone (e.g. <|arpa_HH|>). The inventory is a CMU-ARPAbet + TIMIT superset: 129 phones plus the two span markers = 131 tokens.

Example <|arpa_start|><|arpa_HH|><|arpa_AH0|><|arpa_L|><|arpa_OW1|><|arpa_end|> = “hello”
Span markers (2)
<|arpa_start|> <|arpa_end|>
CMU consonants (24)
BCHDDHF GHHJHKL MNNGPR SSHTTHV WYZZH
CMU bare vowels (15)
AAAEAHAOAW AYEHEREYIH IYOWOYUHUW
CMU stressed vowels (45)
AA0AA1AA2 AE0AE1AE2 AH0AH1AH2 AO0AO1AO2 AW0AW1AW2 AY0AY1AY2 EH0EH1EH2 ER0ER1ER2 EY0EY1EY2 IH0IH1IH2 IY0IY1IY2 OW0OW1OW2 OY0OY1OY2 UH0UH1UH2 UW0UW1UW2
Reduced vowels / variants (16)
AXAX0AX1AX2 AXRAXR0AXR1AXR2 IXIX0IX1IX2 UXUX0UX1UX2
Syllabics + allophones (6)
ELEMEN DXNXQ
TIMIT-specific / alternates (3)
HVAX-HENG
TIMIT closures (6)
BCLDCLGCL KCLPCLTCL
Silence / noise markers (14)
H#SILSPSPN PAUEPIBRTHNSN LAUVOCNOISENOISE SPOKEN_NOISEMUSICBREATH