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
IntrareConv2d (1 până la 32 canale)
ResNet34Blocuri reziduale [3, 4, 6, 3]
Statistici de punere în comunMedia + abaterea standard în timp
Proiecţie Liniar (5120 până la 256)
IeșireL2-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
--enginemlx sau coreml pentru WeSpeaker; redimnet2 pentru identitatea desemnată; camplusplus pentru clonarea CosyVoice
--jsonFormat 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.

Spații separate de înglobare

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.

Important

Î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

ModelPlatformăDimensiuneHuggingFace
WeSpeaker-ResNet34-LMMLX~25 MOaufklarer/WeSpeaker-ResNet34-LM-MLX
WeSpeaker-ResNet34-LMCoreML~25 MOaufklarer/WeSpeaker-ResNet34-LM-CoreML
ReDimNet2-B6CoreML~25 MiOaufklarer/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