Talsyntes (TTS)
Kunna förklara text-till-mel och vocoder och utvärdera syntetiserat tal.
Förkunskaper
- EGenerativa modeller — översiktkrävs
- EMel-skala och MFCCkrävs
Intuition
Klassisk TTS har två steg:
- Akustisk modell: text → mel-spektrogram. Här avgörs uttal, betoning, rytm och melodi.
- Vocoder: mel-spektrogram → vågform. Här avgörs om det låter naturligt eller robotaktigt.
Uppdelningen finns för att de två problemen är så olika. Steg 1 handlar om språk, steg 2 om signalbehandling. Nyare system gör allt i ett steg (VITS, och LLM-liknande modeller som genererar ljudtokens direkt), men tvåstegsbilden är fortfarande den bästa mentala modellen.
Det svåra är inte att låta mänskligt — det är prosodin. Samma mening kan betyda helt olika saker beroende på var betoningen ligger. En TTS som uttalar alla ord rätt men betonar fel låter märkligt på ett sätt som är svårt att sätta fingret på.
På svenska tillkommer en särskild svårighet: accent 1 och accent 2. «Anden» (fågeln) och «anden» (spöket) skiljs bara åt av tonaccenten. Det finns inget i stavningen som avgör det.
Formellt
Kedjan i detalj:
| Steg | Vad som händer | Typiska modeller |
|---|---|---|
| Textnormalisering | «kl. 14:30» → «klockan fjorton och trettio» | regler + ordlistor |
| Grafem→fonem | stavning → uttal, med undantagslexikon | lexikon + modell |
| Akustisk modell | fonem + duration → mel | FastSpeech 2, Tacotron 2 |
| Vocoder | mel → vågform | HiFi-GAN, WaveGlow |
Textnormalisering är där de flesta hörbara felen uppstår, inte i det neurala nätet. Förkortningar, siffror, datum, enheter, egennamn och utländska ord. «3 m/s» ska bli «tre meter per sekund», inte «tre m snedstreck s».
Utvärdering:
| Metod | Mäter | Kommentar |
|---|---|---|
| MOS | upplevd kvalitet, 1–5, av lyssnare | guldstandard, dyr |
| MUSHRA / AB-test | jämförelse mellan system | känsligare än MOS |
| UTMOS och liknande | förutsägd MOS | billigt, för regressionstester |
| WER via ASR | begriplighet | fångar uttalsfel automatiskt |
| Uttalslista | specifika ord | egennamn, termer, förkortningar |
Den fjärde raden är underskattad: kör din TTS genom en ASR-modell och mät WER mot den text du matade in. Det upptäcker uttalsfel automatiskt, i stor skala och utan lyssnare.
Röstkloning och samtycke. Att klona en röst kräver i dag mycket lite ljud. Minimikraven för ansvarsfull användning: dokumenterat samtycke från rösten, tydlig märkning av syntetiskt tal (krav i EU:s AI-förordning), spårbarhet över vem som genererade vad, och en spärrlista mot kända röster. Kommersiella leverantörer som gör detta rätt kräver en verifieringsinspelning där talaren läser en given text — inte bara en uppladdad fil.
Kod
import re, torch, jiwer
from transformers import pipeline
# 1. Textnormalisering — här uppstår de flesta hörbara felen
ENHETER = {"m/s": "meter per sekund", "kr": "kronor", "kl.": "klockan", "%": "procent"}
def normalisera(t: str) -> str:
for k, v in ENHETER.items():
t = t.replace(k, " " + v + " ")
t = re.sub(r"\b(\d{1,2}):(\d{2})\b", r"\1 och \2", t)
return re.sub(r"\s+", " ", t).strip()
print(normalisera("Mötet börjar kl. 14:30 och det blåser 3 m/s."))
# Mötet börjar klockan 14 och 30 och det blåser 3 meter per sekund .
# ^ mellanslaget före punkten är precis den sortens fel som hörs — städa efter normaliseringen
# 2. Syntetisera och 3. mät begriplighet automatiskt med ASR
tts = pipeline("text-to-speech", model="facebook/mms-tts-swe")
asr = pipeline("automatic-speech-recognition", model="KBLab/kb-whisper-small")
def begriplighet(meningar):
fel = []
for m in meningar:
ljud = tts(normalisera(m))
tillbaka = asr({"raw": ljud["audio"].squeeze(), "sampling_rate": ljud["sampling_rate"]},
generate_kwargs={"language": "sv"})["text"]
w = jiwer.wer(m.lower(), tillbaka.lower())
if w > 0.1:
fel.append((m, tillbaka, round(w, 2)))
return fel
for rad in begriplighet(["Anden simmade i dammen.", "Tåget avgår kl. 14:30 från spår 3."]):
print(rad)
Den loopen är en fullgod regressionssvit för TTS: kör den vid varje modell- eller lexikonändring och granska bara de meningar där WER stiger.
Behärskning innebär
- Beskriver TTS-kedjan från text till vågform
- Utvärderar syntetiserat tal med rätt metoder
- Hanterar röstkloning ansvarsfullt
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- arXiv — FastSpeech 2: Fast and High-Quality End-to-End Text to Speech — arXiv (öppen åtkomst; licens per artikel)
- arXiv — HiFi-GAN — arXiv (öppen åtkomst; licens per artikel)
- EU:s AI-förordning (2024/1689), art. 50 — EU-rättsakt