Traduzione automatica · Originale inglese
Embedding dei parlanti
Estratto 256-dimensionale L2-normalized vettori di altoparlante utilizzando WeSpeaker ResNet34-LM. Queste embeddings catturano le caratteristiche vocali uniche di un altoparlante e possono essere utilizzate per l'identificazione, la verifica e la ricerca vocale.
Architettura
WeSpeaker ResNet34-LM è una rete residua profonda addestrata per l'apprendimento della rappresentazione degli altoparlanti.
| Fase | Dettagli |
|---|---|
| Input | Conv2d (1 a 32 canali) |
| ResNet34 | [3, 4, 6, 3] blocchi residui |
| Stats Pooling | Medico + deviazione standard nel tempo |
| Proiezione | Lineare (5120 a 256) |
| Produzione | L2-normalized 256-dim embedding |
Dimensione del modello: ~6.6M parametri, ~25 MB su disco.
Mel Caratteristiche
Il modello utilizza le caratteristiche di frequenza mel-frequenza dimensionale 80 calcolate con una finestra Hamming. log(max(mel, 1e-10)) formula senza normalizzazione aggiuntiva. La normalizzazione batch viene fusa negli strati Conv2d a tempo di conversione per l'efficienza dell'inferenza.
Uso CLI
# 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
Opzioni
| Opzione | Designazione |
|---|---|
--engine | mlx o coreml per WeSpeaker; redimnet2 per l'identità nominata; camplusplus per clonazione CosyVoice |
--json | Formato di uscita JSON con vettore incorporato completo |
Identità vocale nominata con ReDimNet2-B6
Uso --engine redimnet2 Ritorna un'integrazione normalizzata 192 da almeno due secondi di discorso. La finestra CoreML fissa ripete campioni più brevi e le curve centrali più lunghe.
ReDimNet2 è per i profili vocali di nome. La diarizzazione mantiene i propri embedding WeSpeaker. ReDimNet2, WeSpeaker standalone e Community-1 centroids non possono essere paragonati tra loro.
Utilizzare i casi
Verifica dell'oratore
Confrontare due campioni audio per determinare se sono dallo stesso altoparlante. Estrarre le incorporazioni da entrambi e calcolare la somiglianza del coseno. Un punteggio di somiglianza superiore indica una maggiore probabilità dello stesso altoparlo.
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
Identificazione del relatore
Abbina un campione audio sconosciuto contro un database di embeddings di altoparlanti iscritta. L'altoparlante iscritto con la più alta somiglianza di cosene è l'identità predetta.
Ricerca vocale
Indice una raccolta di registrazioni audio da altoparlanti incorporati, poi query con un nuovo campione audio per trovare tutte le registrazioni dallo stesso altoparlante.
Gli embeddings del diffusore funzionano meglio con il discorso pulito di almeno 2-3 secondi. clip molto brevi o registrazioni rumorose possono produrre embedded meno affidabili. valorizzazione del discorso prima per l'audio rumoroso.
Download del modello
| Modello | Indietro | Dimensione | 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