1. סקירה כללית
ברוכים הבאים לסיווג טקסט עם TensorFlow Lite ו-codelab של Firebase. ב-Codelab הזה תלמדו איך להשתמש ב-TensorFlow Lite וב-Firebase כדי לאמן ולפרוס מודל לסיווג טקסט באפליקציה שלכם. ה-Codelab הזה מבוסס על הדוגמה הזו של TensorFlow Lite.
סיווג טקסט הוא תהליך הקצאת תגים או קטגוריות לטקסט בהתאם לתוכן שלו. זוהי אחת המשימות הבסיסיות בעיבוד שפה טבעית (NLP), עם יישומים רחבים כמו ניתוח סנטימנטים, תיוג נושאים, זיהוי ספאם וזיהוי כוונה.
ניתוח סנטימנטים הוא פרשנות וסיווג של רגשות (חיוביים, שליליים וניטרליים) בנתוני טקסט באמצעות טכניקות לניתוח טקסט. ניתוח סנטימנטים מאפשר לעסקים לזהות את הסנטימנטים של הלקוחות כלפי מוצרים, מותגים או שירותים בשיחות ובמשוב באינטרנט.
במדריך הזה תלמדו איך ליצור מודל למידת מכונה לניתוח סנטימנטים, ובמיוחד לסיווג טקסט כחיובי או שלילי. זו דוגמה לסיווג בינארי – או שני סיווגים, – בעיה חשובה ורלוונטית ללמידת מכונה.
מה תלמדו
- אימון מודלים לניתוח סנטימנטים של TF Lite באמצעות 'יוצר המודלים של TF Lite'
- פריסת מודלים של 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 ולוחצים על הפעלה ( ) בסרגל הכלים של Android Studio.
האפליקציה אמורה לפעול במכשיר. יש בו רק ממשק משתמש פשוט שמקל על השילוב והבדיקה של מודלים לסיווג טקסט בשלבים הבאים. בשלב הזה, אם תנסו לחזות את נטיות הדעת, האפליקציה תחזיר רק כמה תוצאות דמה.
5. יצירת פרויקט במסוף Firebase
מוסיפים את Firebase לפרויקט
- נכנסים למסוף Firebase.
- בוחרים באפשרות הוספת פרויקט.
- בוחרים או מזינים שם לפרויקט.
- מבצעים את שאר שלבי ההגדרה במסוף 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.
7. הפעלת האפליקציה באמצעות Firebase
עכשיו, אחרי שהגדרתם את הפלאגין google-services
עם קובץ ה-JSON, אתם מוכנים להריץ את האפליקציה עם Firebase. מחברים את מכשיר Android ולוחצים על הפעלה ( ) בסרגל הכלים של Android Studio.
האפליקציה אמורה להיפתח במכשיר. בשלב הזה, בניית האפליקציה עדיין אמורה להתבצע בהצלחה.
8. לאמן מודל לניתוח סנטימנטים
אנחנו נשתמש ב-TensorFlow Lite Model Maker כדי לאמן מודל לסיווג טקסט כדי לחזות סנטימנט של טקסט מסוים.
השלב הזה מוצג בתור notebook של Python שאפשר לפתוח ב-Google Colab. אפשר לבחור באפשרות Runtime > Run all כדי להריץ את כל הקוד ב-notebook בבת אחת.
פתיחה ב-Colab
בסיום השלב הזה, יהיה לכם מודל של ניתוח סנטימנטים ב-TensorFlow Lite, שזמין לפריסה באפליקציה לנייד.
9. פריסת מודל ב-Firebase ML
פריסת מודל ב-Firebase ML מועילה משתי סיבות עיקריות:
- אנחנו יכולים לשמור על גודל קטן של התקנת האפליקציה ולהוריד את המודל רק אם יש צורך
- אפשר לעדכן את המודל באופן קבוע ובמחזור גרסאות שונה מזה של האפליקציה כולה
אפשר לפרוס את המודל דרך המסוף או באופן פרוגרמטי באמצעות ה-SDK של Firebase Admin. בשלב הזה נפרוס דרך המסוף.
קודם כול, פותחים את מסוף Firebase ולוחצים על 'למידת מכונה' בחלונית הניווט הימנית. צריך ללחוץ על 'שנתחיל?' אם אתם פותחים קבצים בפעם הראשונה. לאחר מכן עוברים אל 'בהתאמה אישית' ולוחצים על הלחצן 'הוספת מודל'.
כשמוצגת בקשה לעשות את זה, נותנים שם למודל 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 לסנכרן את הפרויקט, בוחרים באפשרות סנכרון עכשיו.
אתחול של מסווג טקסט
לאחר מכן נטען את מודל ניתוח הסנטימנטים שהורדנו מ-Firebase באמצעות NLClassifier
של ספריית המשימות.
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
, אפשר להריץ ניתוח סנטימנטים באמצעות הפעלת method אחת.
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 ולוחצים על הפעלה ( ) בסרגל הכלים של Android Studio.
האפליקציה אמורה לחזות בצורה נכונה את הסנטימנט של הביקורת על הסרט שתזינו.
13. שיפור האפליקציה באמצעות תכונות נוספות של Firebase
בנוסף לאירוח המודלים של TFLite, Firebase מספק כמה תכונות נוספות שיעזרו לכם לשפר את התרחישים לדוגמה של למידת המכונה:
- Firebase Performance Monitoring כדי למדוד את מהירות ההסקה של המודל שפועל במכשיר של המשתמשים.
- שימוש ב-Firebase Analytics לצורך מדידת הביצועים של המודל בסביבת הייצור, על ידי מדידת תגובת המשתמשים.
- Firebase A/B Testing כדי לבדוק כמה גרסאות של המודל
- זכרתם שאימנו קודם שתי גרסאות של מודל TFLite? בדיקת A/B היא דרך טובה לגלות איזו גרסה מניבה ביצועים טובים יותר בסביבת הייצור!
מידע נוסף על השימוש בתכונות האלה באפליקציה זמין ב-Codelabs בהמשך:
14. כל הכבוד!
בקודלאב הזה למדתם איך לאמן מודל 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