با TensorFlow Lite و Firebase - Android Codelab توصیه هایی را به برنامه خود اضافه کنید

۱. مرور کلی

به بخش توصیه‌ها با TensorFlow Lite و آزمایشگاه کد Firebase خوش آمدید. در این آزمایشگاه کد، نحوه استفاده از TensorFlow Lite و Firebase برای استقرار یک مدل توصیه در برنامه خود را خواهید آموخت. این آزمایشگاه کد بر اساس این مثال TensorFlow Lite ساخته شده است.

پیشنهادها به برنامه‌ها اجازه می‌دهند تا با استفاده از یادگیری ماشینی، هوشمندانه مرتبط‌ترین محتوا را برای هر کاربر ارائه دهند. آن‌ها رفتار گذشته کاربر را در نظر می‌گیرند تا با استفاده از مدلی که بر اساس رفتار کلی تعداد زیادی از کاربران دیگر آموزش دیده است، محتوای برنامه‌ای را که کاربر ممکن است در آینده دوست داشته باشد با آن تعامل داشته باشد، پیشنهاد دهند.

این آموزش نشان می‌دهد که چگونه با استفاده از Firebase Analytics از کاربران برنامه خود داده‌ها را دریافت کنید، یک مدل یادگیری ماشین برای توصیه‌هایی از آن داده‌ها بسازید و سپس از آن مدل در یک برنامه اندروید برای اجرای استنتاج و دریافت توصیه‌ها استفاده کنید. به طور خاص، توصیه‌های ما با توجه به لیست فیلم‌هایی که کاربر قبلاً دوست داشته است، پیشنهاد می‌دهد که کاربر به احتمال زیاد کدام فیلم‌ها را تماشا خواهد کرد.

آنچه یاد خواهید گرفت

  • ادغام Firebase Analytics در یک برنامه اندروید برای جمع‌آوری داده‌های رفتار کاربر
  • آن داده‌ها را به Google Big Query صادر کنید
  • داده‌ها را پیش‌پردازش کنید و یک مدل توصیه‌گر TF Lite آموزش دهید
  • مدل TF Lite را در Firebase ML مستقر کنید و از برنامه خود به آن دسترسی داشته باشید
  • با استفاده از مدل، استنتاج روی دستگاه را اجرا کنید تا به کاربران توصیه‌هایی ارائه دهید

آنچه نیاز دارید

  • آخرین نسخه اندروید استودیو
  • نمونه کد.
  • یک دستگاه آزمایشی با اندروید ۷+ و سرویس‌های گوگل پلی ۹.۸ یا بالاتر، یا یک شبیه‌ساز با سرویس‌های گوگل پلی ۹.۸ یا بالاتر
  • در صورت استفاده از دستگاه، کابل اتصال.

چگونه از این آموزش استفاده خواهید کرد؟

فقط تا انتها بخوانید آن را بخوانید و تمرین‌ها را انجام دهید

تجربه خود را در ساخت برنامه‌های اندروید چگونه ارزیابی می‌کنید؟

تازه کار متوسط ماهر

۲. کد نمونه را دریافت کنید

مخزن گیت‌هاب را از خط فرمان کلون کنید.

$ git clone https://github.com/FirebaseExtended/codelab-contentrecommendation-android.git

۳. برنامه‌ی آغازین را وارد کنید

از اندروید استودیو، پوشه codelab-recommendations-android را انتخاب کنید ( پوشه android_studio.png ) از کد نمونه دانلود شده ( File > Open > .../codelab-recommendations-android/start ).

اکنون باید پروژه شروع را در اندروید استودیو باز داشته باشید.

۴. ایجاد پروژه کنسول فایربیس

ایجاد یک پروژه جدید

  1. به کنسول فایربیس بروید.
  2. گزینه «افزودن پروژه» (یا «ایجاد پروژه» اگر اولین پروژه است) را انتخاب کنید.
  3. نام پروژه را انتخاب یا وارد کنید و روی ادامه کلیک کنید.
  4. مطمئن شوید که گزینه «فعال کردن گوگل آنالیتیکس برای این پروژه» فعال است.
  5. مراحل راه‌اندازی باقی‌مانده را در کنسول Firebase دنبال کنید، سپس روی ایجاد پروژه (یا اگر از یک پروژه گوگل موجود استفاده می‌کنید، روی افزودن Firebase کلیک کنید) کلیک کنید.

