Tłumaczenie automatyczne · Oryginał angielski
Embeddingi mówców
Wyciąg wektorów głośników 256- wymiarowych L2-normalized przy użyciu WeSpeaker ResNet34-LM. Wpisy te rejestrują unikalne cechy wokalne głośnika i mogą być wykorzystywane do identyfikacji, weryfikacji i wyszukiwania głosu.
Architektura
WeSpeaker ResNet34-LM jest głęboką siecią resztkową przeszkoloną do nauczania reprezentacji głośników.
| Etap | Szczegóły |
|---|---|
| Wejście | Conv2d (kanały 1 do 32) |
| ResNet34 | [3, 4, 6, 3] Bloki pozostałości |
| Pooling stanu | Średnie + odchylenie standardowe w czasie |
| Projekcja | Liniowe (5120-256) |
| Wyjście | L2-normalized 256- dim osadzanie |
Rozmiar modelu: ~ 6.6M parametry, ~ 25 MB na dysku.
Cechy Mel
Model wykorzystuje funkcje Mel- frequency w formacie 80- wymiarowej, obliczone za pomocą okna Hamming. log(max(mel, 1e-10)) formuła bez dodatkowej normalizacji. Normalizacja partii jest łączona w warstwie Conv2d w czasie konwersji dla sprawności wnioskowania.
Zastosowanie 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
Opcje
| Opcja | Opis |
|---|---|
--engine | mlx lub coreml dla WeSpeaker; redimnet2 dla nazwy tożsamości; camplusplus dla klonowania CosyVoice |
--json | Format wyjściowy JSON z pełnym wbudowanym wektorem |
Nazwa tożsamości głosu z ReDimNet2-B6
Stosowanie --engine redimnet2 Aby dopasować czysty głos do wszystkich nagrań. Zwraca znormalizowany znormalizowany 192- osadzony z co najmniej dwóch sekund mowy. Naprawione okno 6-sekundowe CoreML powtarza krótsze próbki i center- uprawy dłuższe.
ReDimNet2 jest przeznaczony do nazwanych profili głosowych. Diaryzacja zachowuje własne osadzenia WeSpeaker. ReDimNet2, standalone WeSpeaker i centroidy Community-1 nie mogą być porównywane ze sobą.
Przypadki użycia
Weryfikacja przewodniczącego
Porównaj dwie próbki audio, aby określić, czy pochodzą z tego samego głośnika. Wyciągnij wgniecenia z obu i obliczyć cosine podobieństwa. Wyższy wynik podobieństwa wskazuje większe prawdopodobieństwo tego samego głośnik.
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
Identyfikacja mówcy
Dopasuj nieznaną próbkę dźwięku do bazy danych zakwalifikowanych głośników. Zapisany głośnik o najwyższym podobieństwie cosinus jest przewidywaną tożsamością.
Wyszukiwarka głosu
Zaznacz kolekcję nagrań audio poprzez osadzanie głośników, a następnie zapytaj nową próbką dźwięku, aby znaleźć wszystkie nagrania z tego samego głośnika.
Wzorce głośnikowe najlepiej działają z czystą mową co najmniej 2- 3 sekund. Bardzo krótkie klipy lub głośne nagrania mogą produkować mniej niezawodne wgniecenia. Rozważ zastosowanie zwiększenie głośności Najpierw głośny dźwięk.
Pobieranie modeli
| Wzór | Wstecz | Rozmiar | 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