הטמעת זיהוי דובר עם ECAPA-TDNN ו-FAISS

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

תחומי פיתוח AI

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1112

מדוע זיהוי הדובר נכשל בזרימה

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

במקטע רציף ה-embeddings של שני קולות מתערבבים, ודיוק זיהוי הקול יורד ככל שהאמירה קצרה יותר. בקטעים ארוכים הסף עוד מחזיק מעמד, על «כן», «אה-הא» והפרעות — הוא מתפרק: המערכת או מדביקה שני אנשים לאחד, או מפצלת אחד לשניים.

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

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

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

מה נותן היישום: אפקטים במספרי התהליך

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

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

אוטומציה של ניתוח ההקלטות מסירה את התלות במספר העובדים: זמן עיבוד הארכיון מפסיק להיות תלוי במספר האנשים. בעבר הקשיבו למערך בזמן אמת ומתחו אותו על פני שבועות; כעת ההקלטה נחתכת למקטעים ומחושבת במקביל — ריצת לילה סוגרת נפח שבעבר נותח במשך חודשים.

עמידות לרעש קובעת היכן האוטומציה בכלל ישימה. ה-embeddings של ECAPA-TDNN נבנים לפי ייצוג קומפקטי של הקול, ולא לפי מאפיינים מוחלטים, ולכן ערוץ טלפוני, רקע משרדי והקלטה מרשמקול אינם שוברים את ההשוואה — בעבר דווקא התנאים האלה יצרו את עיקר השגיאות בהאזנה ידנית.

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

מצבי עבודה: קונטור מקומי, ענן, היברידי

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

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

המהנדסים שלנו מחשבים את וקטור הקול במודל אקוסטי ממשפחת ECAPA-TDNN, ואת החיפוש מבצעים לפי אינדקס FAISS. אינדקס של עשרות אלפי קולות תופס מעט מקום, ולכן בין הקונטורים זול יותר להעביר אותו מאשר את ההקלטות עצמן — דווקא זה הופך את הסכמה ההיברידית לעובדתית, ולא לפשרה.

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

כיצד אנו מיישמים זיהוי דובר

זיהוי הדובר לעיתים רחוקות נתקל במודל — לעיתים קרובות יותר באיכות הארכיון. הקלטות עם מוזיקה, חפיפת אמירות ומיקרופונים שונים נותנות וקטורי קול בלתי ניתנים להשוואה, ולכן תחילה מביאים את הנתונים לצורה שמישה, ורק אחר כך מכווננים את ההשוואה.

  1. ביקורת ארכיון האודיו. מחשבים משך, ערוצים, חלק הדיבור, רמת הרעש והחפיפות — מיד רואים אילו רצועות מתאימות כאמות מידה ואילו יהיה צורך לנקות או להוציא.
  2. סכמת הפתרון. מקבעים את התרחיש — בדיקה «האם זה אותו אדם?» או חיפוש בבסיס קולות — ואת השיעור הרצוי של התראות שווא והחמצות. וקטורי הקול מחשבים במודל מאומן מראש, הקרבה — לפי אינדקס וקטורי, בלי סריקה של כל הארכיון.
  3. סימון הקלטות אמת מידה. לכל דובר אוספים כמה מקטעים נקיים מתנאי הקלטה שונים, מסירים חפיפות ומחשבים וקטור קול ממוצע.
  4. סף קבלת ההחלטה. בונים עקומת שגיאות על נתונים מסומנים ובוחרים נקודה שבה מחיר ההחמצה וההתאמה השגויה מתאים ללקוח; עבור חיפוש בבסיס הסף שונה מבדיקה אחד-לאחד.
  5. בדיקה על מדגם נפרד. בודקים על הקלטות שלא נכנסו לא לאמות המידה ולא לבחירת הסף, כולל מיקרופון וערוץ תקשורת אחרים, — כך רואים איכות אמיתית, ולא מותאמת.
  6. מסירה ותמיכה. מוסרים את האינטגרציה, את התקנון להוספת קולות חדשים ואת התיעוד לספים; בהמשך עוקבים אחר סחיפת המדדים בעת החלפת ערוצי הקלטה.

מה נשאר אצלכם לאחר מסירת הפרויקט

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

  • קונפיגורציות עובדות: ספי הפעלה, גודל חלון הניתוח, פרמטרי הסגמנטציה — מותאמים לסביבה שלכם, ולא לעמדת בדיקה.
  • סכמת עיבוד ההקלטות: המסלול מהעלאת האודיו וסימון הערוצים ועד חישוב ייצוגי הקול והכתיבה לאינדקס החיפוש, בציון היכן נשמר המקור ונתוני הביניים.
  • מדיניות גישה לנתוני הקול: מי ובאיזה בסיס ניגש לביומטריה, כיצד מנוסחת ההסכמה, כמה זמן נשמרת ההקלטה וכיצד היא נמחקת לפי בקשה.
  • תקנון תפעול: סדר הוספת קולות חדשים, עדכון המודל ובדיקת האיכות לאחר כל שינוי — עם צ'ק-ליסט לשחרור.
  • תיעוד לפריסה ולנסיגה: תיאורי הסביבה, מיגרציות האינדקס והוראות להחזרת הקונפיגורציה הקודמת בלי לאבד את הנתונים שנצברו.
  • סט הקלטות בדיקה ומדדים: דיוק על המדגם שלכם ושיעור התראות שווא — לפיהם רואים ירידה בביצועים, ולא ניחושים.

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