۵. اضافه کردن فایربیس

  1. از صفحه نمای کلی پروژه جدید خود، روی آیکون اندروید کلیک کنید تا گردش کار راه‌اندازی شود.
  2. نام بسته‌ی codelab را وارد کنید: com.google.firebase.codelabs.recommendations
  3. ثبت برنامه را انتخاب کنید.

فایل google-services.json را به برنامه خود اضافه کنید

پس از افزودن نام بسته و انتخاب گزینه ثبت، روی دانلود google-services.json کلیک کنید تا فایل پیکربندی اندروید Firebase خود را دریافت کنید، سپس فایل google-services.json را در پوشه app در پروژه خود کپی کنید. پس از دانلود فایل، می‌توانید مراحل بعدی نشان داده شده در کنسول را نادیده بگیرید (این مراحل قبلاً در پروژه build-android-start برای شما انجام شده‌اند).

افزونه‌ی خدمات گوگل را به برنامه‌ی خود اضافه کنید

افزونه‌ی google-services از فایل google-services.json برای پیکربندی برنامه‌ی شما جهت استفاده از Firebase استفاده می‌کند. خطوط زیر باید از قبل به فایل‌های build.gradle.kts در پروژه اضافه شده باشند (برای تأیید تیک بزنید):

app/build.grade.kts

plugins {
    id("com.google.gms.google-services")
}

ساخت.grade.kts

plugins {
    id("com.google.gms.google-services") version "4.3.15" apply false
}

پروژه خود را با فایل‌های gradle همگام‌سازی کنید

برای اطمینان از اینکه همه وابستگی‌ها برای برنامه شما در دسترس هستند، باید در این مرحله پروژه خود را با فایل‌های gradle همگام‌سازی کنید. از نوار ابزار اندروید استودیو ، File > Sync Project with Gradle Files را انتخاب کنید.

۶. برنامه‌ی آغازین را اجرا کنید

حالا که پروژه را به اندروید استودیو وارد کرده‌اید و افزونه google-services را با فایل JSON خود پیکربندی کرده‌اید، آماده‌اید تا برنامه را برای اولین بار اجرا کنید. دستگاه اندروید خود را متصل کنید و روی Run () کلیک کنید. اجرا.png ) در نوار ابزار اندروید استودیو.

برنامه باید روی دستگاه شما اجرا شود. در این مرحله، می‌توانید یک برنامه کاربردی را مشاهده کنید که یک تب با لیستی از فیلم‌ها، یک تب فیلم‌های لایک‌شده و یک تب توصیه‌ها را نشان می‌دهد. می‌توانید روی یک فیلم در لیست فیلم‌ها کلیک کنید تا آن را به لیست لایک‌های خود اضافه کنید. پس از تکمیل مراحل باقی‌مانده codelab، می‌توانیم در تب توصیه‌ها، فیلم توصیه کنیم.

۷. اضافه کردن Firebase Analytics به برنامه

در این مرحله، Firebase Analytics را به برنامه اضافه خواهید کرد تا داده‌های رفتار کاربر (در این مورد، فیلم‌هایی که کاربر دوست دارد) را ثبت کند. این داده‌ها در مراحل بعدی به صورت تجمیعی برای آموزش مدل توصیه‌ها استفاده خواهند شد.

وابستگی به Bill of Materials و Analytics در Firebase را اضافه کنید

وابستگی‌های زیر برای افزودن Firebase Analytics به برنامه شما ضروری هستند. آن‌ها باید از قبل در فایل app/build.gradle.kts گنجانده شده باشند (تأیید کنید).

app/build.grade.kts

implementation(platform("com.google.firebase:firebase-bom:32.0.0"))
implementation("com.google.firebase:firebase-analytics-ktx")

Firebase Analytics را در برنامه تنظیم کنید

LikedMoviesViewModel شامل توابعی برای ذخیره فیلم‌هایی است که کاربر لایک می‌کند. هر بار که کاربر فیلم جدیدی را لایک می‌کند، ما می‌خواهیم یک رویداد گزارش تحلیلی نیز برای ثبت آن لایک ارسال کنیم.

