
בניתי AI להשבת הפלסטיק השחור שממחזרים משליכים לפח. המסווג היה החלק הקל.
פיח פחמני (Carbon black) בולע קרינה לכל רוחב תחום האינפרא-אדום הקרוב (NIR), כך שמגש פוליפרופילן שחור הנע על גבי רצועת מסוע שחורה מהווה חלל נטול אות לחלוטין עבור כל ממיין אופטי בטכנולוגיית NIR בשוק — סוג המכונות כדוגמת TOMRA Autosort, Machinex ו-Pellenc שמפעילות את קווי המיחזור ברחבי העולם. הממיין כלל אינו מסוגל לראות את החפץ, ולכן הוא נופל אל השאריות ומשם למטמנה. בהתאם לזרם הפסולת, בין 3 ל-15 אחוזים מהפסולת הם פלסטיק שחור שאובד בדיוק באופן הזה, ובמתקן בעל קיבולת של 50,000 טונות בשנה עם 5 אחוזי פלסטיק שחור מדובר בכ-2,500 טונות בשנה של חומר בר-השבה — הזדמנות בהיקף של 2.2 עד 2.7 מיליון אירו בשנה (מחקר WP45, 2026). ביליתי חלק ניכר מתהליך הפיתוח הזה בהנחה שהבעיה המעניינת היא להפוך את הפלסטיק הזה לנראה. היא אכן הייתה כזו, למשך כשבוע. ואז הופיעה הבעיה האמיתית, והיא כלל לא הייתה המודל.
ההדגמה שבניתי נקראת Assay, והיא זמינה בכתובת https://veriprajna.com/demos/materials-recovery-ai. עליי לומר מה אמיתי בה לפני שאומר כל דבר אחר, מכיוון שכל הדגמה בתחום הזה מתפתה לטשטש את הגבול. הספקטרום סינתטי, מיוצר על ידי אמולטור מבוסס פיזיקה שמחליף חיישן Specim FX50, והפולט הפנאומטי הוא stub מתועד. מה שאמיתי הוא המסווג, השערים, בדיקת המדיניות ומספרי ההערכה (eval). בניתי את החלק הסינתטי בכוונה תחילה, משום שהמקרה שמכריע אם באלה תימכר הוא מקרה מעורפל, מזוהם, שבו יש PVC בזרם — מקרה שלכידה נקייה במעבדה כמעט לעולם אינה מספקת.
השבוע שביליתי בניסיון לנצח במרוץ הלא נכון
פתחתי את הפיתוח הזה כפי שאני מניח שרוב האנשים היו עושים, מתוך התייחסות אליו כאל מרוץ דיוק. המסגור שכולם מביאים להשבת פלסטיק שחור הוא מספר: קחו את המסווג מאפס עיוור ב-NIR עד לכותרת של כמעט 99 אחוזים במעבדה, ופתרתם את הנקודה העיוורת של עולם המיחזור. לכן בניתי תחילה את פיזיקת החישה. פיח פחמני אמנם מעמעם את אות האינפרא-אדום באורך גל בינוני (MWIR), אך הוא אינו מוחק אותו, והפער הזה הוא כל ההזדמנות. ברצועת ה-MWIR, שבין 2.7 ל-5.3 מיקרומטר, כל פולימר עדיין מותיר טביעת אצבע דיאגנוסטית: צמד הפחמן-מימן האליפטי עבור PP ו-PE, הטבעת הארומטית עבור PS, מתיחת הניטריל עבור ABS, והמאפיין הסמוך לכלור עבור PVC. כתבתי ידנית רשת קונבולוציה חד-ממדית (1D-CNN) קטנה ב-numpy — שלוש שכבות קונבולוציה שמובילות ל-pooling, לאחר מכן שתי שכבות צפופות (dense) ו-softmax מעל PP, PE, PS, ABS ו-PVC, עם forward ו-backprop אמיתיים, אופטימיזטור Adam ושלב כיול טמפרטורה (temperature calibration) — והיא רצה כקוד נומרי פשוט בנתיב קריטי (hot path) של כ-5 מילישניות. שום מודל שפה גדול לא מקבל כאן החלטות. זו אריתמטיקה שניתן לקרוא.
וזה עבד, ברמה כנה. על גבי זרם נפרד וכבד יותר לבדיקה (held-out) של 1,700 פריטים, מלוכלך בכוונה מזה שעליו אימנתי, המודל הגיע לדיוק מאוזן של 0.894 — כשהוא מתייצב ממש לצד מדד שטח שעבר ביקורת עמיתים של 83.4 אחוזים לסיווג MWIR על פסולת אמיתית (Resources, Conservation & Recycling, ינואר 2026), עם כלל יחס שיאים (peak-ratio) בר-הסבר ב-0.668 מתחתיו, כך שהרשת אינה בודקת את שיעורי הבית של עצמה. זה מספר טוב על התפלגות קשה. זה אינו הנתון של 99 אחוזים מהמעבדה, וקיבלתי החלטה מוקדמת שלעולם לא אניח לו להעמיד פנים שהוא כזה.
הנה מה שעצר אותי. ישבתי מול הנתון 0.894 ושאלתי את עצמי מה מפעל יעשה איתו, והתשובה הייתה כלום. מתקן למיון חומרים לעולם אינו קונה מספר דיוק. הדבר היחיד שהוא משלם עבורו הוא באלה שעומדת במפרט.
המתג שארגן מחדש את כל הפיתוח
הרגע שבו הפיתוח קיבל תפנית היה מתג שהוספתי כמעט כמחשבה שלאחר מעשה. מפרט הבאלות לדוגמה של APR עבור פוליפרופילן ממוחזר מסוג Grade A הוא מוחשי ובלתי סלחני: לפחות 97 אחוזי PP ולא יותר מ-0.5 אחוזי PVC. באלה שמחמיצה את המפרט היא משלוח שנפסל, תשלום קנס על הפניה למטמנה, וממחזר במורד השרשרת שסומך עליך פחות מעכשיו. לכן חיברתי פקד יחיד בלוח המחוונים — שער רמת סמך (confidence gate) שניתן להדליק או לכבות — והרצתי את אותו המודל בדיוק על אותו הזרם בדיוק בשני המצבים כדי לראות מה השער לבדו שווה.
כאשר השער מופעל, פריטים בעלי רמת סמך נמוכה — רב-שכבתיים (laminates) ושברים מזוהמים שהספקטרום שלהם אינו תואם שום פולימר בודד — מושהים לבקרת איכות ידנית ברף softmax של 0.86 במקום לנחש אותם לתוך הבאלה, וכל פריט החשוד כ-PVC מעל רף נמוך במכוון נדחה לחלוטין (hard-rejected). ב-seed 11 של ההדגמה, הבאלה המבוקרת נמדדת ב-99.2 אחוזי PP עם אפס זליגת PVC, והתעודה מציגה PASS, APR Grade A.

