Traducere automată · Originalul în engleză
Reprezentări vectoriale ale vorbitorilor
Extract 256-dimensional L2-normalized vectori difuzori utilizand WeSpeaker ResNet34-LM. Aceste înglobări captează caracteristicile vocale unice ale unui difuzor și pot fi utilizate pentru identificare, verificare și căutare vocală.
Arhitectură
WeSpeaker ResNet34-LM este o rețea reziduală profundă instruită pentru învățarea reprezentării vorbitorilor.
| Etape | Detalii |
|---|---|
| Intrare | Conv2d (1 până la 32 canale) |
| ResNet34 | Blocuri reziduale [3, 4, 6, 3] |
| Statistici de punere în comun | Media + abaterea standard în timp |
| Proiecţie | Liniar (5120 până la 256) |
| Ieșire | L2-normalized 256-dim înglobare |
Mărime model: ~6.6M parametri, ~25 MB pe disc.
Caracteristici Mel
Modelul utilizează caracteristici de 80-dimensionale de frecvenţă mel calculate cu o fereastră Hamming. Log scalarea utilizează un simplu log log(max(mel, 1e-10)) formula fără normalizare suplimentară. Normalizarea lotului este topită în straturile Conv2d la momentul conversiei pentru eficienţa de referinţă.
Utilizarea 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
Opțiuni
| Opțiune | Descriere |
|---|---|
--engine | mlx sau coreml pentru WeSpeaker; redimnet2 pentru identitatea desemnată; camplusplus pentru clonarea CosyVoice |
--json | Format de ieșire JSON cu vector de înglobare completă |
Nume de identitate vocală cu ReDimNet2-B6
Utilizați --engine redimnet2 motor pentru a potrivi o voce curată peste înregistrări. Se întoarce o incorporare normalizată 192-dimensională de cel puțin două secunde de vorbire. Fixat șase secunde CoreML fereastră repetă eșantioane mai scurte și cent-crops mai lungi.
ReDimNet2 este pentru profilele vocale numite. Diarizarea se păstrează pe cont propriu WeSpeaker Încrucişări. ReDimNet2, standalone WeSpeaker, și Community-1 centroizii nu pot fi comparaţi între ei.
Cazuri de utilizare
Verificare difuzor
Comparați două probe audio pentru a determina dacă acestea sunt de la același difuzor. Extragerea de înglobări din ambele și calcula similaritatea cosinus. Un scor mai mare similaritate indică o probabilitate mai mare a aceluiași vorbitor.
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
Identificarea vorbitorului
Potriviți o mostră audio necunoscută cu o bază de date de înscriere difuzor. Vorbitor înrolat cu cea mai mare asemănare cosinus este identitatea prezisă.
Căutare vocală
Indexaţi o colecţie de înregistrări audio prin interogarea speakerului, apoi interogaţi cu o nouă mostră audio pentru a găsi toate înregistrările de la acelaşi difuzor.
Încorporarea speaker-ului funcționează cel mai bine cu vorbire curată de cel puțin 2-3 secunde. Clipurile foarte scurte sau înregistrările zgomotoase pot produce mai puțin fiabile înglobări. Luați în considerare aplicarea îmbunătățirea vorbirii mai întâi pentru audio zgomotos.
Modele de descărcări
| Model | Platformă | Dimensiune | HuggingFace |
|---|---|---|---|
| WeSpeaker-ResNet34-LM | MLX | ~25 MO | aufklarer/WeSpeaker-ResNet34-LM-MLX |
| WeSpeaker-ResNet34-LM | CoreML | ~25 MO | aufklarer/WeSpeaker-ResNet34-LM-CoreML |
| ReDimNet2-B6 | CoreML | ~25 MiO | 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