تابع onMovieLiked را به همراه کد زیر اضافه کنید تا وقتی کاربر روی یک فیلم کلیک می‌کند و آن را لایک می‌کند، یک رویداد تحلیلی ثبت شود.

LikedMoviesViewModel.kt

import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.analytics.ktx.analytics
import com.google.firebase.analytics.ktx.logEvent
import com.google.firebase.ktx.Firebase


class LikedMoviesViewModel internal constructor (application: Application) : AndroidViewModel(application) {

    ...

    fun onMovieLiked(movie: Movie) {
        movies.setLike(movie, true)
        logAnalyticsEvent(movie.id.toString())
    }
       
}

فیلد و تابع زیر را برای ثبت رویداد Analytics هنگام اضافه شدن یک فیلم به لیست Liked کاربر اضافه کنید.

LikedMoviesViewModel.kt

import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.analytics.ktx.analytics
import com.google.firebase.analytics.ktx.logEvent
import com.google.firebase.ktx.Firebase


class LikedMoviesViewModel internal constructor (application: Application) : AndroidViewModel(application) {
    ...
    private val firebaseAnalytics = Firebase.analytics

    ...

    /**
     * Logs an event in Firebase Analytics that is used in aggregate to train the recommendations
     * model.
     */
    private fun logAnalyticsEvent(id: String) {
        firebaseAnalytics.logEvent(FirebaseAnalytics.Event.SELECT_ITEM) {
            param(FirebaseAnalytics.Param.ITEM_ID, id)
        }
    }

۸. ادغام Analytics خود را آزمایش کنید

در این مرحله، رویدادهای Analytics را در برنامه ایجاد می‌کنیم و تأیید می‌کنیم که آنها به کنسول Firebase ارسال می‌شوند.

فعال کردن گزارش اشکال‌زدایی آنالیتیکس

Firebase Analytics برای به حداکثر رساندن عمر باتری کاربر طراحی شده است و رویدادها را روی دستگاه دسته‌بندی می‌کند و فقط گاهی اوقات آنها را به Firebase ارسال می‌کند. برای اهداف اشکال‌زدایی، می‌توانیم این رفتار را غیرفعال کنیم تا رویدادها را به صورت بلادرنگ با اجرای دستور زیر در پوسته مشاهده کنیم.

ترمینال

adb shell setprop debug.firebase.analytics.app com.google.firebase.codelabs.recommendations

تأیید کنید که رویدادهای Analytics ایجاد شده‌اند

  1. در اندروید استودیو، پنجره Logcat را باز کنید تا گزارش‌گیری از برنامه‌تان را بررسی کنید.
  2. فیلتر Logcat را روی رشته "Logging event" تنظیم کنید.
  3. تأیید کنید که رویدادهای تحلیلی "select_item" هر ​​بار که فیلمی را در برنامه لایک می‌کنید، منتشر می‌شوند.

در این مرحله، شما با موفقیت Firebase Analytics را در برنامه خود ادغام کرده‌اید. همانطور که کاربران از برنامه شما استفاده می‌کنند و فیلم‌ها را لایک می‌کنند، لایک‌های آنها به صورت تجمیعی ثبت می‌شود. ما از این داده‌های تجمیعی در ادامه این آزمایشگاه کد برای آموزش مدل توصیه‌های خود استفاده خواهیم کرد. مرحله زیر یک مرحله اختیاری است تا ببینید همان رویدادهای Analytics که در Logcat مشاهده کردید، به کنسول Firebase نیز منتقل می‌شوند. می‌توانید به صفحه بعد بروید.

اختیاری: رویدادهای تحلیلی را در کنسول Firebase تأیید کنید

