स्पीकर एम्बेडिंग
WeSpeaker ResNet34-LM का उपयोग करके 256-dimensional L2-normalized speaker vectors निकालें। ये embeddings एक speaker की अद्वितीय vocal विशेषताओं को कैप्चर करते हैं और पहचान, verification, और voice search के लिए उपयोग किए जा सकते हैं।
आर्किटेक्चर
WeSpeaker ResNet34-LM speaker representation learning के लिए प्रशिक्षित एक deep residual नेटवर्क है।
| चरण | विवरण |
|---|---|
| Input | Conv2d (1 से 32 channels) |
| ResNet34 | [3, 4, 6, 3] residual blocks |
| Stats Pooling | समय पर Mean + standard deviation |
| Projection | Linear (5120 से 256) |
| Output | L2-normalized 256-dim embedding |
मॉडल आकार: ~6.6M पैरामीटर, डिस्क पर ~25 MB।
Mel Features
मॉडल Hamming window के साथ कंप्यूट किए गए 80-dimensional mel-frequency features का उपयोग करता है। Log scaling अतिरिक्त normalization के बिना एक सरल log(max(mel, 1e-10)) फ़ॉर्मूला का उपयोग करती है। Batch normalization को इन्फ़रेंस दक्षता के लिए कन्वर्ज़न समय पर Conv2d layers में fuse किया जाता है।
CLI उपयोग
# Extract speaker embedding
.build/release/audio embed-speaker voice.wav
# JSON output (includes the 256-dim vector)
.build/release/audio embed-speaker voice.wav --json
# Choose inference engine
.build/release/audio embed-speaker voice.wav --engine coreml
विकल्प
| विकल्प | विवरण |
|---|---|
--engine | इन्फ़रेंस इंजन: mlx या coreml |
--json | पूर्ण embedding vector के साथ JSON आउटपुट फ़ॉर्मैट |
उपयोग केस
Speaker Verification
दो ऑडियो samples की तुलना करें यह निर्धारित करने के लिए कि क्या वे एक ही speaker से हैं। दोनों से embeddings निकालें और cosine similarity कंप्यूट करें। उच्च similarity score एक ही speaker की उच्च संभावना को इंगित करता है।
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 typically same speaker
Speaker Identification
एक अज्ञात ऑडियो sample को enrolled speaker embeddings के database के विरुद्ध मिलाएँ। उच्चतम cosine similarity वाला enrolled speaker पूर्वानुमानित पहचान है।
Voice Search
Speaker embedding द्वारा ऑडियो रिकॉर्डिंग के एक संग्रह को index करें, फिर एक नए ऑडियो sample के साथ एक ही speaker से सभी recordings खोजने के लिए query करें।
स्पीकर embeddings कम से कम 2-3 सेकंड की साफ़ speech के साथ सबसे अच्छा काम करते हैं। बहुत छोटे clips या noisy recordings कम विश्वसनीय embeddings उत्पन्न कर सकते हैं। noisy ऑडियो के लिए पहले स्पीच एन्हांसमेंट लागू करने पर विचार करें।
मॉडल डाउनलोड
| मॉडल | बैकएंड | आकार | 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()
// Extract embedding from file
let embedding = try await model.embed(audioFile: "voice.wav")
print("Embedding dimensions: \(embedding.count)") // 256
// Extract embedding from audio samples
let samples: [Float] = loadAudio("voice.wav")
let embedding = try await model.embed(samples: samples, sampleRate: 16000)