۱. مرور کلی
|
|
به بخش توصیهها با TensorFlow Lite و آزمایشگاه کد Firebase خوش آمدید. در این آزمایشگاه کد، نحوه استفاده از TensorFlow Lite و Firebase برای استقرار یک مدل توصیه در برنامه خود را خواهید آموخت. این آزمایشگاه کد بر اساس این مثال TensorFlow Lite ساخته شده است.
پیشنهادها به برنامهها اجازه میدهند تا با استفاده از یادگیری ماشینی، هوشمندانه مرتبطترین محتوا را برای هر کاربر ارائه دهند. آنها رفتار گذشته کاربر را در نظر میگیرند تا با استفاده از مدلی که بر اساس رفتار کلی تعداد زیادی از کاربران دیگر آموزش دیده است، محتوای برنامهای را که کاربر ممکن است در آینده دوست داشته باشد با آن تعامل داشته باشد، پیشنهاد دهند.
این آموزش نشان میدهد که چگونه با استفاده از Firebase Analytics از کاربران برنامه خود دادهها را دریافت کنید، یک مدل یادگیری ماشین برای توصیههایی از آن دادهها بسازید و سپس از آن مدل در یک برنامه iOS برای اجرای استنتاج و دریافت توصیهها استفاده کنید. به طور خاص، توصیههای ما با توجه به لیست فیلمهایی که کاربر قبلاً دوست داشته است، پیشنهاد میدهد که کاربر به احتمال زیاد کدام فیلمها را تماشا خواهد کرد.
آنچه یاد خواهید گرفت
- ادغام Firebase Analytics در یک برنامه اندروید برای جمعآوری دادههای رفتار کاربر
- آن دادهها را به Google Big Query صادر کنید
- دادهها را پیشپردازش کنید و یک مدل توصیهگر TF Lite آموزش دهید
- مدل TF Lite را در Firebase ML مستقر کنید و از برنامه خود به آن دسترسی داشته باشید
- با استفاده از مدل، استنتاج روی دستگاه را اجرا کنید تا به کاربران توصیههایی ارائه دهید
آنچه نیاز دارید
- Xcode نسخه ۱۱ (یا بالاتر)
- کوکو پادز ۱.۹.۱ (یا بالاتر)
چگونه از این آموزش استفاده خواهید کرد؟
تجربه خود را در ساخت اپلیکیشنهای iOS چگونه ارزیابی میکنید؟
۲. ایجاد پروژه کنسول فایربیس
اضافه کردن فایربیس به پروژه
- به کنسول فایربیس بروید.
- گزینه «ایجاد پروژه جدید » را انتخاب کنید و نام پروژه خود را «Firebase ML iOS Codelab» بگذارید.
۳. نمونه پروژه را دریافت کنید
کد را دانلود کنید
با کلون کردن پروژه نمونه و اجرای pod update در دایرکتوری پروژه شروع کنید:
git clone https://github.com/FirebaseExtended/codelab-contentrecommendation-ios.git cd codelab-contentrecommendation-ios/start pod install --repo-update
اگر گیت را نصب ندارید، میتوانید پروژه نمونه را از صفحه گیتهاب آن یا با کلیک روی این لینک دانلود کنید. پس از دانلود پروژه، آن را در Xcode اجرا کنید و با توصیهها بازی کنید تا با نحوه کار آن آشنا شوید.
فایربیس را راهاندازی کنید
برای ایجاد یک پروژه جدید Firebase، مستندات را دنبال کنید. پس از ایجاد پروژه، فایل GoogleService-Info.plist پروژه خود را از کنسول Firebase دانلود کرده و آن را به ریشه پروژه Xcode بکشید.