  1. به کنسول فایربیس بروید.
  2. در قسمت Analytics، گزینه DebugView را انتخاب کنید.
  3. در اندروید استودیو، گزینه‌ی «اجرا» (Run) را انتخاب کنید تا برنامه اجرا شود و چند فیلم به لیست «پسندیده‌ها» (Like) شما اضافه شود.
  4. در DebugView کنسول Firebase، هنگام افزودن فیلم‌ها در برنامه، تأیید کنید که این رویدادها ثبت می‌شوند.

۹. داده‌های تحلیلی را به بیگ کوئری منتقل کنید

بیگ کوئری (Big Query) یک محصول گوگل کلود (Google Cloud) است که به شما امکان می‌دهد حجم زیادی از داده‌ها را بررسی و پردازش کنید. در این مرحله، پروژه کنسول فایربیس خود را به بیگ کوئری متصل خواهید کرد تا داده‌های آنالیتیکس تولید شده توسط برنامه شما به طور خودکار به بیگ کوئری صادر شوند.

فعال کردن اکسپورت Big Query

  1. به کنسول فایربیس بروید.
  2. نماد چرخ‌دنده تنظیمات را در کنار نمای کلی پروژه انتخاب کنید و سپس تنظیمات پروژه را انتخاب کنید.
  3. برگه ادغام‌ها را انتخاب کنید.
  4. در داخل بلوک BigQuery، گزینه Link (یا Manage ) را انتخاب کنید.
  5. در مرحله «درباره پیوند فایربیس به بیگ‌کوئری»، گزینه «بعدی» را انتخاب کنید.
  6. در بخش پیکربندی ادغام ، روی سوئیچ کلیک کنید تا ارسال داده‌های گوگل آنالیتیکس فعال شود و سپس گزینه «پیوند به BigQuery» را انتخاب کنید.

اکنون پروژه کنسول Firebase خود را فعال کرده‌اید تا به‌طور خودکار داده‌های رویداد Firebase Analytics را به Big Query ارسال کند. این کار به‌طور خودکار و بدون هیچ تعامل دیگری انجام می‌شود، با این حال، اولین خروجی که مجموعه داده‌های تحلیلی را در BigQuery ایجاد می‌کند، ممکن است تا ۲۴ ساعت انجام نشود. پس از ایجاد مجموعه داده‌ها، Firebase به‌طور مداوم رویدادهای جدید Analytics را به Big Query در جدول روزانه صادر می‌کند و رویدادهای روزهای گذشته را در جدول رویدادها گروه‌بندی می‌کند.

آموزش یک مدل توصیه‌گر به داده‌های زیادی نیاز دارد. از آنجایی که ما از قبل برنامه‌ای برای تولید حجم زیادی از داده‌ها نداریم، در مرحله بعدی یک مجموعه داده نمونه را به BigQuery وارد خواهیم کرد تا برای ادامه این آموزش از آن استفاده کنیم.

۱۰. از BigQuery برای بدست آوردن داده‌های آموزشی مدل استفاده کنید

اکنون که کنسول فایربیس خود را برای خروجی گرفتن به بیگ‌کوئری متصل کرده‌ایم، داده‌های رویداد تحلیلی برنامه ما پس از مدتی به طور خودکار در کنسول بیگ‌کوئری نمایش داده می‌شوند. برای دریافت داده‌های اولیه برای اهداف این آموزش، در این مرحله یک مجموعه داده نمونه موجود را به کنسول بیگ‌کوئری شما وارد می‌کنیم تا از آن برای آموزش مدل توصیه‌های خود استفاده کنیم.

وارد کردن مجموعه داده‌های نمونه به BigQuery

  1. به داشبورد BigQuery در کنسول ابری گوگل بروید.
  2. نام پروژه خود را در منو انتخاب کنید.
  3. برای مشاهده جزئیات، نام پروژه خود را در پایین منوی ناوبری سمت چپ BigQuery انتخاب کنید.
  4. برای باز کردن پنل ایجاد مجموعه داده، گزینه «ایجاد مجموعه داده» را انتخاب کنید.
  5. برای شناسه مجموعه داده، عبارت 'firebase_recommendations_dataset' را وارد کنید و گزینه ایجاد مجموعه داده را انتخاب کنید.
  6. مجموعه داده جدید در منوی سمت چپ زیر نام پروژه نمایش داده می‌شود. روی آن کلیک کنید.
  7. برای باز کردن پنل ایجاد جدول، گزینه «ایجاد جدول» را انتخاب کنید.
  8. برای ایجاد جدول از «فضای ذخیره‌سازی ابری گوگل» (Google Cloud Storage) گزینه «ایجاد جدول از» (Create table from) را انتخاب کنید.
  9. در فیلد «انتخاب فایل از سطل GCS» ، عبارت 'gs://firebase-recommendations/recommendations-test/formatted_data_filtered.txt' را وارد کنید.
  10. در منوی کشویی File format، گزینه‌ی «JSONL» را انتخاب کنید.
  11. برای نام جدول، عبارت 'recommendations_table' را وارد کنید.
  12. کادر زیر Schema > Auto detection > Schema and input parameters را علامت بزنید.
  13. ایجاد جدول را انتخاب کنید

مجموعه داده‌های نمونه را کاوش کنید

در این مرحله، می‌توانید به صورت اختیاری طرحواره را بررسی کرده و پیش‌نمایشی از این مجموعه داده ارائه دهید.

