
בניתי הדגמה לשחזר טעות מפורסמת של בינה מלאכותית. בסיס הייחוס שלי סירב לבצע אותה.
הטעות שלא הצלחתי לגרום שתקרה
התחלתי את הבנייה הזו ברצון לשחזר כשל ספציפי, מתועד היטב. בינה מלאכותית להתאמת מטופלים קוראת הערה קלינית כטקסט, ולכן מבלבלת בין מילים שנראות דומות אך משמעותן שונה ברפואה. הדוגמה הקנונית נקייה: מחקר נוגד קרישה בשלב III מחריג מטופלים עם היסטוריה של צנתור לבבי, בהערת המטופל כתוב החדרת צנתר ורידי מרכזי, מתאם דמיון רואה שתי פרוצדורות צנתר קרדיווסקולריות, נותן להן ציון קרוב, ומחריג מטופל שהיה למעשה זכאי. הערכות שפורסמו מאשרות שמודלים אמיתיים עושים בדיוק את השגיאה הזו (Fierce Biotech, 2025). רציתי שההדגמה שלי תראה את זה קורה, ואז תראה את המנוע שלי תופס את זה.
אז כתבתי בסיס ייחוס הוגן שישחק את הנבל. דמיון קוסינוס TF-IDF ברמת ישויות, גרמי מילים וגרמי תווים באורך 3 עד 5, שיטת דמיון וקטורים אמיתית. אפילו הענקתי לו הגדרה נדיבה ואימתתי את סף ההחלטה שלו בהצלבה לטובתו (ROC מרובד ב-3 קיפולים, Youden's J, seed 13, מתייצב ב-t = 0.6932), כי איש קש לא מוכיח דבר. אחר כך הרצתי את מקרה הצנתור הלבבי והמתנתי להחרגה השגויה.
היא לא הגיעה. בסיס הייחוס דירג את שני ביטויי הצנתר בנוחות מתחת לסף שאימת בהצלבה בעצמו והחזיר זכאי. הטעות שבניתי סביבה את כל ההדגמה פשוט לא השתחזרה.
יצאתי לביים כשל מפורסם וגיליתי שהנבל הכנה שלי חלש מדי מכדי לבצע אותו.
הסיבה התבררה כמלמדת, ואני רוצה להיות מדויק לגביה כי קל להגזים. בסיס ייחוס דליל לקסיקלי אינו מייצר את אותה החרגה שגויה ספציפית. הוא זקוק להטמעות סמנטיות צפופות כדי לקרב את שני הביטויים מספיק כדי להכשיל. הוספת מודל הטמעה כבד הייתה מנפחת את ההדגמה למשהו שאי אפשר להריץ בפקודה אחת אופליין, אז קיבלתי החלטה: לשמור על בסיס הייחוס כנה ודליל, ולהפסיק להעמיד פנים שהוא מבצע פשע שאינו יכול לבצע. ההחלטה הזו ארגנה מחדש את כל החלק שאני בונה. אם תרצו להריץ אותו בעצמכם, הוא חי ב-veriprajna.com/he/demos/clinical-trial-recruitment-ai.
מהי בכלל קו מרכזי?
עדיין שמרתי על מקרה הצנתור הלבבי, כי התברר שהוא מוכיח משהו טוב יותר מטעות שנתפסה. הוא מוכיח מדוע תשובת המנוע שלי אמינה בכלל. לשני המושגים כאן יש מזהי SNOMED-CT אמיתיים וניתנים לבדיקה. צנתור ורידי מרכזי הוא 392230005. צנתור לבבי הוא 41976001. אפשר להדביק כל אחד מהם בכל דפדפן SNOMED ציבורי ולאשר שהם יושבים על ענפים שונים של ההיררכיה. אין מסלול is-a מאחד לשני. קו מרכזי אינו צנתור לבבי, ורק היררכיה יודעת את זה.
זו כל התזה בקצה אחד של גרף. ציון דמיון אינו יכול לייצג "is-a." הוא יכול לייצג רק "המחרוזות האלה נראות דומות," ונראות דומות אינה זהה למשמעות דומה. כשהמנוע שלי מעריך את ההחרגה "ללא צנתור לבבי קודם," הוא אינו מנקד דבר. הוא שואל שאלה מבנית: האם העובדה המאומתת של המטופל מוכלת תחת המושג האסור? הוא עובר באונטולוגיה, מוצא שאין מסלול הכלה, ומחזיר זכאי עם שובל בן שלושה שלבים שנותן שם לשני מזהי המושג ולקצה הגרף שבדק.

כשראיתי לראשונה את השובל הזה מוצג, מה שתפס אותי לא היה פסק הדין. זה היה הקבלה שמתחתיו. התיבה של בסיס הייחוס באותו מסך מראה מספר דמיון ללא מקור וללא דבר שניתן לשחזור. התיבה של המנוע שלי נותנת שם לשני ה-SCTID ולשאלה המדויקת מסוג is-a ששאל. אחד מאלה שרגולטור יכול להגיש לתיק. השני הוא מספר עם תנועת כתפיים מצורפת. הניגוד הזה, לא שגיאה שנתפסה, הוא מה שמקרה הצנתור הלבבי באמת מרוויח.
המטופל שהמתאם באמת זרק החוצה
עדיין נזקקתי למטופל אבוד אמיתי, אז חיפשתי היכן בסיס הייחוס הכנה שלי באמת נכשל, ומצאתי את זה במילה אחת: לא. תיק הגיבור הסינתטי P-074 נושא את שורת ההערה "אין עדות לסוכרת." אחת מהחרגות פרוטוקול האונקולוגיה היא "ללא אבחנה של diabetes mellitus." בסיס הייחוס הווקטורי רואה את הטוקן "diabetes" יושב ממש ליד ה-"diabetes" של הקריטריון ומתאים אותם ב-דמיון 1.0. ציון מושלם. אין לו מודל של שלילה, אז הוא קורא משפט שפוסל סוכרת החוצה כאילו הכניס סוכרת פנימה, ומחריג מטופל שהיה זכאי.
זה המטופל שהמתאם זורק החוצה, וזה ה־ביט שציפיתי במקור שמקרה הצנתור הלבבי ישא. שלילה היא המקום שבו בסיס ייחוס דליל נשבר בכנות, בסף הטוב ביותר שלו עצמו, בלי מניפולציה.

אני ממשיך לחשוב כמה שקט הכשל הזה. אין הודעת שגיאה, אין דגל ביטחון נמוך, אין אות שמשהו השתבש. הציון הוא 1.0, הגבוה ביותר האפשרי, הביטחון הרב ביותר שהמערכת יכולה אי פעם להיות. בסיס הייחוס לעולם אינו בטוח יותר מאשר ברגע המדויק שבו הוא הכי טועה. רכז שסוקר תור של כאלה אין לו דרך לדעת שההתאמה המושלמת הספציפית הזו היא מטופל שהיה צריך להירשם. הכפילו את זה על פני פרוטוקול ותבינו מדוע 80% מהמחקרים מפספסים את לוחות הזמנים לגיוס (קונצנזוס בענף, 2025), ומדוע כל כישלון סינון עולה בממוצע כ-1,200$ (Antidote.me, 2025).
בסיס הייחוס מעולם לא היה בטוח יותר מאשר ברגע המדויק שבו טעה הכי הרבה. זו אינה באג שאפשר לכוונן החוצה. זו טעות קטגוריה.
מדוע פסק הדין חי מחוץ למודל?
קיבלתי החלטה ארכיטקטונית אחת מוקדם שאני חושב עכשיו שהיא היחידה שהייתה חשובה, והיא הייתה להרחיק את מודל השפה מפסק הדין לחלוטין. יש בדיוק שלב הסתברותי אחד בכל הצינור. מודל הניתן להחלפת ספק, מייעץ בלבד, קורא את הפרוזה המבולגנת ומציע עובדות מועמדות, שכל אחת מהן נושאת את המקטע המילולי שממנו קרא את העובדה ומזהה מושג מועמד שנלקח מאוצר מילים סגור קטן. זה הדבר האחד שמודל באמת טוב בו: קריאה. הוא לא מקבל קול על מי זכאי.
הכול אחרי זה הוא קוד דטרמיניסטי שאני יכול לבקר. לפני שכל עובדה מוצעת מגיעה להחלטה, מאמת יריב מאתגר אותה מול ההערה המילולית בשלוש בדיקות: האם המקטע באמת קיים, האם הוא בשלילה, והאם הנושא הוא המטופל ולא בן משפחה. העובדה "אין עדות לסוכרת" נכשלת בבדיקת השלילה ולעולם אינה מגיעה למנוע. באותו תיק, "היסטוריה משפחתית של סרטן השד" נכשלת בבדיקת הנושא, כי ההיסטוריה הזו שייכת לבן משפחה ולא למטופל, והיא מסומנת כנדחית עם הבדיקה שנכשלה בשמה.

על פני סט הזהב המלא, המאמת הזה דחה 7 מופעי עובדה, 3 עובדות רעות מובחנות (אזכור סוכרת שלילי, ייחוס היסטוריה משפחתית של סרטן השד, ותרופה מושתלת מהלוצינציה ללא מקטע תומך), פרוסים על פני 4 מתוך 13 הרצות המקרה שנוקדו, כולן לפני שיכלו לגעת בפסק דין. כשאנשים שואלים אותי "איך אני סומך על מה שהסוכן שלף מההערות שלי," הלוח הזה הוא כל התשובה. אני לא מבקש שתסמכו עליו. אני מראה לכם מה הוא הציע ומה נזרק החוצה ומדוע.
ואז פסק הדין עצמו הוא Python פשוט שיושב מחוץ למסגרת הסוכן: מנוע לוגיקה דאונטית שמעריך איסורים, חריגים זמניים ודרישות על פני האונטולוגיה וקצת חשבון תאריכים. מודל אינו יכול לעקוף את השער הזה, כי המודל אינו בחדר כשהשער רץ. זה גם מה שהופך את המנוע לניתן לשחזור. כשהלוגיקה היא קוד דטרמיניסטי על אונטולוגיה קבועה, הרצה חוזרת של אותו תיק מפיקה את אותה תשובה, בייט אחר בייט, בכל פעם.
המודל קורא. הוא לא מצביע. הגבול הבודד הזה הוא מה שהופך הרצה חוזרת לזהה בייט-אחר-בייט.
המספר היחיד שאכפת לקורא שלי בתפעול קליני
ביליתי שבועות באופטימיזציה של מדדים ש, בסופו של דבר הודיתי לעצמי, הקונה אינו שוכב ער עליהם. דיוק החלטה הוא מספר לוח תוצאות. מי שאחראי על היתכנות אצל נותן חסות או CRO אינו משווה ציוני לוח תוצאות. הוא צופה בלוח זמנים לגיוס מחליק, וכל יום של החלקה יקר. דוח ההשפעה של Tufts CSDD (2024) מעמיד את עלות עיכוב הגיוס על כ-800K$ ליום באובדן מכירות מרשם, וגבוה יותר בתחומים הטיפוליים שההדגמה הזו נוגעת בהם: כ-840K$ ליום באונקולוגיה ו-1.4M$ ליום בקרדיווסקולר. מורכבות הפרוטוקול עלתה ב-139% בפרוצדורות מחקר מאז 2005 (IQVIA, 2026), מה שאומר יותר קריטריונים, יותר סעיפים, ויותר מקומות שבהם מתאם טקסט יכול לטעות באחד.
אז הפסקתי להוביל בדיוק והתחלתי להוביל במספר שבאמת ממפה לכאב הזה: מטופלים זכאים שלא איבדתם. על סט זהב מסומן קבוע של 13 מקרים שנלקחו מ-7 מטופלים סינתטיים על פני 2 פרוטוקולים סינתטיים, המנוע שלי מאבד 0 מטופלים זכאים. בסיס הייחוס ההוגן מאבד 3. אותו סט, אותו סף שאומת בהצלבה לטובת בסיס הייחוס עצמו.

אני רוצה להיות מדויק לגבי מה המספרים האלה ומה הם אינם. הם הפלט של הרתמה עצמה על אותו סט קבוע של 13 מקרים, לא הבטחה לעולם פתוח. ה-100% הוא "100% על סט הזהב הזה," לעולם לא "תמיד צודק." אני לא הולך לומר לכם ש-TrialProof לעולם אינו טועה, כי אין לי את הנתונים לומר את זה ולא הייתי מאמין לאף אחד שכן. מה שאני יכול לומר צר יותר, ולדעתי שימושי יותר: על הסט הזה המנוע מאבד אפס מטופלים זכאים, כל החלטה נושאת שובל שניתן לשחזור, שתי החלטות נמנעו בבטחה עם NEEDS-REVIEW כשחסר מעבדה או חיוני נדרש במקום לנחש, והרצה חוזרת של כל הסט הייתה זהה בייט-אחר-בייט, 13 מתוך 13. כל המטופלים, ההערות והפרוטוקולים הם מתקנים סינתטיים, ללא רשומות אמיתיות בשום מקום. אפשר לצפות בכל אחת מההרצות האלה ב-veriprajna.com/he/demos/clinical-trial-recruitment-ai.
המספר שאכפת לי ממנו אינו דיוק. אלה המטופלים הזכאים שלא זרקתי החוצה. על הסט הזה, זה אפס שאבדו מול שלושה של בסיס הייחוס.
יש לזה גם צורה רגולטורית, ואני אציין אותה בזהירות. הנחיית Clinical Decision Support של ה-FDA מינואר 2026 היא המסגרת הרלוונטית לעזר התאמה עם אדם בלולאה כמו זה. כל החלטה שהמנוע פולט יכולה להיות מיוצאת כרשומת CDISC SDTM IE, שורה אחת לכל מטופל וקריטריון, הנושאת את פסק הדין, שובל הנימוק, מזהי המושג והפעולה הדאונטית. זו אינה אישור ואני לא טוען לאישור. זה יישור וכיוון. אבל זה אומר שהשובל אינו נוחות לניפוי באגים. הוא ארטיפקט שניתן להגשה לתיק, והוא קיים מטבע הבנייה בכל החלטה ולא כמחשבה שלאחר מעשה.
אל מה אני חוזר שוב ושוב
אני ממשיך לחזור לרגע שבו הנבל שלי סירב לשחק את חלקו, כי זה שינה את השאלה ששאלתי. במשך שלוש שנים התחום שאל איך להפוך את המודל טוב יותר בהחלטה מי זכאי. פרומפטים טובים יותר, הקשר גדול יותר, יותר שליפה, הכול מכוון להפוך מערכת הסתברותית לאמינה מספיק כדי לפסוק על רישום מטופל. ביליתי את הקטע הראשון של הבנייה הזו גם בתוך המסגרת הזו, מנסה לתפוס מודל בטעות כדי שאוכל לתקן את המודל.
מה שבסוף התחבר הוא שזו הייתה השכבה הלא נכונה. ציון דמיון אינו יכול לייצג "is-a," אינו יכול לייצג "לא," ואינו יכול לייצג "אלא אם הטיפול הושלם יותר משנים-עשר חודשים לפני ההקצאה האקראית." שום כמות של הנדסת פרומפטים לא מוסיפה את אלה, כי אלה אינן בעיות שפה. אלה בעיות לוגיקה. אז המהלך הבכיר אינו להפוך את המודל לאמין. הוא להפוך את האמון למיותר. תנו למודל לעשות את הדבר האחד שהוא טוב בו, לקרוא פרוזה ולהציע עובדות עם המקטע שממנו קרא אותן. ואז תנו למאמת לזרוק החוצה מה שההערה אינה תומכת בו, ותנו לקוד פשוט, ניתן לביקורת, על אונטולוגיה רפואית לחשב את פסק הדין.
זכאות צריכה להיות מחושבת, לא נחזית. מה שלא ציפיתי, כשנכנסתי, הוא שהתשואה לא תרגיש כמו מדד בכלל. היא מרגישה כמו קבלה. אותו תיק נותן את אותה תשובה בכל פעם, התשובה נותנת שם למזהה המושג ולקצה הגרף שהחליט אותה, והמספר שמנהל היתכנות באמת מאבד עליו שינה יורד לאפס מטופלים זכאים שנזרקו החוצה.
ואם תעדיפו לצפות בזה מאשר לקרוא אותי מתאר, הנה כל הדבר רץ מקצה לקצה.
אז הנה השאלה שלא הפסקתי להפוך, ואני באמת רוצה לדעת איך אתם עונים עליה. כשהסיכון הוא ההזדמנות של אדם אמיתי למחקר, איפה אתם רוצים שהאמון שלכם יחיה: במודל שצריך להאמין בו, או בקוד שאפשר לקרוא?


