Automatische vertaling · Engels origineel

Sprekerembeddings

Extract 256-dimensionaal L2-normalized luidsprekervectors met WeSpeaker ResNet34-LM. Deze inbeddingen geven de unieke vocale kenmerken van een luidspreker weer en kunnen worden gebruikt voor identificatie, verificatie en voice search.

Architectuur

WeSpeaker ResNet34-LM is een diep restnetwerk dat getraind is voor het leren van speakervertegenwoordigingen.

Fase Gegevens
InvoerConv2d (1 tot 32 kanalen)
ResNet34[3, 4, 6, 3] restblokken
Stats pooling Gemiddelde + standaardafwijking in de tijd
ProjectieLineair (5120 tot 256)
UitvoerL2-normalized 256-dim inbedding

Modelgrootte: ~6.6M parameters, ~25 MB op schijf.

Mel-functies

Het model maakt gebruik van 80-dimensionale mel-frequentie-functies berekend met een hamming venster. Log schalen maakt gebruik van een eenvoudige log(max(mel, 1e-10)) formule zonder extra normalisatie. Batch normalisatie wordt samengevoegd in de Conv2d lagen op conversietijd voor gevolgtrekking-efficiëntie.

CLI-gebruik

# 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

Opties

Optie Omschrijving
--enginemlx of coreml voor WeSpeaker; redimnet2 voor de naam van de persoon; camplusplus voor CosyVoice klonen
--jsonJSON uitvoerformaat met volledige inbedding vector

Vernoemde stemidentiteit met ReDimNet2-B6

Gebruik --engine redimnet2 om een schone stem bij opnames te matchen. Het geeft een 192-dimensionale genormaliseerde inbedding terug vanaf ten minste twee seconden spraak. Het vaste zes-seconde CoreML venster herhaalt kortere samples en center-crops langere.

Aparte inbeddingspaties

ReDimNet2 is bedoeld voor spraakprofielen. Diarization behoudt zijn eigen WeSpeaker inbeddingen. ReDimNet2, standalone WeSpeaker en Community-1 centroïden kunnen niet met elkaar vergeleken worden.

Gebruik Gevallen

Verificatie van de luidspreker

Vergelijk twee audio samples om te bepalen of ze van dezelfde speaker. Extract inbeddingen uit beide en de cosinus overeenkomst berekenen. Een hogere overeenkomst score duidt op een hogere kans van dezelfde speeaker.

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

Identificatie van de luidspreker

Vergelijk een onbekend audiomonster met een database van ingesloten speakers. De ingeschreven spreker met de hoogste cosinus overeenkomst is de voorspelde identiteit.

Voice Search

Indexeer een verzameling audio-opnames door speaker inbedding, dan query met een nieuwe audio sample om alle opnames van dezelfde speaker te vinden.

Belangrijk

Speaker inbeddingen werken het beste met een schone spraak van minstens 2-3 seconden. Zeer korte clips of luidruchtige opnames kunnen minder betrouwbare inbedding produceren. Overweeg om speech enhancement eerst toe te passen voor luidruchtig geluid.

Modeldownloads

ModelBackend GrootteHuggingFace
WeSpeaker-ResNet34-LMMLX25 MBaufklarer/WeSpeaker-ResNet34-LM-MLX
WeSpeaker-ResNet34-LMCoreML25 MBaufklarer/WeSpeaker-ResNet34-LM-CoreML
ReDimNet2-B6CoreML~25 MiBaufklarer/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