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 |
|---|---|
| Ilagay | Conv2d (1 hanggang 32 channel) |
| ResNet34 | 3, 4, 6, 3] na mga bloke sa pag - iral |
| Lumulutang na mga Tuka | Kahulugan + pamantayang paglihis sa paglipas ng panahon |
| Proyekto | Linear (5120 hanggang 256) |
| Ilabas | L2-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 |
|---|---|
--engine | mlx 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.
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.
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 | Laki | 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