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

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

classification_result_screen.png

ברוכים הבאים לסיווג טקסט עם TensorFlow Lite ו-codelab של Firebase. בקודלאב הזה תלמדו איך להשתמש ב-TensorFlow Lite וב-Firebase כדי לאמן ולפרוס מודל לסיווג טקסט באפליקציה. הקודלאב הזה מבוסס על הדוגמה הזו ל-TensorFlow Lite.

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

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

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

מה תלמדו

  • אימון מודל ניתוח סנטימנטים של TF Lite באמצעות יוצר המודלים של TF Lite
  • פריסת מודלים של TF Lite ב-Firebase ML וגישה אליהם מהאפליקציה
  • לעקוב אחר משוב המשתמשים כדי למדוד את דיוק המודל באמצעות Firebase Analytics
  • מעקב אחר ביצועי מודל הפרופיל באמצעות 'מעקב אחר ביצועים ב-Firebase'
  • בחירת אחד מכמה מודלים שנפרסו לטעינה דרך Remote Config
  • התנסות במודלים שונים באמצעות Firebase A/B Testing

מה צריך

  • Xcode 11 (או גרסה מתקדמת יותר)
  • CocoaPods 1.9.1 (או גרסה מתקדמת יותר)

איך תוכלו להשתמש במדריך הזה?

לקרוא את המאמר לקרוא את המאמר ולבצע את התרגילים

איזה דירוג מגיע לחוויה שלך עם בניית אפליקציות ל-Android?

מתחילים בינונית בקיאים

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

הוספת Firebase לפרויקט

  1. נכנסים למסוף Firebase.
  2. בוחרים באפשרות Create New Project (יצירת פרויקט חדש) ומזינים את השם 'Firebase ML iOS Codelab'.

3. לקבלת הפרויקט לדוגמה

הורדת הקוד

מתחילים בהעתקה (cloning) של הפרויקט לדוגמה והרצה של pod update בספריית הפרויקט:

git clone https://github.com/FirebaseExtended/codelab-textclassification-ios.git
cd codelab-textclassification-ios
pod install --repo-update

אם לא התקנתם את Git, תוכלו גם להוריד את הפרויקט לדוגמה מהדף שלו ב-GitHub או ללחוץ על הקישור הזה. אחרי שתורידו את הפרויקט, תוכלו להריץ אותו ב-Xcode ולשחק עם סיווג הטקסט כדי להבין איך הוא עובד.

מגדירים את Firebase

פועלים לפי המסמכים כדי ליצור פרויקט Firebase חדש. לאחר שמקבלים את הפרויקט, מורידים את קובץ הפרויקט GoogleService-Info.plist ממסוף Firebase וגוררים אותו לרמה הבסיסית (root) של פרויקט Xcode.

9efb62a92f27e939.png

מוסיפים את Firebase ל-Podfile ומפעילים את pod install.

pod 'FirebaseMLModelDownloader', '9.3.0-beta'

בשיטה didFinishLaunchingWithOptions של AppDelegate, מייבאים את Firebase בחלק העליון של הקובץ

import FirebaseCore

וצריך להוסיף קריאה כדי להגדיר את Firebase.

FirebaseApp.configure()

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

4. אימון מודל לניתוח סנטימנטים

אנחנו נשתמש ב-TensorFlow Lite Model Maker כדי לאמן מודל לסיווג טקסט כדי לחזות סנטימנט של טקסט מסוים.

השלב הזה מוצג כ-notebook של Python שאפשר לפתוח ב-Google Colab.

פתיחה ב-Colab

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

5. פריסת מודל ב-Firebase ML

יש שתי סיבות עיקריות לפרוס מודל ב-Firebase ML:

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

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

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

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

3c3c50e6ef12b3b.png

6. הורדת מודל מ-Firebase ML

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

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

בחלק העליון של ModelLoader.swift, מייבאים את מודול Firebase.

import FirebaseCore
import FirebaseMLModelDownloader

לאחר מכן מטמיעים את השיטות הבאות.

static func downloadModel(named name: String,
                          completion: @escaping (CustomModel?, DownloadError?) -> Void) {
  guard FirebaseApp.app() != nil else {
    completion(nil, .firebaseNotInitialized)
    return
  }
  guard success == nil && failure == nil else {
    completion(nil, .downloadInProgress)
    return
  }
  let conditions = ModelDownloadConditions(allowsCellularAccess: false)
  ModelDownloader.modelDownloader().getModel(name: name, downloadType: .localModelUpdateInBackground, conditions: conditions) { result in
          switch (result) {
          case .success(let customModel):
                  // Download complete.
                  // The CustomModel object contains the local path of the model file,
                  // which you can use to instantiate a TensorFlow Lite classifier.
                  return completion(customModel, nil)
          case .failure(let error):
              // Download was unsuccessful. Notify error message.
            completion(nil, .downloadFailed(underlyingError: error))
          }
  }
}

