While not new at all, Machine Learning has been on the rise of the past years, both because of the ubiquity of data and because of the increase in adoption of Cloud Computing. In recent years, however, ML has become more prevalent than ever - mainly due to its ease of use and its accessibility to non-mathematicians.
In some cases, ML can do things that would’ve been extremely difficult, if not impossible, for us to achieve in the past. In other cases, however, ML is here to assist us, rather than replace us, by relieving us of our most boring and repetitive tasks, and this often has to do with the low accuracy in which ML models operate.
In this talk we are going to build business workflows using the joint effort of humans and software to automate those boring tasks, while compensating for the inaccuracy of ML with human intervention.
46. Costs
46
Google Cloud Vision API
1K OBJECT_DETECTIONS = free
1K OCR = also free
Every next 1K is 1.5$
Azure
Storage – $0.0196 per GB
(hot LRS standard storage)
Egress - $0.05 per GB
(for serving the beautiful web UI)
Compute – currently on-prem
48. Key takeaways
Ain’t no need a math wiz
Cloud services are easy to use, but
Choose the right metrics for the right steps
AI + NI = Better together
If you can’t join them, beat (the crap out of) them
48
שלום לכולם ותודה רבה שבאתם עד לכאן לשמוע את ההרצאה שלי
אני הולך לדבר על איך אפשר לשלב בינה מלאכותית עם בינה אנושית בתהליכים עיסקיים שונים.
TEASER – show WEB UI
חשוב לי גם לעשות תיאום ציפיות. לא תראו פה אלגוריתמים ומודלים מתחוכמים של
ML
וזה בגלל שאת העבודה הקשה כבר עשו בשבילנו.
מה שאני כן הולך להדגים זה איך אפשר לבנות תהליך מורכב ע"י שילוב נכון של שירותים קיימים
אני אמיר ואני ארכיטקט תוכנה בקודוליו
מתעסק לא מעט בעולמות הענן
ובמערכות מבוזרות באופן כללי
אני מניח שכולנו נדרשים מדי פעם לבצע עבודה , מונוטונית ורפיטטיבית .
למשל להכין הרבה מאוד כדים
או סתם לספור כסף. פעולה משעמעמת במיוחד – תסכימו איתי.
אני לא יודע מה איתכם, אבל בתור עצלן מומחה עם תעודות,
אני הייתי מעדיף לעשות משהו אחר עם הזמן שלי.
ולתת לתוכנה לעבוד בשבילי
ותכף תראו למה זה חשוב
אני רוצה לספר לכם סיפור קצר על חתולים וכלבים ואישה נחמדה בשם אורטל שגרה בבאר שבע.
אני לא יודע אם אתם יודעים, אבל המצב של חתולי רחוב בב"ש והסביבה הוא לא משהו. ומדי פעם יש גם כלבים נטושים שזקוקים לעזרה.
ולכן, אורטל החליטה שהיא רוצה לשנות קצת את המצב והקימה פרויקט שנקרא ספרים ומצילים. במסגרת הפרויקט, אנשים תורמים לאורטל ספרים משומשים שאותם היא תמכור עבור 10 ש"ח לספר.
מה שנהדר בפרויקט הזה זה שהוא גם חברתי, גם אקולוגי וגם למען בעלי חיים.
לצורך כך, אורטל הקימה דף פייסבוק שבו קישור לקובץ אקסל עם רשימת הספרים שבמלאי .
אין מיון וסינון
אין התראות על ספר חדש
די מינימליסטי
בנוסף לקובץ האקסל, אפשר גם למצוא את הספרים באתר סימניה – שמאפשר לכל אחד למכור ספרים משומשים.
כך נראה התהליך של רישום ספר למכירה :
חיפוש
סימון
עדכון פרטים
בכל מקרה, הפרויקט רץ כבר כמעט שנה ולאורטל הולך יותר מדי טוב,
כי הרבה אנשים פונים אליה לגבי תרומות של ספרים והיא פשוט לא עומדת בקצב,
כי גם ככה זה הכל על חשבון הזמן הפנוי שלה
אוקיי, סיפור מעניין, אבל איך אני קשור לזה? מה לי ולפרויקט הזה. אני בכלל לא מהאזור!
אז, התשובה הקצרה היא שהתוודעתי לפרויקט ולאורטל דרך הבת זוג שלי שהיא אקטיביסטית בכל הנוגע לבע"ח
ושנינו חשבנו שאולי אפשר לייעל קצת התהליך הזה בעזרת תוכנה שתקצר קצת תהליכים.
דבר ראשון, נצטרך דאטא בייס עצום של כל הספרים בארץ, שישמש כרפרנס לחיפוש הספרים
יש כל מיני דרכים להשיג את הרשימה הזו – פחות חשוב כרגע איך.
עכשיו, ברגע שהרשימה ברשותנו, כל ספר שמתקבל, מחפשים אותו מול הרשימה הזו, ומעדכנים את המלאי.
ושתי שאלות שנשאלות פה, הן:
א. איך מוצאים אותו במאגר?
ב. איך אפשר להזין כמה ספרים במכה כמו שעינת עושה
אפשר לעשות הקלדה ידנית של הספר אפילו עם השלמה אוטומטית, אבל זה כבר יש לנו עם סימניה
ואנחנו רוצים להשתפר.
אז האופציה המאוד מתבקשת היא לסרוק את ה- מסת"ב של הספר.
בדקתי את הנושא והבנתי שזה לא טריוואלי בכלל, בגלל
שיש ספרים שבכלל יש להם דאנא קוד או פורמט אחר
ויש כאלה שאין להם בכלל
בחלק מהספרים הקוד בכלל נמצא בכריכה הפנימית של הספר
ומה שלא יהיה, השיטה הזו עדיין מחייבת מעבר על כל ספר בנפרד
האופציה השנייה – גם כן מאוד מתבקשת היא .... מי מנחש?
כמובן OCR Part of ML
בשיטה הזו אני מצלם את הכריכה של הספר וע"י שימוש ב-
OCR
אני מחלץ את הכותרת ומחפש אותה בעמודת הכותרת ברשימה שהכינותי מראש.
OCR
נמצא איתנו כבר הרבה מאוד שנים – הרבה לפני שהתחלנו לראות
ML
בכל מקום.
מה שחדש, יחסית בתחום הזה הוא השיטה.
בשיטות הישנות לא השתמשו באלגוריתמים לומדים
ובשיטות החדשות, שגם עובדות טוב יותר עבור סוגי כתב ופונטים שונים, כן משתמשים ב-
ML
מה שגרם לפריחה מחודשת של כל התחום הזה.
האתגר הספיציפי שאני מתמודד איתו בהקשר הזה הוא
המגוון הגדול של הפונטים, צבעים, זויות, רקע, טקסטורה
לפעמים הכותרת מגיעה עם ניקוד ולפעמים לא.
גם תנאי הצילום משפיעים על הזיהוי, כמובן
בדקתי את הנושא ושחקתי קצת עם
Google Cloud Vision API
שמציע הרבה שירותים שקשורים לעיבוד תמונה ובינהם גם
OCR
הסיבה שבחרתי בו זה
שיש לו תמיכה בעברית – שזה מרבית הספרים שאנשים תורמים.
והוא גם יודע לזהות את השפה עצמה
וכמובן שלגוגל יש טריינינג סט עצום עם אין ספור צורות כתב
עכשיו, ה-
Vision API
מציע שתי וריאציות של
OCR
זיהוי טקסט בכל תמונה
זיהוי טקסט במסמכים
אני בדקתי את שתי השיטות, ולמרבה הפלא השיטה של
המסמכים נתנה תוצאות יותר טובות.
היו שני בעיות מרכזיות:
הטקסט שקיבלתי לא היה לגמרי מדויק, כמו שרואים בתמונה פה, ורשימת הספרים שלי מכילה כותרות מדויקות.
הבעייה השניה היא שעדיין צריך לצלם כל ספר בנפרד
עוד דוגמה לטקסט שחילץ מנוע ה-
OCR
ועוד אחד
ואת זה אני אישית הכי אוהב
אבל תכלס אפשר להבין למה ה
OCR
התקשה פה – בגלל ההשתקפות של האור
בקיצור, אחרי לא מעט ניסוי ותעייה, הייתי ממש קרוב לוותר על כל עניין ה-
OCR
ובכל זאת, אותי לימדו ש
אם קצת קשה אז מוותרים
ובלי קשר, עודד אמר להרים ידיים
אבל אז הגיע רגע האהה!
מה שהתגלה בפני, אני לא ממש חייב שזיהוי הכותרת יתן תוצאות מדויקות.
Accuracy – בכמה צדקתי (חיובי או שלילי) באופן יחסי
Precision – מכל הניחושים שעשיתי, כמה היו נכונים
Recall – כמה פספסתי ביחס לכל מה שהייתי צריך למצוא
F1 score - irrelevant
Accuracy – how many did I get right in terms of TP + TN
Precision – out of those I got, how many were right
Recall – out of all right ones, how many did If get
F1 score - irrelevant
עכשיו, למה אמרתי ש
Accuracy
פחות חשוב מ-precision?
מה אם, במקום לחפש את הטקסט שזיהה ה-
OCR
בעמודת הכותרות שברשימת כל הספרים,
אני יעבור על כל הספרים במאגר, יבצע גם עבורם תהליך של
OCR
ואת התוצאה אוסיף כעמודה נוספת וכך זה נראה!
ואז, כשמגיע ספר חדש, אני כרגיל מצלם אותו ומחלץ ממנו את הכותרת
אבל בנגוד למקודם, אני מחפש את הכותרת בעמודה החדשה הזו
ואז בעצם אני משווה תפוחים לתפוחים
ניסיתי את זה, אבל פה נתקלתי בבעיה אחרת והיא שגם תוצאות ה-
OCR
לא היו עקביות – בגלל שהתמונה הרשמית של ספר שונה מזו שאני מצלם ואז הכותרת המזוהה יכולה להיות קצת שונה ו/או עם שגיאות כתיב שונות.
ולכן בשביל מצבים כאלה השתמשתי ב
Elasticsearch
ספיציפית בפיצ'ר של
Fuzzy search
שמאפשר חיפוש עם שגיאות כתיב ואי-דיוקים אחרים
השיטה שבה אלסטיק עושה שימוש נקראת
Levenshtein distance
האלגוריתם של לבנשטיין עובד ע"י ספירת
כמו השינויים שמילה צריכה לעבור בשביל להפוך למילה אחרת.
Elasticsearch
מאפשר לעשות שאילתה מהסוג הזה תוך כדי ציון המרחק המקסימלי הנסבל,
ותוצאות החיפוש מגיעות עם
Score
שנו אני משתמש אח"כ בשביל למיין את התוצאות
ועם כל זה, עדיין היו טעויות פה ושם, וכאן נכנסת הבינה האנושית.
כלומר, חלק מהתהליך של זיהוי ספרים יערב בני אדם.
לזה יש שקוראים
HITL= Human In The Loop
והרעיון הזה לא חדש בכלל – למשל בכביש 6 הוא קיים מאז ומעולם בשביל זיהוי לוחיות רישוי.
מה לגבי הבעיה של לצלם כל ספר בנפרד? למה בעצם לא לצלם ערימה של ספרים במכה?
זה בעייתי כי ה-או-סי-אר יבלבל בין הכותרות.
אבל יש פתרון והוא שימוש בשירות אחר של
Google Cloud Vision
שמאפשר לי למצוא אובייקטים בודדים בתמונה אחת
ואז בעצם אני מפרק תמונה אחת להרבה תמונות קטנות ומשם אני מבצע את התהליך שכיסינו עד עכשיו
לשירות הזה קוראים
Object Detection
דיברנו קצת על מטריקות ביחס לשלבי הזיהוי שלנו,
עכשיו זה הזמן לראות איזה מטריקה מתאימה לאיזה שלב
I care less about FP as long as the TP is high, because I can always ignore FP + the OCR and Elastic won't find text and books respectively anyway!
Here we need precision – as long as we get consistent results with the catalog
We need high recall, because we don't want to miss the actual book, even if it means more HITL!
The more precise, the less we need HITL
999 TN doesn't help much, if the actual book was not returned!
I can increase the FUZZINESS parameter => lots of FP
A too low value => FN
בוא נראה איך זה עובד...
Open the IMAGE file, then
Copy it to the folder
Show how the process works
Show the BLOB containers
Show the Jobs index – POSTMAN
Open the email and follow the link to Open the WEB UI
זה בקצרה מה שקורא
...
בסוף, אני כמובן משתמש ב-
HaaS=Human as a Service
Detect individual books – how are images uploaded
Textify books
Search in Elasticsearch
מבחינת עלויות, הפרויקט הזה לא הרבה עולה.
למשל, בגוגל קלאוד אפשר לבצע 1000 פעולות
OCR
בחודש בחינם
בשביל יותר מזה, אני מתחיל לשלם 1.5$ עבור כל 1000 נוספים
וזה לא נורא בכלל
לגבי אז'ור, עיקר השימוש שלי הוא ב-
Storage & Network
וגם שם אני לא עובר את המכסה החינמית
ומה שאני אהבתי לראות בפרויקט הזה הוא איך השילוב של בינה מלאכותית
עם כלים שונים וכמובן, עם בינה טבעית, יכול לתת כיסוי מלא יותר ממה ש-
pure ML
היה נותן לבד
כלומר, מעבר לחשיבות הגדולה שיש בבני אדם בתהליך ה-
Training
השילוב של בני אדם בתהליך עסקי הוא חשוב לא פחות
לא צריך להיות אשף מתימטיקה
שירותי הענן הם פשוטים מאוד לשימוש ולעיתים זולים, אבל
חשוב לבחור לאיזה מטריקות להתייחס ובקונטקסט הנכון
וכמובן, השילוב של שתי סוגי האינטיליגנציה הוא שילוב מנצח
אז מה היה לנו?
התחלנו בחיפוש ידני וקצת קופי פייסט
וסיימנו בתהליך כמעט אוטומטי עם קצת מעורבות אנושית.
מבחינת המשכיות הפרויקט, מן הסתם ננסה להתחרות ב-
Amazon
ונקנה אותם
ולהקים חנות אינטרנטית שלמה
וזה הזמן להגיד שאנחנו מחפשים מתנדבים שייעזרו בפיתוח - אז צרו איתי קשר אם אתם בעניין.
יש מלא עבודה לעשות.
Not using Google, because:
1. I don’t get scores for each result
2. I’ll need to scrape Google (and later the source site) anyway, which I’m not sure is legal. Anyhow, see this regarding bot detection and blocking.
3. Still need to maintain my own catalog
4. Side-covers are photographed + inaccurate results to the point of it being inefficient