
אנגלית: a או an — הכלל תלוי בצליל, לא באות הראשונה
פוסט קצר של Red Blob Games מפרק בעיה שנראית טריוויאלית ביצירת טקסט: איך בוחרים בין a ל-an. הגורם המכריע אינו האות הראשונה אלא הצליל הראשון של המילה המדוברת, ולכן נדרש כאן מילון הגייה.
הבלוג Red Blob Games פרסם פוסט קצר על בעיה שנראית טריוויאלית עד שמנסים להפוך אותה לאוטומטית: איך לבחור בין a ל-an בטקסט מיוצר.
הכלל נוגע לצליל, לא לאיות
הגישה המתבקשת היא לבדוק אם האות הראשונה היא תנועה, אבל כך מתקבל an unicorn. הכלל האמיתי חל על המילה המדוברת: unicorn מתחילה באות תנועה אבל בצליל עיצור — Y ב-cmudict ו-/j/ באלפבית הפונטי הבינלאומי — ולכן היא מקבלת a. המקרה ההפוך הוא hour, שמתחיל באות עיצור אך בצליל תנועה (cmudict AW, IPA /aʊ/), ולכן מקבל an.
מכאן שמימוש נכון של הכלל דורש מילון הגייה ולא בדיקת מחרוזת — ומשם החל הפרויקט.
יום אחד עם 32,455 מילים
המחבר הוריד את cmudict והשווה בין כלל הצליל הראשון לכלל האות הראשונה הנאיבי. הניסיון הראשון הניב ערימה גדולה של אי-התאמות, ולכן הרשימה צומצמה במכוון: שמות פרטיים (3,133), אותיות בודדות (26), הגיות משניות (9,114, ובהן ההגייה האמריקאית והבריטית של herb), סימני פיסוק כמו שייכות וקיצורים (8,574), ראשי תיבות (10) ושני מקרים שהוסרו ידנית. עוד 81,852 ערכים הוצאו אף הם.
נשארו 32,455 מילים, ומהן, להפתעת המחבר, רק 129 נזקקו לחריגים. קל לזהות אותם: מילים שמתחילות ב-eu וב-ew כמו eucalyptus ו-ewe, משפחת heir, רוב קבוצת honor ו-honest, hour, once ו-one, וזנב ארוך של מילים ב-u — unicorn, uniform, unique, union, university, urine, useful, usual, uranium, utensil, uterus, utility, utopia ואפילו yttrium.
לעמוד הפרויקט מתלווים שני תרשימים ב-d3: האחד מראה אם שתי האותיות הראשונות של מילה מספיקות להכרעה, והשני כמה אותיות צריך לבדוק. התשובה לשאלה הראשונה חד-משמעית: לא, והתרשים מלא בענפים אדומים שבהם ההגייה מתחלפת בין תנועה לעיצור.
כללים בכתב יד במקום עץ החלטות
המחבר קיווה לצמצם את החריגים לעץ החלטות מינימלי, מתוך השערה שהבעיה קשורה למזעור DFA, אבל לא הצליח בכך וכתב את הכללים ידנית: eu ו-ew נחשבים לצלילי עיצור, heir, homage, hones ו-hono לצלילי תנועה, עם מקרים מיוחדים ל-herb ולנגזרותיו.
בפוסט מופיעה גם הערה גלויה על אופן כתיבת הקוד. מודל שפה לא היה מעורב, אם כי בדיעבד, לפי המחבר, כדאי היה להשתמש בו: קוד חד-פעמי שנכתב כדי לענות על שאלה אחת אינו חייב להיות נקי או לתחזוקה, אלא רק נכון. לדבריו, המודל היה יכול לפרסר את cmudict ולבנות את התרשימים ב-d3.js, וכך לפנות זמן לאלגוריתם ניתוח trie טוב יותר.
SiTech — פיתוח אתרים בכוח ה-AI
אנחנו בונים אתרים מהירים ומודרניים ומשלבים AI בתהליכי עבודה אמיתיים. יש לכם פרויקט או שאלה? נשמח לעזור.