איך יצרתי את מאגר צילומי הרנטגן המתוייגים הגדול בעולם ולמדתי לחבק את הרעש

למי שלא יודע, אני עובד כבר שנתיים בחברת זברה מדיקל ויז'ין. המטרה של זברה, בגדול, היא לפענח צילומים רפואיים ולהיות מסוגלת לומר עליהם מה שרדיולוג מומחה היה אומר. אם נעשה את זה נוכל להקל על הלחץ בו עומדים היום רדיולוגיים בחדרי המיון ובבתי-החולים (יותר מידי צילומים, אין זמן לראות את כולם), נוכל לגלות הסתבכויות מוקדם יותר (לפעמים לוקח שעות מרגע שצילום נכנס למערכת ועד שהוא מגיע לראש התור של הרדיולוג), נוכל לשדרג את איכות הפענוח של הרדיולוגים (להראות להם גידולים או ממצאים שהם לפעמים מפספסים), או לתפקד כחוות דעת ראשונית במקום שבו אין רדילוגים כלל (הודו, אפריקה).

זו משימה שייקח זמן לבצע: יש המון ממצאים שרדיולוג עשוי לדווח עליהם, ועל כל אחד צריך לאסוף דאטה, לאמן מודל, להגיע לרמת ביצועים גבוהה ולארגן ניסוי קליני שישכנע את ה-FDA שאפשר להשתמש במוצר בשטח. לשמחתי, לזברה יש כמות דאטה אדירה – מיליונים של צילומי רנטגן ו-CT – והשוס הוא שעם הצילומים האלו יש לנו גם את הריפורטים עצמם שנתן הרדיולוג בבית-החולים עבור הצילום.  הצרה היא שאנחנו לא באמת יודעים מי כתב את הריפורט, וגם שהריפורט עצמו מבולגן – הוא כתוב בטקסט חופשי, לפעמים מתייחס לצילומי עבר, לפעמים יש שם שגיאות כתיב, ובאופן כללי – הוא בעברית, שפה שאין לה עדיין המון כלי ניתוח שאפשר פשוט להוריד ולהשתמש בהם.

report_sample

דוגמאות (מפוברקות) של דו"חות רפואיים (ריפורטים) בעברית

לכן בפרוייקטים קודמים בזברה, לא באמת התייחסו לריפורטים ברצינות. השתמשו בהם כדי לערוך חיפוש ראשוני – לאתר מקרים שבריפורט שלהם מופיעות מילות מפתח עבור ממצאים מסויימים שרוצים לעבוד עליהם – מין גוגל פנימי שכזה. אבל אחרי שנשלפו משם המקרים שענו על תוצאות החיפוש, היינו שולחים את כל המקרים הללו ל"רדיולוגים שלנו", כדי לוודא שבאמת יש שם את הממצאים הללו, ואכן לא תמיד הרדיולוג שלנו הסכים עם הריפורט.

כך באמת אפשר היה לקבל בסיס נתונים התחלתי, כמה מאות או אלפי צילומים מתוייגים על הימצאות של ממצא, אבל התוצאה היתה איטית ויקרה. שעת רדיולוג עולה כסף, ואחרי שבועות של עבודה הצלחנו לקבל תיוג של אחוז בודד מכל מיליוני המקרים שהיו לנו במערכת. הייתה לי תחושה שאנחנו מפספסים ככה הרבה תמונות שהיינו יכולים לעשות בהן שימוש. וגם – אם הריפורט אומר משהו אחד והרדיולוג שלנו משהו אחר – מי אמר שדווקא הרדיולוג שלנו הוא זה שצודק?  זו בסך הכל עוד דעה. מחקרים מראים שרדיולוגים מסכימים בינהם בסך הכל 70% מהפעמים בצילומים מסויימים, ולכן אנחנו לא באמת מרוויחים לייבלים "נקיים" יותר בזה שאנחנו מתייגים את התמונות תיוג נוסף אצלינו, אלא מבזבזים מלא זמן וכסף.

וכך התחיל פרוייקט Textray, שהוא נסיון לייצר, באמצעות ניתוח הטקסט בריפורטים, דאטה מתוייג לאימון שיכלול כמה שיותר תמונות.  כמו במציאות, הצילום הנפוץ ביותר אצלינו במערכת היה צילום רנטגן חזה, ולכן משם התחלנו.

המשפט הוא המלך

