Sprechereinbettungen
Extrahiere 256-dimensionale L2-normalisierte Sprechervektoren mit WeSpeaker ResNet34-LM. Diese Einbettungen erfassen die einzigartigen Stimmmerkmale eines Sprechers und können für Identifikation, Verifikation und Sprachsuche verwendet werden.
Architektur
WeSpeaker ResNet34-LM ist ein tiefes Residual-Netzwerk, das für das Erlernen von Sprecherrepräsentationen trainiert wurde.
| Stufe | Details |
|---|---|
| Eingabe | Conv2d (1 auf 32 Kanäle) |
| ResNet34 | [3, 4, 6, 3] Residual-Blöcke |
| Stats Pooling | Mittelwert + Standardabweichung über die Zeit |
| Projektion | Linear (5120 auf 256) |
| Ausgabe | L2-normalisiertes 256-dim-Embedding |
Modellgröße: ~6,6M Parameter, ~25 MB auf Disk.
Mel-Features
Das Modell verwendet 80-dimensionale Mel-Frequenz-Features, berechnet mit einem Hamming-Fenster. Die Log-Skalierung verwendet eine einfache log(max(mel, 1e-10))-Formel ohne zusätzliche Normalisierung. Batch-Normalisierung wird zur Konvertierungszeit in die Conv2d-Schichten fusioniert, um die Inferenzeffizienz zu erhöhen.
CLI-Verwendung
# Sprecher-Embedding extrahieren
.build/release/audio embed-speaker voice.wav
# JSON-Ausgabe (enthält den 256-dim-Vektor)
.build/release/audio embed-speaker voice.wav --json
# Inferenz-Engine wählen
.build/release/audio embed-speaker voice.wav --engine coreml
Optionen
| Option | Beschreibung |
|---|---|
--engine | Inferenz-Engine: mlx oder coreml |
--json | JSON-Ausgabe mit vollständigem Embedding-Vektor |
Anwendungsfälle
Sprecher-Verifikation
Vergleiche zwei Audio-Samples, um festzustellen, ob sie vom selben Sprecher stammen. Extrahiere Embeddings aus beiden und berechne die Kosinusähnlichkeit. Ein höherer Ähnlichkeitswert weist auf eine höhere Wahrscheinlichkeit desselben Sprechers hin.
import SpeechVAD
let model = try await WeSpeaker.loadFromHub()
let embedding1 = try await model.embed(audioFile: "sample1.wav")
let embedding2 = try await model.embed(audioFile: "sample2.wav")
let similarity = cosineSimilarity(embedding1, embedding2)
print("Similarity: \(similarity)") // > 0,7 typischerweise derselbe Sprecher
Sprecher-Identifikation
Gleiche ein unbekanntes Audio-Sample gegen eine Datenbank eingeschriebener Sprecher-Embeddings ab. Der eingeschriebene Sprecher mit der höchsten Kosinusähnlichkeit ist die vorhergesagte Identität.
Sprachsuche
Indexiere eine Sammlung von Audioaufnahmen nach Sprecher-Embedding und frage dann mit einem neuen Audio-Sample, um alle Aufnahmen desselben Sprechers zu finden.
Sprecher-Embeddings funktionieren am besten mit sauberer Sprache von mindestens 2–3 Sekunden. Sehr kurze Clips oder verrauschte Aufnahmen können weniger zuverlässige Embeddings erzeugen. Erwäge bei verrauschtem Audio zuerst Sprachverbesserung.
Modell-Downloads
| Modell | Backend | Größe | HuggingFace |
|---|---|---|---|
| WeSpeaker-ResNet34-LM | MLX | ~25 MB | aufklarer/WeSpeaker-ResNet34-LM-MLX |
| WeSpeaker-ResNet34-LM | CoreML | ~25 MB | aufklarer/WeSpeaker-ResNet34-LM-CoreML |
Swift-API
import SpeechVAD
let model = try await WeSpeaker.loadFromHub()
// Embedding aus Datei extrahieren
let embedding = try await model.embed(audioFile: "voice.wav")
print("Embedding dimensions: \(embedding.count)") // 256
// Embedding aus Audio-Samples extrahieren
let samples: [Float] = loadAudio("voice.wav")
let embedding = try await model.embed(samples: samples, sampleRate: 16000)