ב-viewDidLoad של ViewController.swift, צריך להחליף את הקריאה לפונקציה loadModel() בשיטה החדשה שלנו להורדת מודל.

// Download the model from Firebase
print("Fetching model...")
ModelLoader.downloadModel(named: "sentiment_analysis") { (customModel, error) in
  guard let customModel = customModel else {
    if let error = error {
      print(error)
    }
    return
  }

  print("Model download complete")

  // TODO: Initialize an NLClassifier from the downloaded model
}

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

7. שילוב המודל באפליקציה

בעזרת ספריית המשימות של TensorFlow Lite תוכלו לשלב מודלים של TensorFlow Lite באפליקציה שלכם באמצעות כמה שורות קוד בלבד. ניצור מופע של TFLNLClassifier באמצעות מודל TensorFlow Lite שהורדנו מ-Firebase. אחר כך נשתמש בו כדי לסווג את קלט הטקסט ממשתמשי האפליקציה ולהציג את התוצאה בממשק המשתמש.

הוספת יחסי התלות

עוברים אל Podfile של האפליקציה ומוסיפים את TensorFlow Lite Task Library‏ (Text) ליחסי התלות של האפליקציה. חשוב להוסיף את יחסי התלות בהצהרה target 'TextClassification'.

pod 'TensorFlowLiteTaskText', '~> 0.2.0'

מריצים את pod install כדי להתקין את התלות החדשה.

איך מפעילים מסווג טקסט

לאחר מכן נטענו את המודל לניתוח סנטימנטים שהורדתם מ-Firebase באמצעות NLClassifier של ספריית המשימות.

ViewController.swift

נכריז על משתנה מופע של TFLNLClassifier. בחלק העליון של הקובץ, מייבאים את התלות החדשה:

import TensorFlowLiteTaskText

מחפשים את התגובה הזו מעל לשיטה ששינינו בשלב האחרון:

// TODO: Add a TFLNLClassifier property.

מחליפים את TODO בקוד הבא:

private var classifier: TFLNLClassifier?

מאתחלים את המשתנה textClassifier באמצעות מודל ניתוח הרגשיות שהורדתם מ-Firebase. מאתרים את התגובה שהוספנו בשלב האחרון:

// TODO: Initialize an NLClassifier from the downloaded model

מחליפים את TODO בקוד הבא:

let options = TFLNLClassifierOptions()
self.classifier = TFLNLClassifier.nlClassifier(modelPath: customModel.path, options: options)

סיווג טקסט

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

ViewController.swift

בשיטה classify(text:), מחפשים את התגובה לביצוע משימות:

// TODO: Run sentiment analysis on the input text

מחליפים את התגובה בקוד הבא:

guard let classifier = self.classifier else { return }

// Classify the text
let classifierResults = classifier.classify(text: text)

// Append the results to the list of results
let result = ClassificationResult(text: text, results: classifierResults)
results.append(result)

8. הפעלת האפליקציה הסופית

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

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

class_result_screen.png

9. משפרים את האפליקציה עם עוד תכונות של Firebase

בנוסף לאירוח המודלים של TFLite, Firebase מספק כמה תכונות נוספות שיעזרו לכם לשפר את התרחישים לדוגמה של למידת המכונה:

  • Firebase Performance Monitoring כדי למדוד את מהירות ההסקה של המודל שפועל במכשיר של המשתמשים.
  • Firebase Analytics כדי למדוד את הביצועים של המודל בסביבת הייצור על ידי מדידת התגובה של המשתמשים.
  • Firebase A/B Testing כדי לבדוק כמה גרסאות של המודל
  • זכרתם שאימנו קודם שתי גרסאות של מודל TFLite? בדיקת A/B היא דרך טובה לגלות איזו גרסה מניבה ביצועים טובים יותר בסביבת הייצור!

מידע נוסף על השימוש בתכונות האלה באפליקציה זמין ב-Codelabs בהמשך:

10. כל הכבוד!

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

הנושאים שטיפלנו בהם

  • TensorFlow Lite
  • Firebase ML

השלבים הבאים

  • אפשר למדוד את מהירות ההסקה של המודל באמצעות מעקב אחר ביצועים ב-Firebase.
  • פריסת המודל מ-Colab ישירות ל-Firebase באמצעות Firebase ML Model Management API.
  • ניתן להוסיף מנגנון כדי לאפשר למשתמשים לשלוח משוב על תוצאת החיזוי, ולהשתמש ב-Firebase Analytics כדי לעקוב אחר משוב המשתמשים.
  • בדיקת A/B באמצעות Firebase A/B Testing ומודל ממוצע של Word Vector ומודל MobileBERT.

מידע נוסף

יש לך שאלה?

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