  1. برای باز کردن جداول موجود در firebase-recommendations-dataset ، از منوی سمت چپ آن را انتخاب کنید.
  2. برای مشاهده طرح جدول، جدول recommendations-table را انتخاب کنید.
  3. برای مشاهده داده‌های واقعی رویداد Analytics که این جدول در آن قرار دارد ، پیش‌نمایش را انتخاب کنید.

ایجاد اعتبارنامه حساب سرویس

اکنون، اعتبارنامه‌های حساب سرویس را در پروژه کنسول Google Cloud خود ایجاد خواهیم کرد که می‌توانیم در محیط Colab در مرحله بعد برای دسترسی و بارگذاری داده‌های BigQuery خود از آنها استفاده کنیم.

  1. مطمئن شوید که پرداخت برای پروژه Google Cloud شما فعال است.
  2. فعال کردن APIهای BigQuery و BigQuery Storage API. < اینجا کلیک کنید >
  3. به صفحه ایجاد کلید حساب سرویس بروید.
  4. از لیست حساب‌های سرویس ، حساب سرویس جدید را انتخاب کنید.
  5. در قسمت نام حساب سرویس ، یک نام وارد کنید.
  6. از فهرست نقش‌ها ، پروژه > مالک را انتخاب کنید.
  7. روی «ایجاد» کلیک کنید. یک فایل JSON که حاوی کلیدهای دانلود شده روی رایانه شماست.

در مرحله بعد، از Google Colab برای پیش‌پردازش این داده‌ها و آموزش مدل توصیه‌های خود استفاده خواهیم کرد.

۱۱. پیش‌پردازش داده‌ها و آموزش مدل توصیه‌ها

در این مرحله، از یک دفترچه یادداشت Colab برای انجام مراحل زیر استفاده خواهیم کرد:

  1. داده‌های BigQuery را به دفترچه یادداشت Colab وارد کنید
  2. پیش‌پردازش داده‌ها برای آماده‌سازی آن‌ها برای آموزش مدل
  3. مدل توصیه‌ها را بر اساس داده‌های تحلیلی آموزش دهید
  4. مدل را به عنوان یک مدل TF lite صادر کنید
  5. مدل را در کنسول Firebase مستقر کنید تا بتوانیم از آن در برنامه خود استفاده کنیم.

قبل از اینکه دفترچه آموزش Colab را راه‌اندازی کنیم، ابتدا API مدیریت مدل Firebase را فعال خواهیم کرد تا Colab بتواند مدل آموزش‌دیده را در کنسول Firebase ما مستقر کند.

فعال کردن API مدیریت مدل Firebase

یک سطل برای ذخیره مدل‌های یادگیری ماشین خود ایجاد کنید

در کنسول فایربیس خود، به Storage بروید و روی Get started کلیک کنید. fbbea78f0eb3dc9f.png

برای تنظیم سطل خود، دیالوگ را دنبال کنید.

۱۹۵۱۷c0d6d2aa14d.png

فعال کردن API فایربیس ML

به صفحه Firebase ML API در کنسول Google Cloud بروید و روی فعال کردن (Enable) کلیک کنید.

استفاده از دفترچه یادداشت Colab برای آموزش و استقرار مدل

دفترچه یادداشت Colab را با استفاده از لینک زیر باز کنید و مراحل داخل آن را تکمیل کنید. پس از اتمام مراحل دفترچه یادداشت Colab، یک فایل مدل TF lite خواهید داشت که در کنسول Firebase مستقر شده و می‌توانیم آن را با برنامه خود همگام‌سازی کنیم.

باز در کولاب

۱۲. مدل را در برنامه خود دانلود کنید

در این مرحله، برنامه خود را طوری تغییر می‌دهیم که مدلی را که از Firebase Machine Learning آموزش داده‌ایم، دانلود کند.

وابستگی Firebase ML را اضافه کنید

برای استفاده از مدل‌های یادگیری ماشین Firebase در برنامه‌تان، وابستگی زیر مورد نیاز است. این وابستگی باید از قبل اضافه شده باشد (تأیید کنید).

app/build.grade.kts

implementation("com.google.firebase:firebase-ml-modeldownloader:24.1.2")

مدل را با Firebase Model Manager API دانلود کنید

کد زیر را در RecommendationClient.kt کپی کنید تا شرایطی را که تحت آن دانلود مدل انجام می‌شود تنظیم کنید و یک وظیفه دانلود برای همگام‌سازی مدل از راه دور با برنامه ما ایجاد کنید.

توصیه‌نامهClient.kt

