תרגום מכונה · המקור באנגלית
ייצוגי דוברים
256-article L2-normalized וקטורים באמצעות שימוש WeSpeaker ResNet34-LMאלה מטביעות ללכוד את המאפיינים הקוליים הייחודיים של דובר, ניתן להשתמש בהם לזיהוי, אימות וחיפוש קולי.
ארכיטקטורה
WeSpeaker ResNet34-LM הוא רשת שחיה עמוקה מאומנת ללמידה ייצוגית של הדוברים.
| שלב השלב | פרטים |
|---|---|
| Input | Conv2d (1 עד 32 ערוצים) |
| ResNet34 | [3, 4, 6, 3] בלוקים |
| תגית: Pooling | סטייה סטנדרטית + לאורך זמן |
| פרויקט | קואר (5120 עד 256) |
| Output | L2-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
אפשרויות אפשרויות
| אפשרות | תיאור תיאור |
|---|---|
--engine | mlx או או 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-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