plapre-nano / README.md
mhenrichsen's picture
Update README.md
293869c verified
metadata
language: da
tags:
  - text-to-speech
  - tts
  - danish
  - dansk
library_name: transformers
license: cc-by-4.0

Plapre Nano - Dansk Tekst-til-Tale

Dansk TTS-model med talerkonditionering og stemmekloningssupport. Genererer 24kHz lyd fra dansk tekst ved hjælp af autoregressiv lydtoken-prædiktion.

Modeldetaljer

Arkitektur SmolLM2-360M (LLaMA-baseret, 32 lag, hidden_size=960)
Parametre ~334.6M (base) + 123K (talerprojektion)
Vocab-størrelse 20.802 (8000 BPE + 12.800 lyd + separatorer)
Lydtokenizer Kanade (25 tokens/sek, 12.800 codebook)
Samplerate 24kHz
Præcision bfloat16

Sådan virker det

Modellen tager dansk tekst, konverterer den til BPE-tokens, og genererer autoregressivt Kanade-lydtokens, som afkodes til en lydbølge.

Sekvensformat:

[speaker_embedding] <text> BPE tokens <audio> audio tokens <eos>

Talerkonditionering: En indlært lineær projektion (nn.Linear(128, 960)) mapper en 128-dimensionel Kanade-talerembedding til modellens skjulte dimension. Denne indsættes som det første token i sekvensen, så modellen kan konditionere på taleridentitet via attention. Til stemmekloning udtrækkes talerembeddingen fra et referenceaudioklip via Kanade-encoderen.

Træningsdata

  • NST-DA
  • FTSpeech

Installation

uv add git+https://github.com/syv-ai/plapre.git

Inferens

Grundlæggende brug

from plapre import Plapre

tts = Plapre("syvai/plapre-nano")
tts.speak("Hej, hvordan har du det?", output="output.wav")

Vis tilgængelige talere

print(tts.list_speakers())
# ['tor', 'ida', 'liv', 'ask', 'kaj']

Vælg en taler

tts.speak("Hej med dig.", output="output.wav", speaker="ida")

Stemmekloning

tts.speak("Hej med dig.", output="cloned.wav", speaker_wav="reference.wav")

Lange tekster med sætningsopdeling

tts.speak(
    "Første sætning. Anden sætning. Tredje sætning!",
    output="long.wav",
    split_sentences=True,
)

Genereringsparametre

tts.speak(
    "Hej verden.",
    output="output.wav",
    temperature=0.8,     # sampling-temperatur (standard: 0.8)
    top_p=0.95,          # nucleus sampling (standard: 0.95)
    top_k=50,            # top-k sampling (standard: 50)
    max_tokens=500,      # maks lydtokens at generere (standard: 500)
)

Udtræk en talerembedding

Udtræk en 128-dim talerembedding fra en wav-fil og genbrug den på tværs af flere genereringer:

speaker_emb = tts.extract_speaker("reference.wav")
tts.speak("Hej.", output="a.wav", speaker_emb=speaker_emb)
tts.speak("Farvel.", output="b.wav", speaker_emb=speaker_emb)

Returværdi

speak() returnerer lyden som et numpy-array (24 kHz, float32) ud over at gemme filen:

audio = tts.speak("Hej.", output="output.wav")
print(f"Varighed: {len(audio) / 24000:.2f}s")