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.

EtapSzczegóły
WejścieConv2d (kanały 1 do 32)
ResNet34[3, 4, 6, 3] Bloki pozostałości
Pooling stanuŚrednie + odchylenie standardowe w czasie
ProjekcjaLiniowe (5120-256)
WyjścieL2-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

OpcjaOpis
--enginemlx lub coreml dla WeSpeaker; redimnet2 dla nazwy tożsamości; camplusplus dla klonowania CosyVoice
--jsonFormat 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.

Oddzielne miejsca osadzania

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.

Ważne

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órWsteczRozmiarHuggingFace
WeSpeaker-ResNet34-LMMLX25 MBaufklarer / WeSpeaker-ResNet34-LM-MLX
WeSpeaker-ResNet34-LMCoreML25 MBaufklarer / WeSpeaker-ResNet34-LM-CoreML
ReDimNet2-B6CoreML- 25 MiBaufklarer / 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