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.

StufeDetails
EingabeConv2d (1 auf 32 Kanäle)
ResNet34[3, 4, 6, 3] Residual-Blöcke
Stats PoolingMittelwert + Standardabweichung über die Zeit
ProjektionLinear (5120 auf 256)
AusgabeL2-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

OptionBeschreibung
--engineInferenz-Engine: mlx oder coreml
--jsonJSON-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.

Wichtig

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

ModellBackendGrößeHuggingFace
WeSpeaker-ResNet34-LMMLX~25 MBaufklarer/WeSpeaker-ResNet34-LM-MLX
WeSpeaker-ResNet34-LMCoreML~25 MBaufklarer/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)