أضف تصنيفًا نصيًا على الجهاز إلى تطبيقك باستخدام TensorFlow Lite وFirebase - iOS Codelab

1. نظرة عامة

Classification_result_screen.png

مرحبًا بك في تصنيف النص باستخدام TensorFlow Lite وFirebase codelab. ستتعلم في هذا الدرس التطبيقي حول التعليمات البرمجية كيفية استخدام TensorFlow Lite وFirebase لتدريب نموذج تصنيف النص ونشره في تطبيقك. يستند هذا الدرس التطبيقي حول التعليمات البرمجية إلى مثال TensorFlow Lite هذا.

تصنيف النص هو عملية تعيين علامات أو فئات للنص وفقًا لمحتواه. إنها إحدى المهام الأساسية في معالجة اللغات الطبيعية (NLP) مع تطبيقات واسعة مثل تحليل المشاعر، ووضع العلامات على المواضيع، واكتشاف البريد العشوائي، واكتشاف النوايا.

تحليل المشاعر هو تفسير وتصنيف المشاعر (الإيجابية والسلبية والمحايدة) ضمن البيانات النصية باستخدام تقنيات تحليل النص. يسمح تحليل المشاعر للشركات بتحديد مشاعر العملاء تجاه المنتجات أو العلامات التجارية أو الخدمات في المحادثات والتعليقات عبر الإنترنت.

يوضح هذا البرنامج التعليمي كيفية بناء نموذج للتعلم الآلي لتحليل المشاعر، ولا سيما تصنيف النص على أنه إيجابي أو سلبي. هذا مثال على التصنيف الثنائي أو التصنيف ثنائي الفئة، وهو نوع مهم وقابل للتطبيق على نطاق واسع من مشاكل التعلم الآلي.

ما ستتعلمه

  • تدريب نموذج تحليل المشاعر TF Lite مع TF Lite Model Maker
  • انشر نماذج TF Lite على Firebase ML وقم بالوصول إليها من تطبيقك
  • تتبع تعليقات المستخدمين لقياس دقة النموذج باستخدام Firebase Analytics
  • أداء نموذج الملف الشخصي عبر مراقبة أداء Firebase
  • حدد أيًا من النماذج المنشورة المتعددة يتم تحميله من خلال Remote Config
  • قم بتجربة نماذج مختلفة عبر اختبار Firebase A/B

ماذا ستحتاج

  • Xcode 11 (أو أعلى)
  • CocoaPods 1.9.1 (أو أعلى)

كيف ستستخدم هذا البرنامج التعليمي؟

اقرأها من خلال فقط اقرأها وأكمل التمارين

كيف تقيم تجربتك في إنشاء تطبيقات Android؟

مبتدئ متوسط بارع

2. إنشاء مشروع وحدة تحكم Firebase

أضف Firebase إلى المشروع

  1. انتقل إلى وحدة تحكم Firebase .
  2. حدد إنشاء مشروع جديد وقم بتسمية مشروعك "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.

pod 'FirebaseMLModelDownloader', '9.3.0-beta'

في طريقة didFinishLaunchingWithOptions الخاصة بـ AppDelegate ، قم باستيراد Firebase في الجزء العلوي من الملف

import FirebaseCore

وأضف مكالمة لتكوين Firebase.

FirebaseApp.configure()

قم بتشغيل المشروع مرة أخرى للتأكد من تكوين التطبيق بشكل صحيح وعدم تعطله عند التشغيل.

4. تدريب نموذج تحليل المشاعر

سوف نستخدم TensorFlow Lite Model Maker لتدريب نموذج تصنيف النص للتنبؤ بمشاعر نص معين.

يتم تقديم هذه الخطوة على شكل دفتر ملاحظات Python يمكنك فتحه في Google Colab.

فتح في كولاب

بعد الانتهاء من هذه الخطوة، سيكون لديك نموذج تحليل المشاعر TensorFlow Lite جاهز للنشر على تطبيق الهاتف المحمول.

5. نشر نموذج على Firebase ML

يعد نشر نموذج في Firebase ML مفيدًا لسببين رئيسيين:

  1. يمكننا الحفاظ على حجم تثبيت التطبيق صغيرًا وتنزيل النموذج فقط إذا لزم الأمر
  2. يمكن تحديث النموذج بانتظام وبدورة إصدار مختلفة عن التطبيق بأكمله