    private fun downloadModel(modelName: String) {
        val conditions = CustomModelDownloadConditions.Builder()
            .requireWifi()
            .build()
        FirebaseModelDownloader.getInstance()
            .getModel(modelName, DownloadType.LOCAL_MODEL, conditions)
            .addOnCompleteListener {
                if (!it.isSuccessful) {
                    showToast(context, "Failed to get model file.")
                } else {
                    showToast(context, "Downloaded remote model: $modelName")
                    GlobalScope.launch { initializeInterpreter(it.result) }
                }
            }
            .addOnFailureListener {
                showToast(context, "Model download failed for recommendations, please check your connection.")
            }
    }

۱۳. مدل توصیه Tensorflow Lite را در برنامه خود ادغام کنید

محیط اجرایی Tensorflow Lite به شما امکان می‌دهد از مدل خود در برنامه برای تولید پیشنهادها استفاده کنید. در مرحله قبل، یک مفسر TFlite را با فایل مدلی که دانلود کردیم، مقداردهی اولیه کردیم. در این مرحله، ابتدا یک دیکشنری و برچسب‌ها را برای همراهی مدل خود در مرحله استنتاج بارگذاری می‌کنیم، سپس پیش‌پردازش را برای تولید ورودی‌ها به مدل خود اضافه می‌کنیم و پس‌پردازش را انجام می‌دهیم که در آن نتایج را از استنتاج خود استخراج خواهیم کرد.

بارگذاری دیکشنری و برچسب‌ها

برچسب‌های مورد استفاده برای تولید کاندیدهای توصیه توسط مدل توصیه‌ها در فایل sorted_movie_vocab.json در پوشه res/assets فهرست شده‌اند. کد زیر را برای بارگذاری این کاندیدها کپی کنید.

توصیه‌نامهClient.kt

    /** Load recommendation candidate list.  */
    private suspend fun loadCandidateList() {
        return withContext(Dispatchers.IO) {
            val collection = MovieRepository.getInstance(context).getContent()
            for (item in collection) {
                candidates[item.id] = item
            }
            Log.v(TAG, "Candidate list loaded.")
        }
    }

پیاده‌سازی پیش‌پردازش

در مرحله پیش‌پردازش، شکل داده‌های ورودی را تغییر می‌دهیم تا با آنچه مدل ما انتظار دارد مطابقت داشته باشد. در اینجا، اگر تعداد لایک‌های کاربر زیاد نباشد، طول ورودی را با یک مقدار جایگزین پر می‌کنیم. کد زیر را کپی کنید:

توصیه‌نامهClient.kt

    /** Given a list of selected items, preprocess to get tflite input.  */
    @Synchronized
    private suspend fun preprocess(selectedMovies: List<Movie>): IntArray {
        return withContext(Dispatchers.Default) {
            val inputContext = IntArray(config.inputLength)
            for (i in 0 until config.inputLength) {
                if (i < selectedMovies.size) {
                    val (id) = selectedMovies[i]
                    inputContext[i] = id
                } else {
                    // Padding input.
                    inputContext[i] = config.pad
                }
            }
            inputContext
        }
    }


اجرای مفسر برای تولید توصیه‌ها

در اینجا ما از مدلی که در مرحله قبل دانلود کردیم برای اجرای استنتاج روی ورودی پیش‌پردازش‌شده‌مان استفاده می‌کنیم. نوع ورودی و خروجی را برای مدل خود تنظیم می‌کنیم و استنتاج را برای تولید پیشنهادهای فیلم اجرا می‌کنیم. کد زیر را در برنامه خود کپی کنید.

توصیه‌نامهClient.kt