בשלב הראשון עוד לא ניסינו להבין את כל הטקסט בריפורט, אבל כן הבנו משהו חשוב אחר – שהיחידה החשובה בו היא המשפט. כשהרדיולוגים כותבים טקסט, כל משפט הוא עולם בפני עצמו, אין המשכיות בין המשפטים – או שהמשפט אומר שיש משהו, או שהמשפט אומר שאין משהו (ומדי פעם יש משפטים נייטראלים שמתארים את סוג הצילום או סתם טמפלייט). לכן בשלב הראשון הפרדתי כל ריפורט למשפטים המרכיבים אותו, וסיווגתי כל משפט לחיובי, שלילי, או נייטראלי. חלק מהקוראים בוודאי חושבים על אלגוריתמים ידועים של NLP עבור בעיות מהסוג הזה, אבל האמת שאת רוב העבודה עשינו באמצעות חיפוש ביטויי מפתח שהוגדרו מראש, כמו "אין עדות ל", "ללא ממצאים" (עבור משפטים שליליים), ו"חשד ל", "בצד ימין", "קל" (עבור חיוביים).

sentence_analysis

דוגמה להפרדת ריפורט למשפטים וסיווגם לחיובי (ירוק), שלילי (אדום), ונייטרלי (כחול).

 

בשלב הבא, ניסיתי לאפיין את הבעייה כבעיית Image Captioning. זה תחום של בינה מלאכותית שמטרתו לשים טקסט תיאורי קצר מתחת לתמונה. האלגוריתם מקבל תמונה ומוציא משפט, ויכולתי לאמן את האלגוריתם מאחר שבשלב הזה כבר היו לי מיליוני תמונות חזה עם משפטים חיוביים שמתאימים להן.  אין לתאר את תחושת הפלא המתקבלת כשהאלגוריתם שלך מתחיל לדבר במשפטים תקניים ועוד בשפת הקודש (אפילו שזו לא הפעם הראשונה שלי), וזה עוד לפני שבדקנו את תוכן המשפט. באמת מפליא שהאלגוריתם מצליח ללמוד לדבר בשפה תקנית כל כך מהר, מבלי שצריך לחנך אותו בשיעורי דקדוק ותחביר.

אבל איך בודקים את איכות התוצאות?  image captioning

בתמונה הנ"ל ניתן לראות זוג תמונות רנטגן-חזה (בד"כ יש תמונה קדמית ותמונת-צד) ואת המשפטים שהמודל שולף. ככל שה-score יותר נמוך המודל יותר בטוח שהמשפט מתאים. במקרה הזה המודל קלע בול למשפט "צל הלב מוגדל", אבל אם בריפורט היה כתוב "צל הלב מורחב" (שזה אותו דבר כמו "מוגדל"), איך היינו יודעים שהמודל צדק?  וגם, מה לגבי שאר המשפטים שהמודל פלט, האם ה-score שלהם מספיק טוב כדי שאדווח עליהם גם?  עשיתי כמה נסיונות לכמת את הדמיון בין המשפטים שבריפורט ובין המשפטים של המודל, ובהחלט היה מקום לאופטימיות, אבל בין לבין התחיל להבשיל לו רעיון אחר.

שמתי לב שהמשפטים די חוזרים על עצמם. הרדיולוגים אוהבים לעבוד עם טמפלייטים, להשתמש באותם ניסוחים, וגם לעשות קופי-פייסט. סטטיסטיקה על המשפטים הראתה שיש כאלו שחוזרים על עצמם אלפי ואפילו עשרות-אלפי פעמים.  "צל הלב מוגדל", למשל, חזר כמעט 40 אלף פעמים בריפורטים שלנו! סימולציה קצרה הראתה שאם רק נדע מה אומרים 20 אלף המשפטים הכי נפוצים, נוכל בקלות לכסות ככה את כל המשפטים החיוביים בכמיליון וחצי ריפורטים!  מעבר לכך, גילינו שברנטגן-חזה אין כל כך הרבה ממצאים. רדיולוגית מומחית שלנו שעברה על כמה אלפי משפטים חיוביים, הצליחה לארגן את כל הממצאים לכ-60 קטגוריות.

ככה החל לו מבצע התיוג, שבו שתי סטודנטיות לרפואה מיפו לנו כ-20 אלף משפטים אל כל הממצאים הרפואיים המוזכרים בהם. המתייגות לא רק סימנו אם הממצא קיים, אלא גם איפה ובאיזו דרגת חומרה (במידה והריפורט ציין זאת). לא היתה פה שום למידת מכונה, אלא עבודה אנושית מאומצת, בפיקוח רדיולוגים, שנמשכה שבועות ספורים. אכן, לתייג טקסט זה יותר מהיר מלתייג תמונה, על אחת כמה וכמה כשהמשפט מופיע בריפורטים של אלפי תמונות.

