תרגום מכונה · המקור באנגלית

ייצוגי דוברים

256-article L2-normalized וקטורים באמצעות שימוש WeSpeaker ResNet34-LMאלה מטביעות ללכוד את המאפיינים הקוליים הייחודיים של דובר, ניתן להשתמש בהם לזיהוי, אימות וחיפוש קולי.

ארכיטקטורה

WeSpeaker ResNet34-LM הוא רשת שחיה עמוקה מאומנת ללמידה ייצוגית של הדוברים.

שלב השלבפרטים
InputConv2d (1 עד 32 ערוצים)
ResNet34[3, 4, 6, 3] בלוקים
תגית: Poolingסטייה סטנדרטית + לאורך זמן
פרויקטקואר (5120 עד 256)
OutputL2-normalized 256-dim להטביע

גודל מודל: -6.6M פרמטרים - 25 MB על דיסק.

תכונות מל

המודל משתמש בתכונות 80-ממדיות של mel-אנתרופולוגיה עם חלון Hamming. Log Scaleing משתמשות במודולציה פשוטה. log(max(mel, 1e-10)) הנוסחה ללא נורמליזציה נוספת.נרמליזציה Batch ממוזגת לשכבות Conv2d בזמן המרה ליעילות הניתוק.

CLI Usage

# 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

אפשרויות אפשרויות

אפשרותתיאור תיאור
--enginemlx או או coreml WeSpeaker redimnet2 בשם זהות; camplusplus CosyVoice
--jsonפורמט הפלט JSON עם וקטור משולב

שם מקורי: ReDimNet2-B6

שימוש בשימוש --engine redimnet2 כדי להתאים קול נקי על פני הקלטות.זה מחזיר 192-ממדי המוטבע לפחות שתי שניות של דיבור.חלון CoreML קבוע חוזר על דגימות קצרות יותר ו- Center-crops ארוך יותר.

חללים מבודדים

ReDimNet2 נקרא פרופילים קוליים. Diarization מחזיק בבעלות WeSpeaker הטמעתs. ReDimNet2, Standalone WeSpeaker Z, ו Community-1 לא ניתן להשוות אחד עם השני.

שימוש במקרים

תגית: Verification

השוואת שתי דוגמיות אודיו כדי לקבוע אם הן מאותו דובר, פלטה מטביעה הן ומנציח את דמיון cosine.ציון דומה גבוה יותר מצביע על הסתברות גבוהה יותר של אותו דובר.

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

תגית: Identification

התאמת דגימת אודיו לא ידועה נגד מסד נתונים של רמקולים רשומים הטמיעה.דובר המתרשם עם דמיון קוסטין הגבוה ביותר הוא הזהות הצפויה.

חיפוש קולי

אינדקס אוסף של הקלטות אודיו על ידי רמקולים הטמיע, ולאחר מכן שאילתה עם מדגם אודיו חדש כדי למצוא את כל ההקלטות מאותו הדובר.

חשוב

הדוברים המטעים עובדים בצורה הטובה ביותר עם דיבור נקי של לפחות 2-3 שניות. קליפים קצרים מאוד או הקלטות רועשות עלולים לייצר פחות מכשולים אמינים. שקול יישום שיפור speech תחילה עבור אודיו רועש.

דגם Downloads

מודל מודלחזרהגודלHuggingFace
WeSpeaker-ResNet34-LMMLX25 MBaufklarer/WeSpeaker-ResNet34-LM-MLX
WeSpeaker-ResNet34-LMCoreML25 MBaufklarer/WeSpeaker-ResNet34-LM-CoreML
ReDimNet2-B6CoreML25 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