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

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

classification_result_screen.png

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

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

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

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

מה תלמדו

  • אימון מודל לניתוח סנטימנט ב-TF Lite באמצעות TF Lite Model Maker
  • פריסת מודלים של TF Lite ל-Firebase ML וגישה אליהם מהאפליקציה
  • מעקב אחרי משוב משתמשים כדי למדוד את רמת הדיוק של המודל באמצעות Firebase Analytics
  • מעקב אחר ביצועי מודל הפרופיל באמצעות מעקב אחר ביצועים ב-Firebase
  • בחירה של אחד מכמה מודלים שפרסתם שייטען דרך הגדרת התצורה מרחוק
  • התנסות במודלים שונים באמצעות 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. קבלת פרויקט לדוגמה

הורדת הקוד

מתחילים בשיבוט פרויקט לדוגמה ומריצים את הפקודה 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 וגוררים אותו אל תיקיית השורש של פרויקט Xcode.

9efb62a92f27e939.png

מוסיפים את Firebase ל-Podfile ומריצים את הפקודה pod install.

pod 'FirebaseMLModelDownloader', '9.3.0-beta'

בשיטה AppDelegate's didFinishLaunchingWithOptions, מייבאים את 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. אפשר לעדכן את המודל באופן קבוע ובמחזור פרסום שונה מזה של האפליקציה כולה

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

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

כשמוצגת בקשה, נותנים למודל את השם 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))
          }
  }
}

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

// 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 (טקסט) לתלויות של האפליקציה. חשוב להוסיף את התלות מתחת להצהרה target 'TextClassification'.

pod 'TensorFlowLiteTaskText', '~> 0.2.0'

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

הפעלת סיווג טקסט

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

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:

// 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 ולוחצים על Run (הפעלה) ( execute.png) בסרגל הכלים של Xcode.

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

classification_result_screen.png

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

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

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

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

10. כל הכבוד!

ב-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.

מידע נוסף

יש לך שאלה?

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