Terjemahan mesin · Versi asli bahasa Inggris
Embedding pembicara
Ekstrak 256-Dimensi L2-normalized Vektor speaker memakai WeSpeaker ResNet34-LMPenggelapan ini menangkap karakteristik vokal unik dari pembicara dan dapat digunakan untuk identifikasi, verifikasi, dan pencarian suara.
Arsitektur
WeSpeaker ResNet34-LM adalah sisa-sisa jaringan yang terlatih untuk belajar representasi speaker.
| Tahap | Rincian |
|---|---|
| Masukan | Conv2d (saluran 1 ke 32) |
| ResNet34 | [3, 4, 6, 3] sisa blok |
| Stats Pooling | Berarti + standar deviasi dari waktu ke waktu |
| Proyeksi | Linear (5120 sampai 256) |
| Keluaran | L2-normalized 256- dim embedding |
Ukuran model: ~ 6.6M parameter, ~ 25 MB pada disk.
Mel Features
Model ini menggunakan fitur semprot dimensi 80- yang dihitung dengan jendela Hamming. Skala log menggunakan sederhana log(max(mel, 1e-10)) Formula tanpa normalisasi tambahan. Normalisasi batch menyatu ke dalam lapisan Conv2d pada waktu konversi untuk efisiensi inferensi.
Penggunaan 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
Opsi
| Opsi | Deskripsi |
|---|---|
--engine | mlx atau coreml untuk WeSpeaker; redimnet2 untuk identitas bernama; camplusplus untuk kloning CosyVoice |
--json | Format keluaran JSON dengan vektor embedding lengkap |
Nama identitas suara dengan ReDimNet2-B6
Gunakan --engine redimnet2 untuk mencocokkan suara yang bersih melalui rekaman. 192-Dimensi normalisasi embedding dari setidaknya dua detik pidato. CoreML jendela mengulangi sampel yang lebih pendek dan center- tanaman yang lebih lama.
ReDimNet2 adalah untuk nama profil suara. Diarisasi terus sendiri WeSpeaker penggelapan. ReDimNet2, standalone WeSpeaker, dan Community-1 centroid tidak dapat dibandingkan satu sama lain.
Gunakan Kases
Verifikasi Speaker
Bandingkan dua sampel audio untuk menentukan apakah mereka berasal dari pembicara yang sama. ekstrak penggelapan dari keduanya dan hitung kesamaan kosinus.
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
Identifikasi Speaker
Cocok dengan sampel audio yang tidak diketahui terhadap basis data penggelapan speaker yang terdaftar. Speaker yang terdaftar dengan cosinus kesamaan tertinggi adalah identitas yang diprediksi.
Pencarian Suara
Indeks koleksi rekaman audio oleh pembicara yang embedding, kemudian query dengan sampel audio baru untuk menemukan semua rekaman dari pembicara yang sama.
Speaker menggelapkan kata-kata terbaik dengan bahasa yang bersih setidaknya 2-3 detik. klip yang sangat pendek atau rekaman bising mungkin menghasilkan penggelapan yang kurang handal pertimbangkan mendaftar speech uppencement pertama untuk suara berisik.
Unduhan Model
| Model | Backend | Ukuran | 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