1. סקירה כללית
ברוכים הבאים ל-codelab בנושא סיווג טקסט באמצעות TensorFlow Lite ו-Firebase. ב-Codelab הזה תלמדו איך להשתמש ב-TensorFlow Lite וב-Firebase כדי לאמן מודל לסיווג טקסט ולפרוס אותו באפליקציה. ה-Codelab הזה מבוסס על הדוגמה הזו של TensorFlow Lite.
סיווג טקסט הוא תהליך של הקצאת תגים או קטגוריות לטקסט בהתאם לתוכן שלו. זהו אחד מהתחומים הבסיסיים בעיבוד שפה טבעית (NLP) עם יישומים רחבים כמו ניתוח סנטימנט, תיוג נושאים, זיהוי ספאם וזיהוי כוונות.
ניתוח סנטימנטים הוא תהליך של פירוש וסיווג של רגשות (חיוביים, שליליים וניטרליים) בנתוני טקסט באמצעות טכניקות של ניתוח טקסט. ניתוח סנטימנט מאפשר לעסקים לזהות את הסנטימנט של הלקוחות כלפי מוצרים, מותגים או שירותים בשיחות ובמשוב באינטרנט.
במדריך הזה מוסבר איך ליצור מודל למידת מכונה לניתוח סנטימנטים, ובפרט איך לסווג טקסט כחיובי או כשלילי. זו דוגמה לסיווג בינארי – או סיווג לשתי קטגוריות – סוג חשוב של בעיה בלמידת מכונה שיש לה שימושים רבים.
מה תלמדו
- אימון מודלים של ניתוח סנטימנט ב-TF Lite באמצעות TF Lite Model Maker
- פריסת מודלים של TF Lite ב-Firebase ML וגישה אליהם מהאפליקציה
- שילוב של מודלים של ניתוח סנטימנטים ב-TF Lite באפליקציה באמצעות ספריית המשימות של TF Lite
מה צריך
- הגרסה האחרונה של Android Studio.
- קוד לדוגמה.
- מכשיר בדיקה עם Android מגרסה 5.0 ומעלה ו-Google Play Services מגרסה 9.8 ומעלה, או אמולטור עם Google Play Services מגרסה 9.8 ומעלה
- אם משתמשים במכשיר, צריך כבל חיבור.
איך תשתמשו במדריך הזה?
איך היית מדרג את חוויית הפיתוח שלך באפליקציות ל-Android?
2. קבלת קוד לדוגמה
משכפלים את המאגר ב-GitHub משורת הפקודה.
$ git clone https://github.com/FirebaseExtended/codelab-textclassification-android.git
אם לא התקנתם את git, אתם יכולים גם להוריד את פרויקט הדוגמה מדף GitHub שלו או בלחיצה על הקישור הזה.
3. ייבוא של אפליקציה למתחילים
ב-Android Studio, בוחרים את הספרייה codelab-textclassification-android-master
( ) מתוך ההורדה של קוד לדוגמה (File > Open > .../codelab-textclassification-android-master/start).
עכשיו הפרויקט ההתחלתי אמור להיפתח ב-Android Studio.
4. הפעלת האפליקציה למתחילים
אחרי שיובא הפרויקט ל-Android Studio, אפשר להריץ את האפליקציה בפעם הראשונה. מחברים את מכשיר Android ולוחצים על Run (הפעלה) ( ) בסרגל הכלים של Android Studio.
האפליקציה אמורה להיפתח במכשיר. הוא כולל רק ממשק משתמש פשוט שמקל על השילוב של מודלים לסיווג טקסט ובדיקתם בשלבים הבאים. בשלב הזה, אם תנסו לחזות את הסנטימנט, האפליקציה תחזיר רק כמה תוצאות פיקטיביות.
5. יצירת פרויקט במסוף Firebase
הוספת Firebase לפרויקט
- עוברים אל מסוף Firebase.
- בוחרים באפשרות הוספת פרויקט.
- בוחרים או מזינים שם פרויקט.
- ממשיכים לבצע את שאר שלבי ההגדרה במסוף Firebase, ואז לוחצים על Create project (יצירת פרויקט) (או על Add Firebase (הוספת Firebase) אם משתמשים בפרויקט קיים ב-Google).
6. הוספת Firebase לאפליקציה
- במסך הסקירה הכללית של הפרויקט החדש, לוחצים על סמל Android כדי להפעיל את תהליך ההגדרה.
- מזינים את שם החבילה של ה-codelab:
org.tensorflow.lite.codelabs.textclassification
הוספת קובץ google-services.json לאפליקציה
אחרי שמוסיפים את שם החבילה ובוחרים באפשרות Register** (הרשמה), לוחצים על Download google-services.json** (הורדת google-services.json) כדי לקבל את קובץ ההגדרות של Firebase Android, ואז מעתיקים את הקובץ google-services.json
לספרייה *app
* בפרויקט.
הוספת הפלאגין google-services לאפליקציה
פועלים לפי ההוראות במסוף Firebase לעדכון הקבצים build.gradle.kts
כדי להוסיף את Firebase לאפליקציה.
הפלאגין google-services משתמש בקובץ google-services.json כדי להגדיר את האפליקציה לשימוש ב-Firebase.
סנכרון הפרויקט עם קובצי gradle
כדי לוודא שכל התלויות זמינות לאפליקציה, בשלב הזה צריך לסנכרן את הפרויקט עם קובצי gradle. בסרגל הכלים של Android Studio, בוחרים באפשרות File > Sync Project with Gradle Files (קובץ > סנכרון הפרויקט עם קובצי Gradle).
7. הפעלת האפליקציה עם Firebase
אחרי שמגדירים את התוסף google-services
באמצעות קובץ ה-JSON, אפשר להפעיל את האפליקציה עם Firebase. מחברים את מכשיר Android ולוחצים על Run (הפעלה) ( ) בסרגל הכלים של Android Studio.
האפליקציה אמורה להיפתח במכשיר. בשלב הזה, האפליקציה עדיין אמורה להיבנות בהצלחה.
8. אימון מודל לניתוח סנטימנטים
נשתמש ב-TensorFlow Lite Model Maker כדי לאמן מודל לסיווג טקסט, במטרה לחזות את הסנטימנט של טקסט נתון.
השלב הזה מוצג כ-notebook של Python שאפשר לפתוח ב-Google Colab. אפשר לבחור באפשרות Runtime > Run all (זמן ריצה > הפעלת הכול) כדי להריץ את כל ה-notebook בבת אחת.
פתיחה ב-Colab
אחרי שתסיימו את השלב הזה, יהיה לכם מודל לניתוח סנטימנט של TensorFlow Lite שמוכן לפריסה באפליקציה לנייד.
9. פריסת מודל ב-Firebase ML
יש שתי סיבות עיקריות לכך שכדאי לפרוס מודל ל-Firebase ML:
- אנחנו יכולים לשמור על גודל קטן של התקנת האפליקציה ולהוריד את המודל רק אם יש צורך
- אפשר לעדכן את המודל באופן קבוע ובמחזור פרסום שונה מזה של האפליקציה כולה
אפשר לפרוס את המודל דרך המסוף או באופן פרוגרמטי באמצעות Firebase Admin SDK. בשלב הזה נבצע פריסה דרך המסוף.
קודם פותחים את מסוף Firebase ולוחצים על Machine Learning (למידת מכונה) בחלונית הניווט הימנית. אם זו הפעם הראשונה שאתם פותחים את הכלי הזה, לוחצים על 'שנתחיל?'. לאחר מכן עוברים אל 'בהתאמה אישית' ולוחצים על הלחצן 'הוספת מודל'.
כשמוצגת בקשה, נותנים למודל את השם sentiment_analysis
ומעלים את הקובץ שהורדתם מ-Colab בשלב הקודם.
10. הורדת מודל מ-Firebase ML
יכול להיות שיהיה לכם קשה להחליט מתי להוריד את המודל המרוחק מ-Firebase לאפליקציה, כי מודלים של TFLite יכולים להיות גדולים יחסית. הכי טוב להימנע מטעינת המודל באופן מיידי כשהאפליקציה מופעלת, כי אם המודל ישמש רק לתכונה אחת והמשתמש אף פעם לא ישתמש בתכונה הזו, נוריד כמות משמעותית של נתונים ללא סיבה. אפשר גם להגדיר אפשרויות הורדה, כמו אחזור מודלים רק כשיש חיבור ל-Wi-Fi. אם רוצים לוודא שהמודל יהיה זמין גם ללא חיבור לרשת, חשוב גם לארוז אותו ללא האפליקציה כגיבוי.
כדי לפשט את התהליך, נסיר את המודל שכלול כברירת מחדל ונוריד תמיד מודל מ-Firebase כשהאפליקציה תופעל בפעם הראשונה. כך, כשמריצים ניתוח סנטימנט, אפשר להיות בטוחים שההסקה מתבצעת באמצעות המודל שסופק מ-Firebase.
בקובץ app/build.gradle.kts
, מוסיפים את התלות של Firebase Machine Learning.
app/build.gradle.kts
חיפוש התגובה הזו:
// TODO 1: Add Firebase ML dependency
לאחר מכן מוסיפים:
implementation(platform("com.google.firebase:firebase-bom:32.0.0"))
implementation("com.google.firebase:firebase-ml-modeldownloader:24.1.2")
כש-Android Studio מבקש לסנכרן את הפרויקט, בוחרים באפשרות Sync Now (סנכרון עכשיו).
עכשיו נוסיף קוד להורדת המודל מ-Firebase.
MainActivity.java
חיפוש התגובה הזו:
// TODO 2: Implement a method to download TFLite model from Firebase
לאחר מכן מוסיפים:
/** Download model from Firebase ML. */
private synchronized void downloadModel(String modelName) {
CustomModelDownloadConditions conditions = new CustomModelDownloadConditions.Builder()
.requireWifi()
.build();
FirebaseModelDownloader.getInstance()
.getModel("sentiment_analysis", DownloadType.LOCAL_MODEL, conditions)
.addOnSuccessListener(model -> {
try {
// TODO 6: Initialize a TextClassifier with the downloaded model
predictButton.setEnabled(true);
} catch (IOException e) {
Log.e(TAG, "Failed to initialize the model. ", e);
Toast.makeText(
MainActivity.this,
"Model initialization failed.",
Toast.LENGTH_LONG)
.show();
predictButton.setEnabled(false);
}
})
.addOnFailureListener(e -> {
Log.e(TAG, "Failed to download the model. ", e);
Toast.makeText(
MainActivity.this,
"Model download failed, please check your connection.",
Toast.LENGTH_LONG)
.show();
}
);
}
לאחר מכן, קוראים לשיטה downloadModel
בשיטה onCreate
של הפעילות.
MainActivity.java
חיפוש התגובה הזו:
// TODO 3: Call the method to download TFLite model
לאחר מכן מוסיפים:
downloadModel("sentiment_analysis");
11. הטמעת המודל באפליקציה
ספריית המשימות של TensorFlow Lite עוזרת לשלב מודלים של TensorFlow Lite באפליקציה בכמה שורות קוד בלבד. אנחנו נאכלס מופע של NLClassifier
באמצעות מודל TensorFlow Lite שהורד מ-Firebase. לאחר מכן נשתמש בו כדי לסווג את קלט הטקסט ממשתמשי האפליקציה ולהציג את התוצאה בממשק המשתמש.
הוספת יחסי תלות
עוברים לקובץ Gradle של האפליקציה ומוסיפים את ספריית המשימות של TensorFlow Lite (טקסט) לתלות של האפליקציה.
app/build.gradle
חיפוש התגובה הזו:
// TODO 4: Add TFLite Task API (Text) dependency
לאחר מכן מוסיפים:
implementation("org.tensorflow:tensorflow-lite-task-text:0.3.0")
כש-Android Studio מבקש לסנכרן את הפרויקט, בוחרים באפשרות Sync Now (סנכרון עכשיו).
הפעלת סיווג טקסט
לאחר מכן נטען את מודל ניתוח הסנטימנטים שהורד מ-Firebase באמצעות NLClassifier
של Task Library.
MainActivity.java
נצהיר על משתנה מופע NLClassifier. חיפוש התגובה הזו:
// TODO 5: Define a NLClassifier variable
לאחר מכן מוסיפים:
private NLClassifier textClassifier;
מאתחלים את המשתנה textClassifier
באמצעות מודל ניתוח הסנטימנט שהורד מ-Firebase. חיפוש התגובה הזו:
// TODO 6: Initialize a TextClassifier with the downloaded model
לאחר מכן מוסיפים:
textClassifier = NLClassifier.createFromFile(model.getFile());
סיווג טקסט
אחרי שמגדירים את המופע של textClassifier
, אפשר להריץ ניתוח סנטימנט באמצעות קריאה אחת בלבד לשיטה.
MainActivity.java
חיפוש התגובה הזו:
// TODO 7: Run sentiment analysis on the input text
לאחר מכן מוסיפים:
List<Category> results = textClassifier.classify(text);
הטמעה של עיבוד תמונה (Post Processing)
לבסוף, נמיר את הפלט של המודל לטקסט תיאורי שיוצג במסך.
MainActivity.java
חיפוש התגובה הזו:
// TODO 8: Convert the result to a human-readable text
מסירים את הקוד שיוצר את הטקסט של התוצאה הפיקטיבית:
String textToShow = "Dummy classification result.\n";
לאחר מכן מוסיפים:
String textToShow = "Input: " + text + "\nOutput:\n";
for (int i = 0; i < results.size(); i++) {
Category result = results.get(i);
textToShow += String.format(" %s: %s\n", result.getLabel(),
result.getScore());
}
textToShow += "---------\n";
12. הרצת האפליקציה הסופית
הטמעתם את מודל ניתוח הסנטימנטים באפליקציה, אז בואו נבדוק אותו. מחברים את מכשיר Android ולוחצים על Run (הפעלה) ( ) בסרגל הכלים של Android Studio.
האפליקציה צריכה לחזות בצורה נכונה את הסנטימנט של הביקורת על הסרט שתזינו.
13. שיפור האפליקציה באמצעות תכונות נוספות של Firebase
בנוסף לאירוח מודלים של TFLite, פלטפורמת Firebase מספקת כמה תכונות נוספות שיכולות לשפר את תרחישי השימוש שלכם בלמידת מכונה:
- מעקב אחר ביצועים ב-Firebase כדי למדוד את מהירות ההסקה של המודל שפועל במכשיר של המשתמשים.
- Firebase Analytics כדי למדוד את הביצועים של המודל בסביבת הייצור על ידי מדידת התגובה של המשתמשים.
- Firebase A/B Testing כדי לבדוק כמה גרסאות של המודל
- זוכר שאמנו קודם שתי גרסאות של מודל TFLite? בדיקות A/B הן דרך טובה לגלות איזו גרסה מניבה ביצועים טובים יותר בסביבת הייצור.
כדי לקבל מידע נוסף על השימוש בתכונות האלה באפליקציה, אפשר לעיין ב-codelabs הבאים:
14. כל הכבוד!
ב-codelab הזה למדתם איך לאמן מודל TFLite לניתוח סנטימנטים ולפרוס אותו באפליקציה לנייד באמצעות Firebase. כדי לקבל מידע נוסף על TFLite ו-Firebase, אפשר לעיין בדוגמאות אחרות של TFLite ובמדריכים בנושא תחילת העבודה עם Firebase.
מה נכלל
- TensorFlow Lite
- Firebase ML
השלבים הבאים
- מדידת מהירות ההסקה של המודל באמצעות מעקב אחר ביצועים ב-Firebase.
- פריסת המודל מ-Colab ישירות ל-Firebase באמצעות Firebase ML Model Management API.
- מוסיפים מנגנון שמאפשר למשתמשים לשלוח משוב על תוצאת החיזוי, ומשתמשים ב-Firebase Analytics כדי לעקוב אחרי המשוב מהמשתמשים.
- מבצעים בדיקת A/B למודל Average Word Vector ולמודל MobileBERT באמצעות Firebase A/B Testing.
מידע נוסף
- מאמרי עזרה בנושא למידת מכונה ב-Firebase
- חומרי עזר בנושא TensorFlow Lite
- מדידת ביצועי האפליקציה באמצעות Firebase
- מודלים של בדיקות A/B עם Firebase