הערת מחקר יישומי · עיבוד שפה טבעית בעברית · תשבצי היגיון
🧩 נסו את עוזר הפתירה האינטראקטיבי
תקציר
אספנו קורפוס של 362 תשבצי היגיון עבריים (8,249 שלשות של הגדרה, פתרון והסבר) באמצעות גריפת אתר פתרונות קהילתי ותעתוק תצלומי עיתון החסומים בחומת תשלום, ובנינו פותר המשלב הסקת משחקי מילים של מודל שפה גדול (LLM) עם אילוצי רשת קשיחים, לקסיקון של 129 אלף מילים, אחזור מהקורפוס וקונצנזוס מרובה ריצות (best-of-N). בהערכה עיוורת שכבת הרשת אטומה לחלוטין (כל פתרון תקין באורכו), והסכמה בין ריצות היא אות נכונות אמין ב-64 אחוזים. באמצע הפרויקט ריצה אחת השיגה 96 אחוזים בתשבץ שבו כל גרסה קודמת השיגה בין 4 ל-25. חוסר הסבירות עורר ביקורת (audit), שאיתרה את הסיבה בכלי האחזור שבנינו בעצמנו: הלקסיקון נבנה מקורפוס שכלל את פתרונות ההערכה המוחזקים בצד, כך ששאילתות תבנית החזירו את פתרון הזהב בדירוג גבוה ממילים רגילות. התוצאות הללו מבוטלות. לאחר איטום הדליפה (leak) ירד הדיוק הנקי ל-14 עד 25 אחוזים, כלומר כל השיפור לכאורה מארבע איטרציות של פיתוח כלים היה זיהום. אותה ביקורת חשפה פגם שני, ספירות אותיות (enumerations) שתועתקו בסדר מילים הפוך בשישה תשבצים, ובהם שני תשבצי ההערכה. לאחר תיקון שניהם, שתי ריצות שבוקרו באופן בלתי תלוי מגיעות ל-43 אחוזים כל אחת ומתמזגות ל-64 אחוזים, לעומת בסיס של 25 אחוזים. אנו מדווחים על הביטול, על שיטת האיתור ועל שני הדברים ששרדו אותה: גבולות מילים נכונים, וקריסת ההומוגרפים של העברית הבלתי מנוקדת. עמוד זה מתעד את השיטה ופותח כל כשל שנותר לתיקון אנושי.
הגדרה בתשבץ היגיון עברי היא הגדרה מילונית המרותכת לקטע של משחק מילים, ללא סימן פיסוק שיאמר היכן נגמרת האחת ומתחיל השני. הפתרון נכתב ברשת בלי רווחים ובלי אותיות סופיות. תשבץ יורם הרועה בהארץ הוא הקשה בז'אנר: לשון נופל על לשון בצפיפות, הישענות כבדה על פוליטיקה ישראלית, תנ"ך ומוזיקת פופ, והגדרות שתורמים חברי קהילה ששמם נקוב. היעד שלנו: לפתור לפחות 80 אחוזים מהגדרות התשבץ, כל אחת עם הסבר בר הגנה, בלי לעיין בפתרונות ולו פעם אחת.
שתי עובדות מעצבות את התכנון כולו. הפתרונות והסברי הקהל נמצאים באתר אחד; טקסט ההגדרות קיים רק בתוך תצלומי JPEG של העיתון באתר אחר. מסד הנתונים הוא ביסודו צירוף (join) של השניים, לפי תאריך, מספר הגדרה וכיוון.
גרפנו פתרונות והסברי קהל עבור המחבר המרכזי (52 שבועות) וחמישה מחברים פשוטים יותר המשמשים קורפוס ללימוד טקטיקות (310 שבועות) מהאתר הקהילתי. טקסט ההגדרות וגאומטריית הרשת משוחזרים מתצלומי העיתון: גוף הכתבות חסום בפני גורפים אנונימיים, ולכן התמונות אותרו דרך סשן דפדפן מחובר ונמשכו מרשת התמונות (CDN) הציבורית. כל תמונה מתועתקת על ידי מודל ראייה ומאומתת מול הפתרונות, סכום ספירת האותיות של כל הגדרה חייב להיות שווה למספר אותיות הפתרון, בדיקה שתופסת שגיאות תעתוק ואפילו כמה שגיאות הקלדה בפתרונות שמקורם בקהל.
כריית הסברי הקהל מפיקה התפלגות מנגנונים אמפירית. שרשור חלקים (charade) הוא ברירת המחדל; אנגרמות ניתנות לזיהוי כמעט מכני, שכן חומר הגלם מופיע מילה במילה בהגדרה; הגדרות כפולות מתרכזות במשבצות הקצרות. הכלה, היפוך והומופון ממלאים את רוב היתרה.
פענוח של אות בודדת או ראשי תיבות מופיע בתוך כרבע מכלל ההסברים, מכשיר החתימה של המחבר. קרדיטים לתורמים בצורה (עפ"י X) הם שם הקורא ששלח את ההגדרה, לא חלק ממשחק המילים, כיוון שווא מוקדם שתוקן מתוך הנתונים.
הפותר הוא מודל שפה גדול העובד לפי פרוטוקול קבוע, מוגבר בארבעה כלים. הוא קורא רק את ההגדרות, את הרשת ומדריך פעולה שנגזר מהנתונים, לעולם לא את הפתרונות. נדגיש: לא אימנּו ולא כווננו את המודל עצמו. המודל הוא מודל מסחרי קפוא; כל הלמידה בפרויקט מתרחשת סביבו, בקורפוס, בכלים הדטרמיניסטיים (לקסיקון, טבלת תחליפים, אינדקס דו-משמעויות), במדריך הפעולה ובלולאת ההערכה.
הפתרונות ממוקמים ברשת האמיתית: בדיוק אות אחת בכל משבצת לבנה, משבצות כהות נותרות ריקות, וכל הצטלבות חייבת להתיישב. זה לבדו חיסל את כל מחלקת שגיאות האורך, והוא הופך כל הגדרה שטרם נפתרה לתבנית אותיות המסננת מועמדים. כפי שניסח זאת משתמש שסקר את העבודה: בנו את הרשת תחילה, ודאו אות אחת למשבצת, ועברו תמיד להגדרה שכבר יש בה הכי הרבה אותיות.
לקסיקון עברי של 129,574 מילים (hspell בתוספת כל פתרונות הקורפוס) עונה על שתי שאילתות: אילו מילים אמיתיות מתאימות לתבנית הצטלבות, ואילו מילים אמיתיות הן אנגרמות של חלון חומר גלם. האחזור שולף את ההגדרות הפתורות הדומות ביותר יחד עם הסבריהן כדי לזהות מנגנון. לבסוף, N פתירות בלתי תלויות ממוזגות: פתרון ששתי ריצות או יותר מסכימות עליו הופך לעוגן אמין, והרשת מתמלאת עוגנים תחילה.
הערכה עיוורת, לפי תשבץ, בהתאמה מדויקת לפתרון המנורמל. הלולאה עצמה היא הממצא, לא פחות מכל מספר בודד.
| איטרציה | רעיון | תוצאה | |
|---|---|---|---|
| v2 | זהירות, הגדרה תחילה, רשת | 25% / 57% | בסיס |
| v3 | כלי לקסיקון, אנגרמה תחילה | 4% / 14% | נסיגה |
| v4 | קונצנזוס best-of-3 ומשמעת | 39% | בוטל |
| v5 | בדיקת עובדות וקונצנזוס משוקלל ביטחון | 61% / 18% | בוטל |
| v6 | לקסיקון תרבות ומשמעת רשת | 39-96% | בוטל |
| v7 | אותם כלים, דליפה אטומה | 14-21% | נקי |
| v8 | דליפה אטומה וספירות מתוקנות | 43% / 64% במיזוג | נקי ומבוקר |
השורות v3 עד v6 נמחקות מהרישום. ראו סעיף 6.
v3 הוא הכשל המאלף: עצם קיומה של אנגרמה אינו ראיה לכך שהיא הפתרון (לפתרון רב מילים יש סידורים רבים של מילים אמיתיות), ועוגן אחד בטוח מדי מרעיל את הרשת כולה. צוואר הבקבוק הוא כיול ביטחון, לא ייצור מועמדים.
v4 מוכיח את הנקודה על דרך החיוב. מיזוג ריצות בלתי תלויות ניצח כל ריצה בודדת, והסכמה היא אות חזק:
רק כ-40 אחוזים מההגדרות מגיעות להסכמה. כבר בשלב מוקדם, כל סוכן פותר נקב באותו קיר באופן עצמאי:
הגדרות התרבות הארוכות עמדו בפני ערכת הכלים העיוורת. לא הצלחתי לפצח אותן בעיניים מכוסות, בלי בדיקות תרבות שאפשר לאמת.
לכן v5 התיר בדיקת עובדות מבוקרת (מי שר את X, שמו המלא של פוליטיקאי), תוך שהוא ממשיך לאסור על אתר הפתרונות ועל כל חיפוש מילולי של הגדרה. זה נראה עובד: הגדרות תרבות שעמדו בפני כל ריצה עיוורת החלו ליפול, והסוכנים פסלו בצדק כל תוצאה שנראתה כמו מפתח פתרונות של תשבץ. הריצה הבודדת הטובה ביותר הגיעה ל-61 אחוזים. הנתון הזה מבוטל; ראו סעיף 6.
הקיר, מסתבר, זז במקום ליפול. בתשבץ הקשה יותר צנח v5 ל-18 אחוזים, מתחת לבסיס הזהיר. בדיעבד, השונות עצמה הייתה הסימן: ריצות של תצורה אחת נעו בין 18 ל-61 אחוזים משום שנבדלו במידת הישענותן על כלי דולף, לא באיכות ההסקה שלהן. בדיקת עובדות עונה על השאלה "מהי ההפניה הזאת"; היא אינה יכולה לייצר נקודת אחיזה כשלליבת התשבץ אין דרך כניסה קלה. האילוץ המחייב אינו עוד מכניקה או ידע. הוא יכולת האתחול (bootstrappability): האם די הגדרות ניתנות לפיצוח כל אחת בפני עצמה כדי להתניע את מפל ההצטלבויות. זו תכונה של התשבץ, והיא משתנה משבוע לשבוע.
ריצת v6 החזירה 27 מתוך 28 הגדרות נכונות בתשבץ 2026-06-05, תשבץ שבו כל גרסה קודמת השיגה בין 4 ל-25 אחוזים. שום דבר בשיטה לא הצדיק קפיצה בסדר גודל כזה, ולכן התוצאה בוקרה בטרם דווחה.
תמליל הפותר היה נקי. הוא לא ביקר באתר פתרונות, לא קרא קובץ פתרונות, לא פתח תמונת תשבץ. הזיהום היה במעלה הזרם, בכלי האחזור שבנינו. lexicon.py הרכיב את רשימת המילים שלו מאותו קורפוס פתרונות שממנו נוצרה קבוצת ההערכה, כך שכל 28 הפתרונות המוחזקים בצד ישבו בלקסיקון בעדיפות שדירגה אותם מעל מילים מילוניות רגילות. כל שאילתת תבנית על משבצת שטרם נפתרה החזירה את פתרון הזהב סמוך לראש הרשימה. ההנחיה שהחמירה את המצב הייתה שלנו: v6 הורה לפותרים להריץ תמיד שאילתות תבנית על משבצות ארוכות שלא נפתרו, וכך הצביע להם ישירות על הדליפה.
התיקון חוסם כל פתרון של קבוצות הפיתוח וההערכה משכבות הקורפוס והתרבות של הלקסיקון. מילים רגילות שבמקרה הן גם פתרונות נשארות, כפי שהיו נשארות במילון של כל פותר אמיתי, מה שמותיר 8 או 9 מתוך 28 בכל תשבץ: כיסוי הוגן, לא דליפה. במדידה חוזרת לאחר מכן הדיוק הוא 14 עד 21 אחוזים, ברמת הבסיס של 25 אחוזים שלפני הכלים או מתחתיה. ארבע איטרציות של התקדמות לכאורה היו זיהום.
שני פרטים הופכים זאת לראוי לכתיבה. ראשית, כללי הגישה לקבצים קוימו בשלמות והדליפה התרחשה בכל זאת, משום שכלי אחזור שנבנה מאותו קורפוס שממנו נבנתה קבוצת ההערכה הוא וקטור דליפה ששום כלל גישה אינו יכול לתפוס. בקרו את הכלים, לא רק את הסוכן. שנית, אות האיתור לא היה בדיקת אבטחה אלא בדיקה סטטיסטית: פרומפטים זהים המפיקים 39, 50 ו-96 אחוזים אינם מה שיכולת נראית כמוהו. מיומנות אמיתית אינה משלשת את עצמה בין ריצות של אותה תצורה.
ביטול התוצאה לא היה סוף הסיפור. איטום הדליפה הוריד את הדיוק ל-14 עד 21 אחוזים, מתחת לבסיס שלפני הכלים, ואמר בפשטות שארבע איטרציות של עבודה לא הניבו דבר. אבל אותה בחינה שתפסה את הדליפה תפסה גם את הפגם שלהלן, ועם שני התיקונים הנתון הנקי והמבוקר עומד על 43 אחוזים לריצה ו-64 אחוזים במיזוג. הביקורת עלתה במספר מרשים אחד והחזירה מספר אמיתי.
המרדף אחר אותה תוצאה העלה פגם שני. ספירות אותיות של פתרונות מרובי מילים מודפסות בתוך טקסט הנקרא מימין לשמאל, והתעתוק שימר את סדרן החזותי במקום את סדר המילים של הפתרון ב-6 מתוך 50 תשבצים, ובהם שני תשבצי ההערכה. לפותרים נמסר אורך המילה האחרונה במקום שבו נדרש להם אורך הראשונה. בדיקה אוטומטית מדרגת כעת כל כיוון לפי השאלה האם הפיצול המתקבל מניב מילים עבריות אמיתיות, והתשבצים הפגומים תוקנו.
תחבולה אחת יצאה מן הביקורת שלמה, והיא הדבר העברי ביותר כאן. העברית הכתובה משמיטה את התנועות, ולכן מילים נבדלות קורסות לרצף אותיות אחד. שרה היא בעת ובעונה אחת מי ששרה שיר, שרה בממשלה, והשם שרה. רב הוא רב בבית הכנסת, מילה המציינת ריבוי, ושם משפחה. פרס הוא פרס, ממלכת פרס, וראש ממשלה לשעבר. המחבר בונה הגדרות בדיוק על ההתנגשויות האלה, ופותר המסוגל למנות את משמעויותיו של צירוף אותיות יכול לקרוא את מחצית ההגדרה המילונית במשמעות שפני השטח של המשפט מסתירים.
מיפתוח הקורפוס מול מילון, רשימת תרבות ורכיבי שמות של אנשים מניב 4,949 צירופים דו משמעיים, שמתוכם 55 עוקבים במדויק אחר תבנית שרה: תפקיד או פועל שהוא גם שם פרטי. הקורפוס מאשר שהמחבר מנצל אותם. גפן מופיעה כפתרון בשבועות שונים עם שני הסברים שונים, פעם כשם משפחתו של מוזיקאי מוכר, פעם כמשחק מילים על צמח הגן.
הכלל המעשי, כיום הצעד הראשון בכל הגדרה: כשהגדרה נוקבת במקצוע, בתפקיד או בתואר, יש לחשוד שהם עומדים במקום שמו של אדם, או להפך. ריצות נקיות פיצחו כמה הגדרות בדרך הזאת, בלי בדיקה חיצונית ובלי דליפה. זהו רווח קטן ואמיתי, והוא הוצע על ידי קורא שהביט במילה שרה ושאל אם נבנתה רשימת ההתנגשויות מהסוג הזה.
כל הגדרה שנוקדה מופיעה למטה, כשלים תחילה. הרחיבו כל הגדרה כדי לראות מה הפיק כל פותר, את פתרון הזהב, את הסבר הקהל ואת תמונת המקור, ואז רשמו תיקון: תעתוק מתוקן, פתרון זהב מתוקן במקרה של שגיאת הקלדה של הקהל, או פסיקה שהפותר בעצם צדק תחת כינוי מקובל. התיקונים נשמרים בדפדפן שלכם ומיוצאים כ-JSON להזנה חזרה אל מסד הנתונים.
הצינור דטרמיניסטי מקצה לקצה: גריפה, תעתוק עם אימות ספירת אותיות, בניית הרשת ואימות המספור מול ההגדרות המודפסות, זיקוק מדריך הפעולה, פתירה עיוורת, ניקוד, ניתוח, וחוזר חלילה. ערכת כלי הפותר (מאמת רשת, לקסיקון, אחזור, מיזוג קונצנזוס) ומסגרת ההערכה הן סקריפטים פשוטים. הקריאה הכנה: היעד של 80 אחוזים בתשבץ יורם הרועה לא הושג. הדיוק הנקי והמבוקר הוא 43 אחוזים לריצה ו-64 אחוזים במיזוג, לעומת בסיס של 25 אחוזים. הרווח הזה בא משני תיקונים, לא מהכלים שנראו כאילו הם עובדים: תיקון גבולות המילים ההפוכים, וניצול קריסת ההומוגרפים. המחברים הפשוטים יותר, שאין אצלם הקיר הזה, הם המקום הריאלי להדגים בו תחילה שהמערכת עוברת את הרף.