מהשטח: מוקד שירות ויתר על הצלבה ידנית

לפני: הצלבת הקלטות לפי שמיעה

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

על ההצלבה הושקעו כ-120 שעות עבודה בחודש, ניתוח פנייה שנויה במחלוקת ארך שניים-שלושה ימים, ובמשמרות שיא חלק מהזוגות פשוט לא נבדקו — דווקא שם הצטברו השגיאות.

אחרי: embeddings וסף התאמה

הפקנו מההקלטות embeddings קוליים במודל ECAPA-TDNN וחיפשנו התאמות בחיפוש וקטורי לפי קרבה קוסינית. את הסף כיילנו על מדגם מסומן של הקלטות של המוקד עצמו: קיבלנו כיוונון שבו המערכת סוגרת בביטחון זוגות ברורים, ומקרים גבוליים מוסרת למפעיל כשנויים במחלוקת.

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

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

מה לעשות אם ארכיון הקולות כבר נצבר?

ארכיון שנצבר הוא משאב, ולא בעיה: לפיו רואים תנאי הקלטה אמיתיים, ולא היפותטיים. השאלה היא רק כמה חומר שמיש יש בו. חלק מההקלטות יימצאו מטבע הדברים ברעש, עם חפיפת דיבור, קודק טלפוני או אמירות קצרות מדי — חומר כזה לא כל כך עוזר, אלא מעוות את ההערכה.

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

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

תוצאת הפיילוט היא לא דוח, אלא החלטה: אילו מקורות להשאיר, אילו להשלים, היכן העיבוד המקדים עוזר והיכן כבר לא. חלק ניכר מהארכיון מניב בדרך כלל את עיקר התועלת, ואת היתר מהיר יותר להקליט מחדש לפי תקנון חדש מאשר לנקות.

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

ספקות טכניים: רעש, אמירות קצרות, זיופים

ההתנגדויות לזיהוי דובר חוזרות מפרויקט לפרויקט: «בחדר רועש הכול יישבר», «הלקוח מדבר שתי שניות», «ומה אם מסנתזים את הקול».

כל אחת מהן אנחנו בודקים על הקלטות מסומנות של הלקוח, ולא סוגרים בהבטחה: ה-embedding של הדובר מחושב פעם אחת, ומכאן האיכות נקבעת לפי כמה אמות מידה, באיזו איכות ובאיזה ערוץ נאספו.

כמה הקלטות אמת מידה צריך לאדם?

לפחות שלושה-חמישה מקטעים של כמה שניות מסשנים שונים: ימים שונים, מיקרופונים, קצב דיבור. אמת מידה אחת נותנת פיזור גדול, והסף נאלץ להיות נמוך — ואז אמירות של אחרים מתחילות להידבק אליו. על כמה הקלטות ההערכה מתמצעת, הגבול בין «שלנו» ל«זר» נעשה רחב ויציב יותר.

מה קורה בעת החלפת מיקרופון או ערוץ תקשורת?

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

מה עם רעש ודיבור חופף?

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

כיצד מתנהגת השיטה באמירות קצרות?

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

האם סינתזת קול וזיופים עוקפים את המערכת?

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

נדון במשימה ונחזור עם תוכנית יישום

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

  • תרחישי שימוש. היכן בדיוק מבדילים בין קולות: דיאלוגים של נציגים במוקד, הקלטת ישיבות, בקרת כניסה. כל תרחיש קובע דרישות משלו לאורך המשפט ולעמידות לרעש.
  • נפח הנתונים. כמה שעות אודיו זמינות ובאיזו צורה: ערוץ אחד או הקלטה ממוקססת, האם יש חפיפות דיבור, עד כמה האות נקי.
  • סימון. האם יש תוויות דוברים ומי סימן אותן. אם אין סימון — מקצים שלב נפרד להכנתו ומעריכים את עומס העבודה שלו.
  • מדד היעד. איזה אחוז שגיאות מקובל ומה קריטי יותר: איחוי שגוי של שני קולות לאחד או פיצול שגוי של אחד לשניים.
  • מגבלות התשתית. היכן צריכים להיות מחושבים ה-embeddings הקוליים — בקונטור שלכם או בחיצוני, ואילו משאבים הוקצו לעומס.
  • נקודות אינטגרציה. לאן מוסרים את התוצאה: ל-CRM, למערכת הקלטת שיחות, לחיוב או לשירות עצמאי של הלקוח.

לאחר שנקבל זאת, נחזור עם תוכנית: שלבים, תוכן של כל אחד, מה נדרש מכם בשלב מסוים ואיזו תוצאה נחשבת לקבלה. תארו את המשימה — נחזור עם הערכה ותוכנית יישום.