ואז כיביתי את אותו המתג, כך שהמסווג פשוט לוקח את הניחוש המוביל שלו עבור כל פריט — argmax נאיבי, שום דבר אינו מוחזק. אותו זרם. אותם משקלים. הבאלה מציגה כעת 94.2 אחוזי PP עם 1.94 אחוזי PVC, והתעודה מתהפכת לנפסלת — מעבר למגבלת ה-0.5 אחוז של PVC המגדירה את הדרגה.

בניתי מסווג. מה שהבטתי בו היה הוכחה לכך שהמסווג מעולם לא היה הדבר שהפך באלה לברת-מכירה. ההימנעות (abstain), הדחייה המוחלטת של ה-PVC ובדיקת המדיניות הדטרמיניסטית היו הגורמים לכך. המודל לא השתנה בין שני צילומי המסך הללו. תשתית ההבטחה שסביבו השתנתה, וזה היה ההבדל בין באלת Grade A הניתנת להגשה רשמית לבין מטען של חומר גרוס ממוחזר (regrind) ומזוהם.
מדוע הפכתי את ה-PVC להחלטה א-סימטרית
התייחסתי ל-PVC באופן שונה מכל שאר החומרים בכוונה תחילה, וכדאי להסביר את הנימוק בפשטות. תוצאה שלילית-כוזבת (false negative) של PVC בבאלת PP אינה שגיאה קטנה — זהו מזהם כלור שעלול להרוס נתך שלם במורד התהליך. לכן השער אינו משקלל PVC באופן סימטרי ביחס לשאר המחלקות. כל פריט שהרשת מסמנת אפילו כחשוד קלות ב-PVC נדחה לחלוטין כסיכון כלור, מה שאומר שאני מקבל על עצמי השלכה של חלק מה-PP האמיתי כדי להבטיח ש-PVC לא יתפוס טרמפ. זהו מחיר, ורציתי שההדגמה תציג את המחיר במקום להסתיר אותו. בהערכה של שער מותאם על פני 60 באלות, המערכת מנתבת כ-12.6 אחוזים מהפריטים לבקרת איכות ידנית ולוכדת כ-99.8 אחוזים מה-PVC, עם זליגת PVC יחידה על פני כל 60 הבאלות, תוך השבה של כ-71.2 אחוזים מזרם ה-PP. היא מנתבת יותר חומר לבדיקה אנושית מכפי שמערכת נאיבית הייתה עושה, ומשיבה פחות מכפי שמערכת מושלמת הייתה משיבה, והיא מצהירה על כך בקול רם. מערכת השבה שמפריזה בתיאור רמת הטוהר של עצמה כבר נכשלה במשימה היחידה שלשמה היא קיימת.

