WER סופר שם שגוי, מספר שגוי ו„לא” שנעלם באותו משקל כמו מילה שנשמטה בלי נזק. שפטו מערכת תמלול לפי השגיאות שהיא תופסת ואם אפשר לראות את התיקונים שלה, לא לפי המספר הראשי שלה.
שיעור שגיאות מילים (Word error rate, WER) הוא מדד הסטנדרט להערכת זיהוי דיבור. לוקחים תמליל ייחוס שאדם בדק, מיישרים אליו את הפלט של המכונה מילה אחר מילה, וסופרים שלושה סוגים של טעויות: החלפות (מילה שגויה), הוספות (מילה שלא נאמרה) והשמטות (מילה חסרה). מחברים את כולן ומחלקים במספר המילים שבתמליל הייחוס.
WER = (החלפות + הוספות + השמטות) / מספר המילים בתמליל הייחוס
היישור לא נעשה לפי העין. שני התמלילים מיושרים לפי מרחק עריכה מינימלי (מרחק לבנשטיין, המיושם על מילים ולא על אותיות): מבין כל הדרכים להתאים את הפלט לייחוס, המודד בוחר בזו שדורשת את מספר העריכות הקטן ביותר וסופר אותן. מכיוון שהוספות נספרות, והמכנה הוא אורך הייחוס, ה־WER יכול לעבור 100 אחוזים: מודל שממלא דקה שקטה בטקסט מקבל ציון גרוע יותר ממודל שלא כותב דבר.
נניח שהייחוס הוא „אנחנו נפגש עם ד״ר אוקפור בשעה תשע ביום חמישי”, תשע מילים, והמכונה כותבת „אנחנו נפגש עם רופא אחר בשעה תשע ביום שלישי”. זה שלוש החלפות (ד״ר, אוקפור, חמישי) מתוך תשע מילים: WER של 33 אחוזים. שני שלישים מהמילים נכונות, ובכל זאת אתם בפגישה הלא נכונה, ביום הלא נכון. אם רק יום חמישי היה שגוי, הציון היה 11 אחוזים. גרסה שבה כל המילים נכונות, אבל נוספה „אממ” שאף אחד לא אמר, גם היא מקבלת 11 אחוזים, כי הוספה נספרת בדיוק כמו החלפה.
לפני הספירה, שני הטקסטים בדרך כלל מנורמלים, והבחירות שנעשות כאן משנות את הציון לא פחות מהמודל. האם „ד״ר” ו„דוקטור” זו אותה מילה? האם „תשע” ו„9” זהים? האם אותיות גדולות וסימני פיסוק נספרים? השוואה קפדנית תסמן את „ד״ר” מול „דוקטור” כהחלפה. רוב הציונים שמתפרסמים הופכים הכול לאותיות קטנות, מסירים סימני פיסוק וכותבים כל מספר בצורה אחת, כמילה או כספרה, לפני ההשוואה. לכן מספר של ספק תלוי בנרמול שאי אפשר לראות. שפות שאין בהן רווחים בין המילים, כמו סינית, יפנית ותאילנדית, אין להן גבול מילה נקי לספירה, ולכן מודדים אותן לפי שיעור שגיאות תווים (CER): אותה נוסחה, מיושמת על תווים.
שני דברים נובעים מכאן. ראשית, WER של 5 אחוזים הוא מילה אחת מתוך עשרים, שמסתכמת בכמה מאות מילים בשיחה של שעה. לשם השוואה, תמללנים אנושיים מוזכרים לעיתים קרובות בשיעור של בערך 4 עד 5 אחוזים בדיבור שיחתי, ותוצאה מצוטטת הרבה משנת 2017 על קורפוס השיחות הטלפוניות Switchboard העמידה מכונה על כ־5.1 אחוזים, אם כי שני הנתונים תלויים באודיו ובכללי הניקוד. שנית, המספר תלוי לחלוטין באודיו הבדיקה: דיבור מוקרא ונקי נותן מספר אחד, ופאנל רועש עם מבטאים ודיבור חופף נותן מספר אחר לגמרי. WER המוצג בכותרת מתאר את קבוצת הבדיקה של הספק לא פחות ממה שהוא מתאר את המערכת של הספק.
זו הספירה. מה שהיא משאירה בחוץ הוא מחיר כל שגיאה לקורא.
WER מתייחס לכל מילה כשווה. הקוראים לא:
כל אחד מאלה הוא שגיאה אחת או שתיים בעמודת ה־WER. בעמודת הקורא הן נעות מכלום ועד ישיבה אחרת ביום אחר. לכן השאלה היא לא רק „מה שיעור השגיאות”, אלא גם „אילו סוגי שגיאות, ומה תופס אותן”.
כמה שכבות תופסות את מה שהזיהוי מפספס, וכל שינוי נרשם כך שאפשר לבדוק אותו ולבטל אותו. בתמלול בשידור חי זה קורה בזמן שהטקסט עדיין מגיע: כל שורה מופיעה קודם כטיוטה שעדיין עשויה להשתנות, ורק אחר כך נעשית סופית (השהיית תרגום חי, מוסבר מסביר למה).
יש טעויות שמתאימות לצליל אבל לא למשפט, כמו „הם” במקום „היא” כשהמשפט מדבר על אישה. אפשר לתפוס טעויות כאלה מההקשר, ותיקון מגיע לקוראים כעדכון גלוי (transcript.amended ב־API), לא כשכתוב שקט. ההקשר טוב במילים שהמשפט יכול לחזות. הוא חסר אונים מול אלה שהוא לא יכול.
שמות ומונחים מקצועיים הם השגיאות שההקשר לא מתקן, כי שם מופיע לעיתים רק פעם אחת, וסביבו אין שום דבר שממנו אפשר לנחש אותו. תסריט ייחוס פותר את זה: מזינים למערכת מראש את הדיבור, השקפים או רשימה של שמות ומונחים, והמילים שלהם גוברות על מה שהמנוע שמע בצורה שגויה. במהלך ההקלטה התסריט עוקב אחרי התמליל כמו טלפרומפטר, כך שהמנחה רואה עד כמה המנוע הגיע. תסריט מכסה את המילים שאפשר לחזות; אודיו רועש ומבטאים מייצרים את השאר.
יש טעויות שרק אדם באולם יכול לראות. תיקונים ידניים מאפשרים למנחה לכתוב מחדש כל מילה או שורה בזמן שהתמלול עדיין חי, וכל מאזין בשידור רואה את השינוי. המערכת מצביעה על המועמדים הסבירים: מילים שהמנוע לא היה בטוח בהן יכולות להיצבע ולקבל קו תחתון, והמנחה יכול לעבור על הקטעים הלא ודאיים אחד אחד, במקום לקרוא שוב את כל התמליל. דרך ה־API, GET /v1/recordings/{id}/corrections מציג את התיקונים של הקלטה, ו־POST /v1/corrections/{id}/revert מבטל תיקון אחד; ראו את מדריך ה־API. אבל גם אדם באולם לא יכול לתקן שורה שאף אחד לא שמע.
השכבה האחרונה מקבלת שחלק מהאודיו אי אפשר לשחזר. כששורה מקבלת ציון מתחת לסף הביטחון של התמלול (confidence.hideBelow, 0.60 כברירת מחדל), המאזינים רואים במקומה „אודיו לא ברור” במקום ניחוש, והשורה לעולם לא נקראת בקול. הקוראים מאבדים שורה; הם לא מקבלים שורה מומצאת.
אותן שאלות שעיצבו את השכבות האלה חלות על כל טענת דיוק של ספק, כולל שלנו.
רשימת בדיקה קצרה לקריאת כל טענת דיוק:
VocalStack לא מפרסם נתון WER פנימי, מהסיבה הראשונה לעיל: הוא היה מתאר את קבוצת הבדיקה שלנו, לא את האודיו שלכם. אנחנו מודדים דיוק ברציפות. כשאנחנו משווים מערכות אחרות, אנחנו משתמשים במדדים עצמאיים שפורסמו ובנתונים שפרסמו הספקים, ולעולם לא בבדיקות פרטיות. השאר מוכרע על ידי האודיו שלכם.