וכך נוצר לו דאטה מתוייג של כשני מיליון צילומי רנטגן (רובם זוגות של צילום קדמי עם צילום-צד), מאגר נתונים גדול כמעט פי 10 ממה שקיים בחוץ [2], ועם הרבה יותר סוגי ממצאים מתוייגים ממה שאי-פעם מישהו תייג!

עם הדאטה הזה יכולנו להתחיל לאמן רשתות ניורונים שמיועדות למציאת 40 ממצאים שונים ברנטגן-חזה. את התוצאות ההתחלתיות של הפרוייקט הזה פרסמנו לפני כמה חודשים במסגרת כנס MICCAI (הכנס המוביל לניתוח צילומים רפואיים). גילינו לא מעט דברים מעניינים שם (ממליץ לקרוא את המאמר שלנו [1] או את הפוסט המסכם באתר זברה), למשל איזה ממצאים קשים יותר לזיהוי, אלו פחות, ובאילו מקרים צילום הצד עוזר.

https://arxiv.org/abs/1806.02121

צילומי רנטגן חזה, קדמי וצדדי, נכנסים לרשת ניורונים שממירה (כל צילום בנפרד) ל-1024 מספרים (ביחד 2048).  מוקטור הפיצ'רים הזה הרשת מחשבת בצעד הבא לכל ממצא את הסבירות שהוא קיים. הלייבלים לאימון ("האמת") חולצו מניתוח המשפטים החיוביים (באדום). כל ממצא חיובי שהוזכר בריפורט של הצילומים מקבל לייבל "חיובי". כל ממצא שלא הוזכר נחשב כ"שלילי". מקור: מאמר textray.

 

לחבק את הרעש

אף אחד מהתהליכים שתיארתי למעלה לא נעשה באופן מושלם. היו טעויות לכל אורך הדרך. החלוקה למשפטים לפעמים מיזגה משפטים שלא לצורך. הסיווג ל"חיובי" או "שלילי" לפעמים היה שגוי. המתייגות שלנו לפעמים טעו בתיוג. וכמובן, הרדיולוג שכתב את הריפורט לעיתים שגה. אפילו שיכלנו לגלות חלק מהטעויות ואף לתקנן במהלך התיוג, ברור לנו שחלק מהלייבלים שהאלגוריתם התאמן עליהם היו שגויים, או "רועשים". בעיקר, אנחנו יודעים, היו ממצאים חיוביים שהריפורט לא ציין, מכל מיני סיבות, או שהמשפט שמתאר את הממצא לא נכלל בין 20 אלף המשפטים שתויגו באופן ידני, ולכן "פספסנו" אותו.

עם זאת, כאמור, גם הרדיולוגים "שלנו" שוגים. ל-12 ממצאים עשינו בדיקה מעמיקה יותר: לקחנו אוסף צילומים (שלא התאמנו עליהם) ונתנו לשלושה רדיולוגים להחליט אם יש או אין ממצא (לכל ממצא שלישייה אחרת). ככה יכולנו למדוד את ההסכמה בין הרדיולוגים. הטבלה הבאה מסכמת כמה הסכמה היתה בין כל זוג רדיולוגיים, ובין הזוגות בממוצע:

agreements

רואים פה הסכמה מאוד נמוכה בין הרדיולוגים. בחלק מהממצאים הם לא מסכימים על כשליש מהמקרים!

לאור זאת אפשר לציין שני דברים. הראשון, הוא שכמות ה"רעש" שיש בלייבלים שלנו (כי לא פירשנו נכון את הריפורט) היא זניחה לעומת אי-הוודאות שממילא שוררת במערכת. ולכן בבחירות שהיו לנו מדי פעם, בין "יותר דאטה וקצת יותר שגיאות" לבין "פחות דאטה אבל יותר נקי", המודל שאומן עם "יותר דאטה וקצת יותר שגיאות" ניצח. זו היתה הוכחה לכך שהגישה של Textray עדיפה על הגישה המקורית, של תיוג ויזואלי פנימי בנוסף לריפורט, משום שהיא לא רק מגיעה לביצועים טובים אלא גם חוסכת מאמצי תיוג.