המלכודת ברעיון הזה כולו היא שהימנעות (abstaining) נראית כמו חולשה. כשאני מציג למהנדסים את ערימת בקרת האיכות הידנית, הרפלקס המיידי שלהם הוא לשאול מדוע אינני פשוט לוחץ על הרף ומשיב יותר. משום שהדבר המוכרע בקו המיון אינו עד כמה הניחוש הממוצע מוצלח. הדבר המוכרע הוא האם פצצת כלור חודרת לתוך באלת Grade A, ואינכם רוצים שמודל סטוכסטי יקבל את ההחלטה הזו. אתם רוצים כלל שהמודל אינו יכול לעקוף.
המספר שבחרתי להציג על לוח התוצאות
קיבלתי החלטה אחת לגבי המספר שעל לוח התוצאות שעלתה לי במחיר מסוים כדי לשמור עליה. 0.894 הוא המספר שנכון על גבי זרם מלוכלך ונפרד לבדיקה (held-out). כמעט 99 אחוזים הוא המספר שמוכר — זה שמגיע מלכידת מעבדה נקייה של Specim — ויכולתי לצטט אותו ולתת לאנשים להניח הנחות. במקום זאת בניתי את לוח המדדים בתוך ההדגמה, כשהוא מציב את ה-0.894 שלנו ממש לצד קו הבסיס הבר-פירוש של 0.668 ומדד השטח שעבר ביקורת עמיתים של 83.4 אחוזים, כך שכל אחד יוכל לראות בדיוק היכן אנו עומדים ושאנו לא טוענים להשגת תקרת המעבדה.

