Awtomatikong salin · Orihinal sa Ingles

Mga embedding ng tagapagsalita

Examine 256-dimensional L2-normalized speaker vectors gamit ang mga vector WeSpeaker ResNet34-LM. Ang mga embedding na ito ay kumukuha ng kakaibang mga katangiang pangtinig ng isang nagsasalita at maaaring gamitin para sa pagkilala, beripikasyon, at paghahanap ng tinig.

Arkitektura

WeSpeaker ResNet34-LM ay isang malalim na regulator na network na sinanay para sa pagkatuto ng representasyon ng tagapagsalita.

Bagsag Mga Detalye
IlagayConv2d (1 hanggang 32 channel)
ResNet343, 4, 6, 3] na mga bloke sa pag - iral
Lumulutang na mga Tuka Kahulugan + pamantayang paglihis sa paglipas ng panahon
ProyektoLinear (5120 hanggang 256)
IlabasL2-normalized 256-dim embeding

Model sukat: −6.6M parameters, °25 MB sa disk.

Mga Katangiang Mel

Ang modelo ay gumagamit ng 80-dimensiyonal na mel-frequency features computed na may isang Hamming window. Ang pag-iiskeyting ay gumagamit ng simpleng log(max(mel, 1e-10)) na pormula na walang karagdagang normalisasyon. Ang batch normalization ay hinahalo sa Conv2d layers sa panahon ng transbersiyon para sa kahusayan.

Paggamit ng 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

Mga Mapagpipilian

Mapagpipilian Paglalarawan
--enginemlx o coreml Para sa WeSpeaker; redimnet2 para sa pangalan; camplusplus para sa CosyVoice cloning
--json Ang output format ng katawan na may buong embeding vector

Ipinangalan na voice identity na may ReDimNet2-B6

Gamitin --engine redimnet2 upang itugma ang isang malinis na tinig sa ibayo ng mga rekording. Ito ay nagbabalik ng isang 192-dimensional normalized embending mula sa hindi bababa sa dalawang segundo ng pagsasalita. Ang nakapirmeng anim-second CoreML window ay umuulit ng mas maikling sampol at center-crops mas mahaba.

Hiwalay na mga puwang sa pagdididiskarga

Ang ReDimNet2 ay para sa pinangalanang voice profile.Ang Diarization ay nagpapanatili ng sarili nitong WeSpeaker emberdings. ReDimNet2, standalone WeSpeaker. Ang mga Community-1 centroid ay hindi maihahambing sa bawat isa.

Gumamit ng mga Kaso

Ang Salita ay Liberasyon

Ihambing ang dalawang audio sampol upang malaman kung ang mga ito ay mula sa iisang tagapagsalita.

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

Pagkilala ng Mangusap

Match isang hindi kilalang audio sampol laban sa isang database ng mga nakatalang speaker embendings. Ang nakatalang tagapagsalita na may pinakamataas na pagkakatulad cosine ang hinulaang pagkakakilanlan.

Paghahanap ng Tinig

I - plane ang koleksiyon ng mga audio recording sa pamamagitan ng pagde - embeding ng tagapagsalita, pagkatapos ay magtanong sa pamamagitan ng isang bagong audio test upang makita ang lahat ng rekording mula sa tagapagsalita ring iyon.

Mahalaga

Ang mga speaker embendings ay pinakamahusay na gumagana sa pamamagitan ng malinis na pagsasalita ng hindi bababa sa 2-3 segundo. Ang napaka-ikling clips o maingay na mga rekording ay maaaring lumikha ng hindi gaanong maaasahang mga empleyings. Isaalang-alang ang pag-play ng mga application. pagpapabuti ng pananalita una para sa maingay na audio.

Modelong mga Pagpapababa ng Pabigat

Huwaran Likod LakiHuggingFace
WeSpeaker-ResNet34-LMMLX°25 MB Aufklarer/WeSpeaker-ResNet34-LM-MLX
WeSpeaker-ResNet34-LMCoreML°25 MB Aufklarer/WeSpeaker-ResNet34-LM-CoreML
ReDimNet2-B6CoreML°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