אגב, יש אנשים שגורסים ש"מודל לא יכול להיות מדוייק יותר מהרעש שיש לו בלייבלים". אני שולל קביעה זאת מכל וכל. כל זמן שקבוצת ה"חיוביים" שלך אכן רווייה בחיוביים, וקבוצת ה"שליליים" אכן רווייה בשליליים, למודל צריך להיות מספיק סיגנל כדי להתגבר על הרעש ולתת סבירות גבוהה יותר לסיווג הנכון [וכמובן שיש מחקרים בנושא שמאששים זאת בניסוי [3]].

מבחן הפסקת הקפה

הדבר השני, הוא שבבואנו לבחון את המודל שלנו בשטח, צריך לחשוב היטב: מה השאלה שראוי שנשאל?  לאור אי ההסכמה הנמוכה בין הרדיולוגים בצילומי רנטגן, האם זה הוגן שנשווה את האלגוריתם למה שאמר מומחה יחיד, זה או אחר?  ואם נקים וועדה של מומחים כאלו, וניקח רק את המקרים שיש בינהם קונצנזוס, הרי יוצא שנבחן את האלגוריתם רק על המקרים הבנאליים שעליהם כולם מסכימים.  מה הטעם בכך? גם אם נדרוש רוב, לא בטוח שרוב של 2 נגד 1 הוא מספיק מובהק. אולי נצטרך 7 רדיולוגים בוועדה, ולדרוש רוב של לפחות חמישה בצד המנצח?

 

Image result for doctors at a coffee break

רדיולוגית בהפסקת קפה [אילוסטרציה]

במאמר, מטעמי זמן ומשאבים, בחרנו לבחון את אי-ההסכמה הממוצעת בין הרדיולוגים שלנו, לעומת אי-ההסכמה הממוצעת בינם לבין המודל, וגילינו שב-8 מתוך 12 הממצאים הנ"ל, הרדיולוגים מסכימים בממוצע יותר פעמים עם המודל שלנו מאשר עם חבריהם. ככה הראינו שהמודל שלנו, אם נוסיף את דעתו לערימה, לא מייצר יותר רעש ממה שכבר יש בה. קראנו לזה "מבחן הפסקת הקפה", שבודק אם רדיולוגית שיוצאת להפסקת קפה תעדיף שהמודל יחליף אותה במקום כל אחד מחבריה. האם מבחן זה מספיק משכנע כדי שנוכל להוסיף כל אלגוריתם שעובר אותו למערכת הבריאות כ"רדיולוג" נוסף?

בואו לעבוד איתי

טוב, שווה להוסיף פה עוד משהו. אם מישהו מהקוראים מרגיש שמחקר כזה מדבר אליו, וגם יש לו ידע ונסיון בתכנות ולמידה עמוקה, צרו איתי קשר!  יש לנו בזברה מקום לחוקרים חדשים, וגם אופציה לאינטרנשיפ. סטודנטים שבתחום, מי מכם שרוצה לכתוב את המאמר הבא שלו איתנו ולהיחשף לכמויות דאטה שלא מהעולם הזה, צרו קשר.  יש עוד מלא דברים שאפשר לעשות.

לקריאה נוספת:

[1] Laserson et al. TextRay: Mining Clinical Reports to Gain a Broad Understanding of Chest X-ray. MICCAI 2018 [arxiv] [link]

[2] Wang et al. Database and Benchmarks on Weakly-Supervised Classification and Localization of Common Thorax Diseases. CVPR 2017. [NIH Chest C-ray dataset]

[3] Rolnick et al. Deep Learning is Robust to Massive Label Noise [arxiv]

כלי תיוג-הטקסט LightTag, מציין את TextRay כמקרה דוגמה:

[4] Tal Perry. Embrace The Noise: A Case Study Of Text Annotation For Medical Imaging. [LightTag blog post]

עבודות דומות:

[5] Rajpurkar et al. CheXNet: Radiologist-Level Pneumonia Detection on Chest X-Rays with Deep Learning.  [arxiv]

[6] Ptha et al. Can Artificial Intelligence Reliably Report Chest X-Rays?: Radiologist Validation of an Algorithm trained on 1.2 Million X-Rays [arxiv]

מודעות פרסומת
פוסט זה פורסם בקטגוריה deep learning, medical, עם התגים , , . אפשר להגיע ישירות לפוסט זה עם קישור ישיר.

להשאיר תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת /  לשנות )

תמונת גוגל

אתה מגיב באמצעות חשבון Google שלך. לצאת מהמערכת /  לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת /  לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת /  לשנות )

מתחבר ל-%s