הלוח מציג את המספר שבאמת משנה, וזהו אינו הדיוק. ב-40 באלות אקראיות מזרם כבד, הבאלה המבוקרת עומדת ב-APR Grade A בכ-85 אחוז מהמקרים, בעוד שהבאלה ללא שער עומדת בו רק בכ-22.5 אחוז מהמקרים. קראו היטב את שתי נקודות ההוכחה הללו, מכיוון שהן מדידות שונות ואני שומר עליהן נפרדות בכוונה: ההשוואה בין 99.2 ל-94.2 היא באלה ספציפית אחת ב-seed 11 של ההדגמה, וההשוואה בין 85 ל-22.5 היא הנתון המצטבר על פני 40 באלות אקראיות. הבאלה הבודדת היא הגרסה המוחשית, הנתון המצטבר הוא הגרסה הכנה, והנרטיב מחזיק מעמד רק משום ששתיהן מצביעות על אותו הכיוון. מודל ברמה של 0.894 הופך לבאלה שעוברת ברוב המקרים, או לבאלה שנכשלת ברוב המקרים, אך ורק בהתאם לשאלה האם השער נמצא בלולאה.
מה שהפסקתי לשווק כ-Upsell
בניתי את צד המחשוב כך שיתווכח נגד החשבונית שלי עצמי, וזה הפתיע אותי יותר ממה שהיה צריך. מתמטיקת זמני השהייה (latency) פשוטה: היסט פרץ האוויר שווה למהירות המסוע כפול זמן ההשהיה מגילוי לירי, והארכיטקטורה מספקת רק כאשר פרץ זה מתפרס על פני לא יותר מכארבעה מרווחי פיות פליטה — צר מספיק כדי לשמור על טוהר. במהירות של 3.0 מטרים לשנייה במתקן, מעבד גרפי ייעודי לקצה (Jetson AGX Orin המריץ TensorRT ב-14 מילישניות) מייצר פרץ של 42 מילימטרים המתפרס על פני כ-3.4 מרווחי פיות, בתוך החלון המותר. לפיכך, המנוע ממליץ על ה-GPU ומציין בבירור כי FPGA אינו מוצדק במהירות מסוע זו, ובכך חוסך כ-32,000 אירו ו-20 שבועות של עבודת הנדסה. דחפו את מהירות המסוע מעבר לכ-3.6 מטרים לשנייה, ופרץ ה-GPU יחצה את קו ארבע הפיות — ורק אז ההמלצה מתהפכת ל-FPGA. הוא ממליץ על החומרה הזולה יותר בכל פעם שהפיזיקה מאפשרת זאת, אף על פי ש-FPGA מניב חשבון גדול יותר. לא רציתי הדגמה שתדחף כל רוכש לעבר האפשרות היקרה, לכן הפכתי את ההמלצה הזולה להתנהגות ברירת המחדל והצגתי את הנימוק על גבי המסך.
החלק ששורד גם כשיש מודל טוב יותר
לא בניתי מכונת מיון (sorter), ואני רוצה להיזהר בעניין זה, משום שקל לפרש זאת כטענה להחלפת מכונות של TOMRA, Steinert או Machinex. זוהי קריאה שגויה. Assay מוצבת במורד הזרם ממיון ה-NIR הראשי שלכם כתחנת מסוע-צד ניטרלית לספקים, קוראת את שאריות הפלסטיק השחור שהמיון הראשוני כבר דחה, ומותירה את המכונה שלפניה לפעול ללא הפרעה. והערך המוסף שלה אינו מספר שמתיישן ככל שהמודלים משתפרים. כל באלה נשלחת עם תעודה חתומה, מוצפנת ב-sha256, המפרטת את ההרכב שנמדד בה, כל סעיף APR שנבדק עם ציון עבר או נכשל, ה-hash של המודל, כמויות ההימנעות (abstain) והדחייה, והטונאז' שהושב. הקבלה הזו היא הדבר שמפעל יכול לתייק ולהגיש.
יש לכך חשיבות רבה יותר כיום מאשר לפני חמש שנים, מסיבה רגולטורית ספציפית. ככל שתקנת ה-PPWR של האיחוד האירופי (תקנה 2025/40), חוק SB 54 של קליפורניה ומסגרת RecyClass תופסים אחיזה, אריזות המכילות פיח פחמני (carbon black) נחשבות לניתנות למיחזור אך ורק כאשר מיון בעל יכולת MWIR אכן קיים במתקן בפועל (מחקר WP45, 2026). אין זו טענת תאימות לגבי הדגמה זו — התעודה היא עדות טוהר הניתנת להגשה, ולא חותמת התאמה רשמית. זהו ההקשר לכך שהקרקע זזה מתחת לרגליים. בעולם הזה, המתקן שמנצח הוא זה שיכול למסור למבקר קבלה ניתנת להגשה עבור כל באלה שהוא משלח, ולא זה שמציג את מדד הביצועים הגבוה ביותר בשקף. אמון בקו מיון חייב להיות דטרמיניסטי, והחלק הדטרמיניסטי הוא בדיוק החלק שאינו מתקיים בתוך המסווג.
ואם אתם מעדיפים לצפות במודל מוצלח מנפיק באלה שנפסלת במקום לקרוא אותי מתאר זאת, הנה המערכת כולה בפעולה מקצה לקצה.
אם ברצונכם לצפות במודל מוצלח מנפיק באלה שנפסלת, ואז להזיז מתג אחד ולצפות בו מנפיק באלה שעוברת, ההדגמה זמינה בכתובת https://veriprajna.com/demos/materials-recovery-ai, והיא מריצה את אותו הזרם בשני האופנים כך שהשער הוא הדבר היחיד שמשתנה. התחלתי את הפרויקט במחשבה שהבעיה הקשה היא לראות את הפלסטיק השחור. כדי לראות אותו נדרשו שבוע של ספקטרוסקופיה ורשת קטנה. להוכיח שמה שהשבתי היה אכן נקי, ולהיות מוכן להימנע מסיווג (abstain), לדחות ולהיכשל בקול רם כשהוא לא היה נקי — זה מה שדרש את כל מה שבא לאחר מכן.


