Maskinoversættelse · Engelsk original
Talerrepræsentationer
Uddrag 256- dimensional L2-normalized højttaler vektorer ved hjælp af WeSpeaker ResNet34-LMDisse indlejringer indfanger en højttalers unikke stemmeegenskaber og kan bruges til identifikation, verifikation og stemmesøgning.
Arkitektur
WeSpeaker ResNet34-LM er et dybt restnetværk, der er uddannet til at lære at repræsentere højttalere.
| Fase | Detaljer |
|---|---|
| Input | Conv2d (1 til 32-kanaler) |
| ResNet34 | [3, 4, 6, 3] tilbageværende blokke |
| Stats Pooling | Middelværdi + standardafvigelse over tid |
| Fremskrivning | Lineær (5120 til 256) |
| Output | L2-normalized 256- dim indlejring |
Model størrelse: ~ 6.6M parametre, ~ 25 MB på disk.
Mel funktioner
Modellen bruger 80- dimensionelle mel- frekvens funktioner beregnet med et Hamming vindue. Log skalering bruger en simpel log(max(mel, 1e-10)) formel uden yderligere normalisering. Batch normalisering er smeltet ind i Conv2d lag ved konvertering tid for inferens effektivitet.
CLI-brug
# Extract speaker embedding
.build/release/speech embed-speaker voice.wav
# JSON output (includes the 256-dim vector)
.build/release/speech embed-speaker voice.wav --json
# Choose inference engine
.build/release/speech embed-speaker voice.wav --engine coreml
Indstillinger
| Valgmulighed | Varebeskrivelse |
|---|---|
--engine | mlx eller coreml for WeSpeaker redimnet2 for navngivet identitet camplusplus for CosyVoice kloning |
--json | JSON output format med fuld indlejring vektor |
Navngivet talekendskab med ReDimNet2-B6
Anvendelse --engine redimnet2 for at matche en ren stemme på tværs af optagelser. Det returnerer en 192- dimensional normaliseret indlejring fra mindst to seksogsekunders tale. Det faste seksogt. CoreML vindue gentager kortere prøver og center- afgrøder længere dem.
ReDimNet2 er for navngivne stemmeprofiler. Diarisering holder sin egen WeSpeaker indlejringer. ReDimNet2, standalone WeSpeaker og Community-1 centroider kan ikke sammenlignes med hinanden.
Brug cases
Formålskontrol
Sammenlign to lydprøver for at afgøre, om de er fra samme højttaler. Uddrag indlejringer fra begge og beregne cosinens lighed. En højere lighed score indikerer en højere sandsynlighed for samme højttalerne.
import SpeechVAD
let model = try await WeSpeakerModel.fromPretrained()
let samples1: [Float] = loadAudio("sample1.wav")
let samples2: [Float] = loadAudio("sample2.wav")
let embedding1 = model.embed(audio: samples1, sampleRate: 16000)
let embedding2 = model.embed(audio: samples2, sampleRate: 16000)
let similarity = WeSpeakerModel.cosineSimilarity(embedding1, embedding2)
print("Similarity: \(similarity)") // > 0.7 typically same speaker
Højttaleridentifikation
Match en ukendt audio prøve mod en database af tilmeldte højttaler indlejringer. Den indskrevne højttaler med den højeste cosinlighed er den forudsagte identitet.
Stemmesøgning
Indeks en samling af lydoptagelser ved højttaler indlejring, derefter forespørgsel med en ny lydprøve til at finde alle optagelser fra den samme højttaler.
Højttalerindlejringer fungerer bedst med ren tale af mindst 2- 3 sekunder. Meget korte klip eller støjende optagelser kan producere mindre pålidelige indlejringer. Overvej at anvende tale- forbedring Først for larmende lyd.
Model Downloads
| Model | Backend | Størrelse | HuggingFace |
|---|---|---|---|
| WeSpeaker-ResNet34-LM | MLX | ~ 25 MB | aufklarer / WeSpeaker-ResNet34-LM-MLX |
| WeSpeaker-ResNet34-LM | CoreML | ~ 25 MB | aufklarer / WeSpeaker-ResNet34-LM-CoreML |
| ReDimNet2-B6 | CoreML | ~ 25 MiB | aufklarer / ReDimNet2-B6-CoreML |
Swift API
import SpeechVAD
let model = try await WeSpeakerModel.fromPretrained()
// Extract embedding from audio samples
let samples: [Float] = loadAudio("voice.wav")
let embedding = model.embed(audio: samples, sampleRate: 16000)
print("Embedding dimensions: \(embedding.count)") // 256