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.

TahapRincian
MasukanConv2d (saluran 1 ke 32)
ResNet34[3, 4, 6, 3] sisa blok
Stats PoolingBerarti + standar deviasi dari waktu ke waktu
ProyeksiLinear (5120 sampai 256)
KeluaranL2-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

OpsiDeskripsi
--enginemlx atau coreml untuk WeSpeaker; redimnet2 untuk identitas bernama; camplusplus untuk kloning CosyVoice
--jsonFormat 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.

Pisahkan ruang embedding

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.

Penting

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

ModelBackendUkuranHuggingFace
WeSpeaker-ResNet34-LMMLX~ 25 MBaufklarer / WeSpeaker-ResNet34-LM-MLX
WeSpeaker-ResNet34-LMCoreML~ 25 MBaufklarer / WeSpeaker-ResNet34-LM-CoreML
ReDimNet2-B6CoreML~ 25 MiBaufklarer / 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