يمكن نشر النموذج إما عبر وحدة التحكم، أو برمجيًا، باستخدام Firebase Admin SDK. في هذه الخطوة سوف نقوم بالنشر عبر وحدة التحكم.

أولاً، افتح Firebase Console وانقر على Machine Learning في لوحة التنقل اليمنى. انقر فوق "البدء" إذا كنت تفتح هذه المرة الأولى. ثم انتقل إلى "مخصص" وانقر على زر "إضافة نموذج".

عندما يُطلب منك ذلك، قم بتسمية النموذج sentiment_analysis وقم بتحميل الملف الذي قمت بتنزيله من Colab في الخطوة السابقة.

3c3c50e6ef12b3b.png

6. قم بتنزيل النموذج من Firebase ML

قد يكون اختيار وقت تنزيل النموذج البعيد من Firebase إلى تطبيقك أمرًا صعبًا نظرًا لأن نماذج TFLite يمكن أن تنمو بشكل كبير نسبيًا. من الناحية المثالية، نريد تجنب تحميل النموذج على الفور عند تشغيل التطبيق، لأنه إذا تم استخدام نموذجنا لميزة واحدة فقط ولم يستخدم المستخدم هذه الميزة مطلقًا، فسنكون قد قمنا بتنزيل كمية كبيرة من البيانات دون سبب. يمكننا أيضًا تعيين خيارات التنزيل مثل جلب النماذج فقط عند الاتصال بشبكة wifi. إذا كنت تريد التأكد من أن النموذج متاح حتى بدون اتصال بالشبكة، فمن المهم أيضًا تجميعه بدون التطبيق كنسخة احتياطية.

من أجل التبسيط، سنقوم بإزالة النموذج المجمع الافتراضي ونقوم دائمًا بتنزيل نموذج من 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 (نصية) في تبعيات التطبيق. تأكد من إضافة التبعية ضمن إعلان 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 ، يمكنك تشغيل تحليل المشاعر باستخدام استدعاء أسلوب واحد.

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 الخاص بك، ثم انقر فوق تشغيل ( تنفيذ.png ) في شريط أدوات Xcode.

يجب أن يكون التطبيق قادرًا على التنبؤ بشكل صحيح بمشاعر مراجعة الفيلم التي تدخلها.

Classification_result_screen.png

9. قم بتعزيز التطبيق بمزيد من ميزات Firebase

إلى جانب استضافة نماذج TFLite الخاصة بك، يوفر Firebase العديد من الميزات الأخرى لتعزيز حالات استخدام التعلم الآلي لديك:

  • مراقبة أداء Firebase لقياس سرعة استدلال النموذج الخاص بك الذي يعمل على أجهزة المستخدمين.
  • Firebase Analytics لقياس مدى جودة أداء النموذج الخاص بك في الإنتاج عن طريق قياس رد فعل المستخدم.
  • اختبار Firebase A/B لاختبار إصدارات متعددة من النموذج الخاص بك
  • هل تتذكر أننا قمنا بتدريب نسختين من نموذج TFLite الخاص بنا سابقًا؟ يعد اختبار A/B طريقة جيدة لمعرفة الإصدار الذي يحقق أداءً أفضل في الإنتاج!

لمعرفة المزيد حول كيفية الاستفادة من هذه الميزات في تطبيقك، راجع الدروس التطبيقية حول التعليمات البرمجية أدناه:

10. تهانينا!

في هذا الدرس التطبيقي حول التعليمات البرمجية، تعلمت كيفية تدريب نموذج TFLite لتحليل المشاعر ونشره على تطبيق الهاتف المحمول الخاص بك باستخدام Firebase. لمعرفة المزيد حول TFLite وFirebase، قم بإلقاء نظرة على نماذج TFLite الأخرى وأدلة بدء استخدام Firebase.

ما قمنا بتغطيته

  • TensorFlow لايت
  • فايربيس مل

الخطوات التالية

  • قم بقياس سرعة استنتاج النموذج الخاص بك من خلال مراقبة أداء Firebase.
  • انشر النموذج من Colab مباشرة إلى Firebase عبر Firebase ML Model Management API.
  • أضف آلية للسماح للمستخدمين بتقديم تعليقات على نتيجة التنبؤ، واستخدم Firebase Analytics لتتبع تعليقات المستخدمين.
  • اختبار A/B لنموذج Average Word Vector ونموذج MobileBERT مع اختبار Firebase A/B.

يتعلم أكثر

لدي سؤال؟

الإبلاغ عن المشكلات