فایربیس را به Podfile خود اضافه کنید و pod install را اجرا کنید.
pod 'FirebaseAnalytics' pod 'FirebaseMLModelDownloader', '9.3.0-beta' pod 'TensorFlowLiteSwift'
در متد didFinishLaunchingWithOptions از AppDelegate ، فایل Firebase را در بالای فایل import کنید.
import FirebaseCore
و یک فراخوانی برای پیکربندی Firebase اضافه کنید.
FirebaseApp.configure()
پروژه را دوباره اجرا کنید تا مطمئن شوید که برنامه به درستی پیکربندی شده است و هنگام اجرا از کار نمیافتد.
- مطمئن شوید که گزینه «فعال کردن گوگل آنالیتیکس برای این پروژه» فعال است.
- مراحل راهاندازی باقیمانده را در کنسول Firebase دنبال کنید، سپس روی ایجاد پروژه (یا اگر از یک پروژه گوگل موجود استفاده میکنید، روی افزودن Firebase کلیک کنید) کلیک کنید.
۴. اضافه کردن Firebase Analytics به برنامه
در این مرحله، Firebase Analytics را به برنامه اضافه خواهید کرد تا دادههای رفتار کاربر (در این مورد، فیلمهایی که کاربر دوست دارد) را ثبت کند. این دادهها در مراحل بعدی به صورت تجمیعی برای آموزش مدل توصیهها استفاده خواهند شد.
Firebase Analytics را در برنامه تنظیم کنید
LikedMoviesViewModel شامل توابعی برای ذخیره فیلمهایی است که کاربر لایک میکند. هر بار که کاربر فیلم جدیدی را لایک میکند، ما میخواهیم یک رویداد گزارش تحلیلی نیز برای ثبت آن لایک ارسال کنیم.
کد زیر را اضافه کنید تا وقتی کاربر روی لایک یک فیلم کلیک میکند، یک رویداد تحلیلی ثبت شود.
کلاس AllMoviesCollectionViewController.swift
import FirebaseAnalytics
//
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
//
if movie.liked == nil {
movie.liked = true
Analytics.logEvent(AnalyticsEventSelectItem, parameters: [AnalyticsParameterItemID: movie.id])
} else {
movie.liked?.toggle()
}
}
۵. ادغام Analytics خود را آزمایش کنید
در این مرحله، رویدادهای Analytics را در برنامه ایجاد میکنیم و تأیید میکنیم که آنها به کنسول Firebase ارسال میشوند.
فعال کردن گزارش اشکالزدایی آنالیتیکس
بهطورکلی، رویدادهای ثبتشده توسط برنامه شما در طول تقریباً یک ساعت دستهبندی شده و با هم آپلود میشوند. این رویکرد باعث صرفهجویی در مصرف باتری دستگاههای کاربران نهایی و کاهش مصرف داده شبکه میشود. با این حال، برای اعتبارسنجی پیادهسازی تحلیلی خود (و برای مشاهده تحلیلهای خود در گزارش DebugView)، میتوانید حالت اشکالزدایی (Debug mode) را در دستگاه توسعه خود فعال کنید تا رویدادها با حداقل تأخیر آپلود شوند.
برای فعال کردن حالت اشکالزدایی تحلیلی در دستگاه توسعه خود، آرگومان خط فرمان زیر را در Xcode مشخص کنید:
-FIRDebugEnabled
در این مرحله، شما با موفقیت Firebase Analytics را در برنامه خود ادغام کردهاید. همانطور که کاربران از برنامه شما استفاده میکنند و فیلمها را لایک میکنند، لایکهای آنها به صورت تجمیعی ثبت میشود. ما از این دادههای تجمیعی در ادامه این آزمایشگاه کد برای آموزش مدل توصیههای خود استفاده خواهیم کرد. مرحله زیر یک مرحله اختیاری است تا ببینید همان رویدادهای Analytics که در Logcat مشاهده کردید، در کنسول Firebase نیز پخش میشوند. میتوانید به صفحه بعد بروید.
اختیاری: رویدادهای تحلیلی را در کنسول Firebase تأیید کنید
- به کنسول فایربیس بروید.
- در قسمت Analytics، گزینه DebugView را انتخاب کنید.
- در Xcode، گزینه Run را انتخاب کنید تا برنامه اجرا شود و چند فیلم به لیست Liked شما اضافه شود.
- در DebugView کنسول Firebase، هنگام افزودن فیلمها در برنامه، تأیید کنید که این رویدادها ثبت میشوند.
۶. دادههای تحلیلی را به بیگ کوئری منتقل کنید
بیگ کوئری (Big Query) یک محصول گوگل کلود (Google Cloud) است که به شما امکان میدهد حجم زیادی از دادهها را بررسی و پردازش کنید. در این مرحله، پروژه کنسول فایربیس خود را به بیگ کوئری متصل خواهید کرد تا دادههای آنالیتیکس تولید شده توسط برنامه شما به طور خودکار به بیگ کوئری صادر شوند.
فعال کردن اکسپورت Big Query
- به کنسول فایربیس بروید.
- نماد چرخدنده تنظیمات را در کنار نمای کلی پروژه انتخاب کنید و سپس تنظیمات پروژه را انتخاب کنید.
- برگه ادغامها را انتخاب کنید.
- در داخل بلوک BigQuery، گزینه Link (یا Manage ) را انتخاب کنید.
- در مرحله «درباره پیوند فایربیس به بیگکوئری»، گزینه «بعدی» را انتخاب کنید.
- در بخش پیکربندی ادغام ، روی سوئیچ کلیک کنید تا ارسال دادههای گوگل آنالیتیکس فعال شود و سپس گزینه «پیوند به BigQuery» را انتخاب کنید.
اکنون پروژه کنسول Firebase خود را فعال کردهاید تا بهطور خودکار دادههای رویداد Firebase Analytics را به Big Query ارسال کند. این کار بهطور خودکار و بدون هیچ تعامل دیگری انجام میشود، با این حال، اولین خروجی که مجموعه دادههای تحلیلی را در BigQuery ایجاد میکند، ممکن است تا ۲۴ ساعت انجام نشود. پس از ایجاد مجموعه دادهها، Firebase بهطور مداوم رویدادهای جدید Analytics را به Big Query در جدول روزانه صادر میکند و رویدادهای روزهای گذشته را در جدول رویدادها گروهبندی میکند.
آموزش یک مدل توصیهگر به دادههای زیادی نیاز دارد. از آنجایی که ما از قبل برنامهای برای تولید حجم زیادی از دادهها نداریم، در مرحله بعدی یک مجموعه داده نمونه را به BigQuery وارد خواهیم کرد تا برای ادامه این آموزش از آن استفاده کنیم.
۷. از BigQuery برای به دست آوردن دادههای آموزشی مدل استفاده کنید
اکنون که کنسول فایربیس خود را برای خروجی گرفتن به بیگکوئری متصل کردهایم، دادههای رویداد تحلیلی برنامه ما پس از مدتی به طور خودکار در کنسول بیگکوئری نمایش داده میشوند. برای دریافت دادههای اولیه برای اهداف این آموزش، در این مرحله یک مجموعه داده نمونه موجود را به کنسول بیگکوئری شما وارد میکنیم تا از آن برای آموزش مدل توصیههای خود استفاده کنیم.
وارد کردن مجموعه دادههای نمونه به BigQuery
- به داشبورد BigQuery در کنسول ابری گوگل بروید.
- نام پروژه خود را در منو انتخاب کنید.
- برای مشاهده جزئیات، نام پروژه خود را در پایین منوی ناوبری سمت چپ BigQuery انتخاب کنید.
- برای باز کردن پنل ایجاد مجموعه داده، گزینه «ایجاد مجموعه داده» را انتخاب کنید.
- برای شناسه مجموعه داده، عبارت 'firebase_recommendations_dataset' را وارد کنید و گزینه ایجاد مجموعه داده را انتخاب کنید.
- مجموعه داده جدید در منوی سمت چپ زیر نام پروژه نمایش داده میشود. روی آن کلیک کنید.
- برای باز کردن پنل ایجاد جدول، گزینه «ایجاد جدول» را انتخاب کنید.
- برای ایجاد جدول از «فضای ذخیرهسازی ابری گوگل» (Google Cloud Storage) گزینه «ایجاد جدول از» (Create table from) را انتخاب کنید.
- در فیلد «انتخاب فایل از سطل GCS» ، عبارت 'gs://firebase-recommendations/recommendations-test/formatted_data_filtered.txt' را وارد کنید.
- در منوی کشویی File format، گزینهی «JSONL» را انتخاب کنید.
- برای نام جدول، عبارت 'recommendations_table' را وارد کنید.
- کادر زیر Schema > Auto detection > Schema and input parameters را علامت بزنید.
- ایجاد جدول را انتخاب کنید
مجموعه دادههای نمونه را کاوش کنید
در این مرحله، میتوانید به صورت اختیاری طرحواره را بررسی کرده و پیشنمایشی از این مجموعه داده ارائه دهید.
- برای باز کردن جداول موجود در firebase-recommendations-dataset ، از منوی سمت چپ آن را انتخاب کنید.
- برای مشاهده طرح جدول، جدول recommendations-table را انتخاب کنید.
- برای مشاهده دادههای واقعی رویداد Analytics که این جدول در آن قرار دارد ، پیشنمایش را انتخاب کنید.
ایجاد اعتبارنامه حساب سرویس
اکنون، اعتبارنامههای حساب سرویس را در پروژه کنسول Google Cloud خود ایجاد خواهیم کرد که میتوانیم در محیط Colab در مرحله بعد برای دسترسی و بارگذاری دادههای BigQuery خود از آنها استفاده کنیم.
- مطمئن شوید که پرداخت برای پروژه Google Cloud شما فعال است.
- فعال کردن APIهای BigQuery و BigQuery Storage API. < اینجا کلیک کنید >
- به صفحه ایجاد کلید حساب سرویس بروید.
- از لیست حسابهای سرویس ، حساب سرویس جدید را انتخاب کنید.
- در قسمت نام حساب سرویس ، یک نام وارد کنید.
- از فهرست نقشها ، پروژه > مالک را انتخاب کنید.
- روی «ایجاد» کلیک کنید. یک فایل JSON که حاوی کلیدهای دانلود شده روی رایانه شماست.
در مرحله بعد، از Google Colab برای پیشپردازش این دادهها و آموزش مدل توصیههای خود استفاده خواهیم کرد.
۸. پیشپردازش دادهها و آموزش مدل توصیهها
در این مرحله، از یک دفترچه یادداشت Colab برای انجام مراحل زیر استفاده خواهیم کرد:
- دادههای BigQuery را به دفترچه یادداشت Colab وارد کنید
- پیشپردازش دادهها برای آمادهسازی آنها برای آموزش مدل
- مدل توصیهها را بر اساس دادههای تحلیلی آموزش دهید
- مدل را به عنوان یک مدل TF lite صادر کنید
- مدل را در کنسول Firebase مستقر کنید تا بتوانیم از آن در برنامه خود استفاده کنیم.
قبل از اینکه دفترچه آموزش Colab را راهاندازی کنیم، ابتدا API مدیریت مدل Firebase را فعال خواهیم کرد تا Colab بتواند مدل آموزشدیده را در کنسول Firebase ما مستقر کند.
فعال کردن API مدیریت مدل Firebase
یک سطل برای ذخیره مدلهای یادگیری ماشین خود ایجاد کنید
در کنسول فایربیس خود، به Storage بروید و روی Get started کلیک کنید. 
برای تنظیم سطل خود، دیالوگ را دنبال کنید.

