הוספת סיווג טקסט במכשיר לאפליקציה באמצעות TensorFlow Lite ו-Firebase – Android Codelab

1. סקירה כללית

text-classification-result.png

ברוכים הבאים לסיווג טקסט עם 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 (android_studio_folder.png) מההורדה של קוד לדוגמה (File‏ > Open‏ > .../codelab-textclassification-android-master/start).

הפרויקט להתחלה אמור להיות פתוח ב-Android Studio.

4. הפעלת האפליקציה לתחילת הפעולה

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

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

2fb4e69fafb2e3ed.png

5. יצירת פרויקט במסוף Firebase

מוסיפים את Firebase לפרויקט

  1. נכנסים למסוף Firebase.
  2. בוחרים באפשרות הוספת פרויקט.
  3. בוחרים או מזינים שם לפרויקט.
  4. מבצעים את שאר שלבי ההגדרה במסוף Firebase, ואז לוחצים על 'יצירת פרויקט' (או על 'הוספת Firebase', אם משתמשים בפרויקט Google קיים).

6. הוספת Firebase לאפליקציה

  1. במסך הסקירה הכללית של הפרויקט החדש, לוחצים על סמל Android כדי להפעיל את תהליך ההגדרה.
  2. יש להזין את שם החבילה של ה-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 מועילה משתי סיבות עיקריות:

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

אפשר לפרוס את המודל דרך המסוף או באופן פרוגרמטי באמצעות ה-SDK של Firebase Admin. בשלב הזה נפרוס דרך המסוף.

קודם כול, פותחים את מסוף Firebase ולוחצים על 'למידת מכונה' בחלונית הניווט הימנית. צריך ללחוץ על 'שנתחיל?' אם אתם פותחים קבצים בפעם הראשונה. לאחר מכן עוברים אל 'בהתאמה אישית' ולוחצים על הלחצן 'הוספת מודל'.

כשמוצגת בקשה לעשות את זה, נותנים שם למודל sentiment_analysis ומעלים את הקובץ שהורדתם מ-Colab בשלב הקודם.

3c3c50e6ef12b3b.png

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.

האפליקציה אמורה לחזות בצורה נכונה את הסנטימנט של הביקורת על הסרט שתזינו.

img/text-classification-result.png

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.

מידע נוסף

יש לך שאלה?

דיווח על בעיות