תוכנית פעולה ליצירת חפיסות מפרוייקט „קומון ווייס”
Common Voice הוא אחד מהמיזמים שמראים בבירור את הגדוּלה של קוד פתוח, תוכנה חופשית, תוכן חופשי ושיתוף פעולה וולנטרי בין א·נשים מרקעים שונים כדי להרבות טוב בעולם. בגדול המטרה שלו היא כזאת: ליצור מאגר חופשי גדול של הקלטות של משפטים במגוון שפות, כדי לאמן עליו מנגנוני לימוד מכונה בתחום של זיהוי קולי. חלק מהיופי של מיזמים חופשיים שזמינים לכולן·ם, משוחררים תחת רשיונות פתוחים, הוא שנוצרים להם שימושים שונים מהשימוש המקורי שיועד להם. אם במקור המטרה היתה ליצור dataset שמיועד לאמן מחשבים לזהות דיבור, אנחנו נשתמש בו כדי לאמן א·נשים להבין שפה על ידי הפקת כרטיסי לימוד לאנקי.
מה היתרונות של השימוש במאגר של Common Voice?
- רשיון חופשי. המאגר משוחרר ברשיון CC0, מה שאומר שהוא נמצא ברשות הציבור ואפשר להשתמש בו בלי לחשוש מחוקי „זכויות יוצרים”.
- מגוון גדול של שפות, 60 (!!!) נכון לכתיבת שורות אלה. מלבד השפות שקל מאוד להשיג חומרי לימוד עבורן, יש במאגר גם שפות שפחות שפר מזלן, כמו באסקית, פריזית, סחה ו־Kinyarwanda. גם מקומה של וולשית יקירתנו לא נפקד, כמובן.
- מספר גדול משפטים. אמנם לא בכל השפות מדובר באותו עושר, אבל ברבות מהן יש כמות מפתיעה של משפטים.
- מגוון קולות. א·נשים רבות·ים תרמו את קולן·ם, מה שאומר שנזכה לשמוע מבטאים וצורות דיבור שונות. יש מטא־דאטה, כך שלפחות בחלק מהמקרים נוכל לדעת מעט פרטים על הניב של הדובר·ת. משפטים רבים מוקראים על ידי יותר מאדם אחד.
מה החסרונות?
- המשפטים חד־לשוניים, כלומר ללא תרגום לשפה אחרת. זה לא כזה נורא עבור מי שיש להן·ם בקיאות מספיקה בשפה הנלמדת או שהשריר הבלשני של לימוד השפות מספיק מפותח אצלהן·ם. כאן היתרון של טטואבה מובהק.
- לא כל המשפטים מוקראים באותה איכות, הן מבחינת האיכות הטכנית של ההקלטה והן מבחינת הארטיקולציה. כמו החד־לשוניות, שמחייבת אותנו לפענח את המשפטים הנלמדים בעצמנו, גם כאן אפשר להוציא מתוק מעז: השימוש בשמע הזה — שלא הופק באולפן על ידי מי שזה מקצוען·ם אלא באמצעים ביתיים על ידי א·נשים מן השורה — דווקא מפגיש אותנו עם השפה בצורתה החיה. מבחינה מסויימת, אם כך, זה אימון הרבה יותר טוב בהבנה של שיח טבעי מאשר הקלטה מקצועית.
- חלק מהמשפטים כתובים בשפה ארכאיתבחלק מהמקרים לפחות, הסיבה היא שקצירת משפטים ממקורות כתובים שפגו זכויות היוצרים עליהם פשוטה יותר משפטית., ובאופן כללי אין אחידות מבחינת המשלב וצורת הלשון. כאן צריך להזהר, כי אמנם מגוון כאמור זה נהדר, אבל אם לא נדע לשייך צורות למשלבים המתאימים נצא עם סלט גדול. הפתרון הוא להחשף להרבה קלט ממקורות שונים, וכך נדע איזה צורות דיבור מתאימות לסיטואציות השונות ומאפיינות דוברות·ים שונות·ים.
- חלק מהמשפטים מוקראים המון פעמים, עשרות. הסיבה לריבוי היא שזה משהו שעוזר למנגנוני הלימוד האוטומטיים עבור המטרה המקורית. מבחינתנו, זה טוב ונחמד אולי שיש לנו שתי גרסאות לאותו המשפט, אבל עם שלושים אין לנו מה לעשות ונצטרך לזרוק את רובן בהפקת החפיסה לאנקי.
לסיכום, גם אם הוא לא מושלם, מדובר במאגר חשוב שיכול להועיל מאוד ללומדות·ים, במיוחד בשפות שחומרי לימוד עבורן פחות זמינים.
בדף הזה אשרטט דרך להפיק חפיסות לימוד מהמאגר, בדומה לאלה שהפקתי מטטואבה. לא מימשתי עדיין את דרך המתוכננת כי כרגע אין לי זמן לעשות את זה (יש לי איזה דוקטורט לסיים). בחרתי לכתוב את הדרך כאן בשביל שתי מטרות: בשבילי (שלא אשכח…) ובתור שלד לפוסט שמתאר בפירוט את הדרך עם מימוש של סקריפטים.
המטרה שלי היא לבנות חפיסות כמעט לכל השפות במאגר, גם כאלה שאני לא לומד, לרווחת הכלל, כמו שעשיתי עם טטואבה.
נרצה לעשות אוטומטיזציה לכמה שיותר מהתהליך. יש 60 שפות, מה שאומר שאם נשקיע חמש דקות של עבודה ידנית פר שפה, נצטרך לבזבז חמש שעות רק על הצדדים הידניים.
1. 💬 רשימת השפות והורדה
כדי לדעת מראש איזה שפות נרצה לעבד ומה הקודים שלהם בשיטת ISO 639-1, שהמיזם משתמש בה, נוכל להשתמש בקובץ ה־json
כאן.
ננקה את הקלט בעזרת עורך טקסט או החלפה אוטומטית עם sed
ונקבל רשימה של קודים, קוד לשורה.
בשלב הזה יכול מאוד להיות שנרצה להסיר מהרשימה שפות שקל להשיג חומרי לימוד עבורן ושהקובץ שלהן גדול מדי להורדה ועיבוד. אנגלית, אני מסתכל עליך, מה זה ה־56 ג׳יגה האלה? גם לשפות אחרות, כמו גרמנית, ספרדית וצרפתית, יש קבצי ענק ולא חסרים חומרים קיימים ללימודן.
את ההורדה עצמה נצטרך לעשות ידנית. אמנם אפשר לרמות את האתר עם MechanicalSoup, אבל הטרחה שבלכתוב סקריפט בשביל זה מול להוריד אחד־אחד כמה עשרות קבצים לא שווה את זה. הסיבה היא שהאתר לא נותן פשוט להוריד את הקבצים לפי כתובת (ואז היינו יכולות·ים להריץ wget
על הכל) אלא כולל מחרוזת אותנטיפיקציה פר הורדה.
עכשיו נפרוש את כל הקבצים. את זה כבר נוכל לעשות באופן אוטומטי עם לולאת for
ב־shell.
2. 🤖 עיבוד והפקה
הקובץ שנרצה לעבוד איתו הוא validated.tsv
, שכולל הקלטות שעברו אישור של הקהילה: שני 👍 לפחות ולא יותר משני 👎. יכול להיות שיש קבצים טובים שלא זכו לזה, אבל אנחנו עובדות·ים כאן עם עודף הקלטות, לא עם חוסר.
העמודה הראשונה לא שימושית לנו, ונוכל להסיר אותה בעזרת awk. נריץ סקריפט פייתון על הקובץ ונעזר בספריה csv
כדי לפענח אותו. מה שנרצה לעשות עכשיו הוא לעבור הקובץ ועבור לבחור הקלטה או שתיים (או יותר, למרות שזה נראה לי לא שימושי) שיש להן הכי הרבה הצבעות חיוביות והכי פחות שליליות (אפשר לחסר את השליליות מהחיוביות). אם יש כמה שורות מועמדות שקיבלו את אותו הציון, נבחר באקראי.
בעזרת genanki נפיק את החפיסה.
השדות בכרטיס יהיו:
sentence
. המשפט בצורתו הטקסטואלית.audio
. שמות קבצי הקול שנבחרו, אחד אחרי השני בצורה[sound:FILENAME]
. את קבצי המדיה שנשמש בהם נוסיף ל־media_files
באובייקט ה־Package
שלנו.שדות של המטא־דאטה:
age
,gender
,accent
. נרצה שהם יוצגו בכרטיס, כך שיהיה לנו מידע עוטף. השדות של age ו־gender פחות מעניינות, אבל accent חשובה.- את
locale
נרצה לשנות לשם השפה המתאים ב־Wiktionary, בשביל שנוכל להשתמש בשדה הזה באופן אוטומטי בסקריפט שיאפשר לנו לחפש מילים במילון. זה חשוב שבעתיים כשאין לנו תרגום למשפטים. את ההמרה נעשה בעזרת dictionary שנכין בעזרת הדף הזה. - שדות עבור MorphMan. הפעם לא אטרח, אלא אשאיר אותם רקים ואת הכרטיסים ללא סדר, ואסביר בדף ב־AnkiWeb שכדי שהכרטיסים יהיו מסודרים בסדר מועיל צריך להשתמש ב־MorphMan.
לכל רשומה יהיו שני כרטיסים: אחד להבנת הנקרא ואחד להבנת הנשמע. פשוט ואפקטיבי.
3. ⭐ העלאה ל־AnkiWeb
כאן אני חושש שאין ברירה אלא לייבא את קבצי ה־apkg
ידנית ולשתף אותם ידנית ב־AnkiWeb. התיאור יהיה עם העתק-הדבק, בהתאמת שם השפה, ויכלול:
- רקע קצר על הפרוייקט, והפניה לעמוד שמסביר על התהליך של הפקת החפיסות.
- פסקה על השפה מוויקיפדיה באנגלית ובשפה עצמה. הסיבה היא כדי להגדיל את הסיכוי שהחפישה תופיע בתוצאות החיפוש.
זהו, עכשיו רק צריך לסיים את הדוקטורט ולממש את מה שכתבתי כאן. החלק הראשון במשימה מורכב, אבל השני לא בשמיים.