    /** Given a list of selected items, and returns the recommendation results.  */
    @Synchronized
    suspend fun recommend(selectedMovies: List<Movie>): List<Result> {
        return withContext(Dispatchers.Default) {
            val inputs = arrayOf<Any>(preprocess(selectedMovies))

            // Run inference.
            val outputIds = IntArray(config.outputLength)
            val confidences = FloatArray(config.outputLength)
            val outputs: MutableMap<Int, Any> = HashMap()
            outputs[config.outputIdsIndex] = outputIds
            outputs[config.outputScoresIndex] = confidences
            tflite?.let {
                it.runForMultipleInputsOutputs(inputs, outputs)
                postprocess(outputIds, confidences, selectedMovies)
            } ?: run {
                Log.e(TAG, "No tflite interpreter loaded")
                emptyList()
            }
        }
    }



پیاده‌سازی پس‌پردازش

در نهایت، در این مرحله، خروجی مدل خود را پس‌پردازش می‌کنیم، نتایجی را که بالاترین اطمینان را دارند انتخاب می‌کنیم و مقادیر موجود (فیلم‌هایی که کاربر قبلاً لایک کرده است) را حذف می‌کنیم. کد زیر را در برنامه خود کپی کنید.

توصیه‌نامهClient.kt

    /** Postprocess to gets results from tflite inference.  */
    @Synchronized
    private suspend fun postprocess(
        outputIds: IntArray, confidences: FloatArray, selectedMovies: List<Movie>
    ): List<Result> {
        return withContext(Dispatchers.Default) {
            val results = ArrayList<Result>()

            // Add recommendation results. Filter null or contained items.
            for (i in outputIds.indices) {
                if (results.size >= config.topK) {
                    Log.v(TAG, String.format("Selected top K: %d. Ignore the rest.", config.topK))
                    break
                }
                val id = outputIds[i]
                val item = candidates[id]
                if (item == null) {
                    Log.v(TAG, String.format("Inference output[%d]. Id: %s is null", i, id))
                    continue
                }
                if (selectedMovies.contains(item)) {
                    Log.v(TAG, String.format("Inference output[%d]. Id: %s is contained", i, id))
                    continue
                }
                val result = Result(
                    id, item,
                    confidences[i]
                )
                results.add(result)
                Log.v(TAG, String.format("Inference output[%d]. Result: %s", i, result))
            }
            results
        }
    }


برنامه خود را آزمایش کنید!

برنامه خود را دوباره اجرا کنید. همزمان با انتخاب چند فیلم، برنامه باید به طور خودکار مدل جدید را دانلود کرده و شروع به تولید پیشنهادها کند!

۱۴. تبریک می‌گویم!

شما با استفاده از TensorFlow Lite و Firebase یک ویژگی پیشنهاددهی در برنامه خود ایجاد کرده‌اید. توجه داشته باشید که تکنیک‌ها و خط لوله نشان داده شده در این آزمایشگاه کد را می‌توان تعمیم داد و برای ارائه انواع دیگر پیشنهادها نیز استفاده کرد.

آنچه ما پوشش داده‌ایم

  • فایربیس ام‌ال
  • تجزیه و تحلیل فایربیس
  • رویدادهای تحلیلی را به BigQuery صادر کنید
  • رویدادهای تجزیه و تحلیل پیش‌پردازش
  • آموزش توصیه‌ها با مدل TensorFlow
  • مدل را صادر کرده و در کنسول Firebase مستقر کنید
  • ارائه پیشنهاد فیلم در یک اپلیکیشن

مراحل بعدی

  • توصیه‌های Firebase ML را در برنامه خود پیاده‌سازی کنید.

اطلاعات بیشتر

سوالی دارید؟

گزارش مشکلات