فعال کردن API فایربیس ML
به صفحه Firebase ML API در کنسول Google Cloud بروید و روی فعال کردن (Enable) کلیک کنید.
استفاده از دفترچه یادداشت Colab برای آموزش و استقرار مدل
دفترچه یادداشت Colab را با استفاده از لینک زیر باز کنید و مراحل داخل آن را تکمیل کنید. پس از اتمام مراحل دفترچه یادداشت Colab، یک فایل مدل TF lite خواهید داشت که در کنسول Firebase مستقر شده و میتوانیم آن را با برنامه خود همگامسازی کنیم.
باز در کولاب
۹. مدل را در برنامه خود دانلود کنید
در این مرحله، برنامه خود را طوری تغییر میدهیم که مدلی را که از Firebase Machine Learning آموزش دادهایم، دانلود کند.
وابستگی Firebase ML را اضافه کنید
برای استفاده از مدلهای یادگیری ماشین Firebase در برنامهتان، وابستگی زیر مورد نیاز است. این وابستگی باید از قبل اضافه شده باشد (تأیید کنید).
پادفایل
import FirebaseCore
import FirebaseMLModelDownloader
مدل را با Firebase Model Manager API دانلود کنید
کد زیر را در ModelLoader.swift کپی کنید تا شرایطی را که تحت آن دانلود مدل اتفاق میافتد تنظیم کنید و یک وظیفه دانلود برای همگامسازی مدل از راه دور با برنامه ما ایجاد کنید.
ModelLoader.swift
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))
}
}
}
۱۰. مدل توصیه Tensorflow Lite را در برنامه خود ادغام کنید
محیط اجرایی Tensorflow Lite به شما امکان میدهد از مدل خود در برنامه برای تولید پیشنهادها استفاده کنید. در مرحله قبل، یک مفسر TFlite را با فایل مدلی که دانلود کردیم، مقداردهی اولیه کردیم. در این مرحله، ابتدا یک دیکشنری و برچسبها را برای همراهی مدل خود در مرحله استنتاج بارگذاری میکنیم، سپس پیشپردازش را برای تولید ورودیها به مدل خود اضافه میکنیم و پسپردازش را انجام میدهیم که در آن نتایج را از استنتاج خود استخراج خواهیم کرد.
بارگذاری دیکشنری و برچسبها
برچسبهای مورد استفاده برای تولید کاندیدهای توصیه توسط مدل توصیهها در فایل sorted_movie_vocab.json در پوشه assets فهرست شدهاند. کد زیر را برای بارگذاری این کاندیدها کپی کنید.
توصیههاViewController.swift
func getMovies() -> [MovieItem] {
let barController = self.tabBarController as! TabBarController
return barController.movies
}
پیادهسازی پیشپردازش
در مرحله پیشپردازش، شکل دادههای ورودی را تغییر میدهیم تا با آنچه مدل ما انتظار دارد مطابقت داشته باشد. در اینجا، اگر تعداد لایکهای کاربر زیاد نباشد، طول ورودی را با یک مقدار جایگزین پر میکنیم. کد زیر را کپی کنید:
توصیههاViewController.swift
// Given a list of selected items, preprocess to get tflite input.
func preProcess() -> Data {
let likedMovies = getLikedMovies().map { (MovieItem) -> Int32 in
return MovieItem.id
}
var inputData = Data(copyingBufferOf: Array(likedMovies.prefix(10)))
// Pad input data to have a minimum of 10 context items (4 bytes each)
while inputData.count < 10*4 {
inputData.append(0)
}
return inputData
}
اجرای مفسر برای تولید توصیهها
در اینجا ما از مدلی که در مرحله قبل دانلود کردیم برای اجرای استنتاج روی ورودی پیشپردازششدهمان استفاده میکنیم. نوع ورودی و خروجی را برای مدل خود تنظیم میکنیم و استنتاج را برای تولید پیشنهادهای فیلم اجرا میکنیم. کد زیر را در برنامه خود کپی کنید.
توصیههاViewController.swift
import TensorFlowLite
توصیههاViewController.swift
private var interpreter: Interpreter?
func loadModel() {
// Download the model from Firebase
print("Fetching recommendations model...")
ModelDownloader.fetchModel(named: "recommendations") { (filePath, error) in
guard let path = filePath else {
if let error = error {
print(error)
}
return
}
print("Recommendations model download complete")
self.loadInterpreter(path: path)
}
}
func loadInterpreter(path: String) {
do {
interpreter = try Interpreter(modelPath: path)
// Allocate memory for the model's input `Tensor`s.
try interpreter?.allocateTensors()
let inputData = preProcess()
// Copy the input data to the input `Tensor`.
try self.interpreter?.copy(inputData, toInputAt: 0)
// Run inference by invoking the `Interpreter`.
try self.interpreter?.invoke()
// Get the output `Tensor`
let confidenceOutputTensor = try self.interpreter?.output(at: 0)
let idOutputTensor = try self.interpreter?.output(at: 1)
// Copy output to `Data` to process the inference results.
let confidenceOutputSize = confidenceOutputTensor?.shape.dimensions.reduce(1, {x, y in x * y})
let idOutputSize = idOutputTensor?.shape.dimensions.reduce(1, {x, y in x * y})
let confidenceResults =
UnsafeMutableBufferPointer<Float32>.allocate(capacity: confidenceOutputSize!)
let idResults =
UnsafeMutableBufferPointer<Int32>.allocate(capacity: idOutputSize!)
_ = confidenceOutputTensor?.data.copyBytes(to: confidenceResults)
_ = idOutputTensor?.data.copyBytes(to: idResults)
postProcess(idResults, confidenceResults)
print("Successfully ran inference")
DispatchQueue.main.async {
self.tableView.reloadData()
}
} catch {
print("Error occurred creating model interpreter: \(error)")
}
}
پیادهسازی پسپردازش
در نهایت، در این مرحله، خروجی مدل خود را پسپردازش میکنیم، نتایجی را که بالاترین اطمینان را دارند انتخاب میکنیم و مقادیر موجود (فیلمهایی که کاربر قبلاً لایک کرده است) را حذف میکنیم. کد زیر را در برنامه خود کپی کنید.
توصیههاViewController.swift
// Postprocess to get results from tflite inference.
func postProcess(_ idResults: UnsafeMutableBufferPointer<Int32>, _ confidenceResults: UnsafeMutableBufferPointer<Float32>) {
for i in 0..<10 {
let id = idResults[i]
let movieIdx = getMovies().firstIndex { $0.id == id }
let title = getMovies()[movieIdx!].title
recommendations.append(Recommendation(title: title, confidence: confidenceResults[i]))
}
}
برنامه خود را آزمایش کنید!
برنامه خود را دوباره اجرا کنید. همزمان با انتخاب چند فیلم، برنامه باید به طور خودکار مدل جدید را دانلود کرده و شروع به تولید پیشنهادها کند!
۱۱. تبریک میگویم!
شما با استفاده از TensorFlow Lite و Firebase یک ویژگی پیشنهاددهی در برنامه خود ایجاد کردهاید. توجه داشته باشید که تکنیکها و خط لوله نشان داده شده در این آزمایشگاه کد را میتوان تعمیم داد و برای ارائه انواع دیگر پیشنهادها نیز استفاده کرد.
آنچه ما پوشش دادهایم
- فایربیس امال
- تجزیه و تحلیل فایربیس
- رویدادهای تحلیلی را به BigQuery صادر کنید
- رویدادهای تجزیه و تحلیل پیشپردازش
- آموزش توصیهها با مدل TensorFlow
- مدل را صادر کرده و در کنسول Firebase مستقر کنید
- ارائه پیشنهاد فیلم در یک اپلیکیشن
مراحل بعدی
- توصیههای Firebase ML را در برنامه خود پیادهسازی کنید.
اطلاعات بیشتر
سوالی دارید؟
گزارش مشکلات

