1. Tinjauan
Selamat datang di Rekomendasi dengan TensorFlow Lite dan codelab Firebase. Dalam codelab ini, Anda akan mempelajari cara menggunakan TensorFlow Lite dan Firebase untuk men-deploy model rekomendasi ke aplikasi Anda. Codelab ini didasarkan pada contoh TensorFlow Lite ini .
Rekomendasi memungkinkan aplikasi menggunakan pembelajaran mesin untuk menyajikan konten yang paling relevan secara cerdas untuk setiap pengguna. Mereka mempertimbangkan perilaku pengguna sebelumnya untuk menyarankan konten aplikasi yang mungkin ingin berinteraksi dengan pengguna di masa mendatang dengan menggunakan model yang dilatih tentang perilaku agregat sejumlah besar pengguna lain.
Tutorial ini menunjukkan cara mendapatkan data dari pengguna aplikasi Anda dengan Firebase Analytics, membuat model machine learning untuk rekomendasi dari data tersebut, lalu menggunakan model tersebut di aplikasi Android untuk menjalankan inferensi dan mendapatkan rekomendasi. Secara khusus, rekomendasi kami akan menyarankan film mana yang kemungkinan besar akan ditonton pengguna berdasarkan daftar film yang disukai pengguna sebelumnya.
Apa yang akan Anda pelajari
- Integrasikan Firebase Analytics ke dalam aplikasi android untuk mengumpulkan data perilaku pengguna
- Ekspor data itu ke Google Big Query
- Pra-proses data dan latih model rekomendasi TF Lite
- Terapkan model TF Lite ke Firebase ML dan akses dari aplikasi Anda
- Jalankan inferensi perangkat menggunakan model untuk menyarankan rekomendasi kepada pengguna
Apa yang Anda butuhkan
- Versi Android Studio terbaru.
- Kode sampel.
- Perangkat uji dengan Android 7+ dan layanan Google Play 9.8 atau lebih baru, atau Emulator dengan layanan Google Play 9.8 atau lebih baru
- Jika menggunakan perangkat, kabel koneksi.
Bagaimana Anda akan menggunakan tutorial ini?
Bagaimana menilai pengalaman Anda dalam membuat aplikasi Android?
2. Dapatkan kode contoh
Klon repositori GitHub dari baris perintah.
$ git clone https://github.com/FirebaseExtended/codelab-contentrecommendation-android.git
3. Impor aplikasi awal
Dari Android Studio, pilih direktori codelab-recommendations-android
( ) dari unduhan kode contoh ( File > Open > .../codelab-recommendations-android/start).
Anda sekarang harus membuka proyek awal di Android Studio.
4. Buat proyek konsol Firebase
Buat proyek baru
- Buka konsol Firebase .
- Pilih Tambahkan proyek (atau Buat proyek jika itu yang pertama).
- Pilih atau masukkan nama Proyek dan klik Lanjutkan .
- Pastikan "Aktifkan Google Analytics untuk proyek ini" diaktifkan.
- Ikuti langkah penyiapan selanjutnya di konsol Firebase, lalu klik Buat proyek (atau Tambahkan Firebase, jika Anda menggunakan proyek Google yang sudah ada).
5. Tambahkan Firebase
- Dari layar ikhtisar proyek baru Anda, klik ikon Android untuk meluncurkan alur kerja penyiapan.
- Masukkan nama paket codelab:
com.google.firebase.codelabs.recommendations
- Pilih Daftarkan aplikasi .
Tambahkan file google-services.json ke aplikasi Anda
Setelah menambahkan nama paket dan memilih Daftar, klik Unduh google-services.json untuk mendapatkan file konfigurasi Android Firebase, lalu salin file google-services.json ke direktori app
di proyek Anda. Setelah file diunduh, Anda dapat Lewati langkah selanjutnya yang ditampilkan di konsol (mereka sudah dilakukan untuk Anda di proyek build-android-start).
Tambahkan plugin layanan google ke aplikasi Anda
Plugin google-services menggunakan file google-services.json untuk mengonfigurasi aplikasi Anda agar menggunakan Firebase. Baris berikut seharusnya sudah ditambahkan ke file build.gradle.kts di proyek (centang untuk mengonfirmasi):
app/build.grade.kts
plugins {
id("com.google.gms.google-services")
}
build.grade.kts
plugins {
id("com.google.gms.google-services") version "4.3.15" apply false
}
Sinkronkan proyek Anda dengan file gradle
Untuk memastikan bahwa semua dependensi tersedia untuk aplikasi Anda, saat ini Anda harus menyinkronkan proyek Anda dengan file gradle. Pilih File > Sinkronkan Proyek dengan File Gradle dari toolbar Android Studio.
6. Jalankan aplikasi awal
Sekarang setelah Anda mengimpor proyek ke Android Studio dan mengonfigurasi plugin google-services
dengan file JSON, Anda siap menjalankan aplikasi untuk pertama kalinya. Hubungkan perangkat Android Anda, dan klik Jalankan ( ) di bilah alat Android Studio.
Aplikasi harus diluncurkan di perangkat Anda. Pada titik ini, Anda dapat melihat aplikasi yang berfungsi yang menampilkan tab dengan daftar film, tab Film yang disukai, dan tab Rekomendasi. Anda dapat mengklik film di daftar film untuk menambahkannya ke daftar yang Anda sukai. Setelah menyelesaikan langkah codelab yang tersisa, kami akan dapat membuat rekomendasi film di tab Rekomendasi.
7. Tambahkan Firebase Analytics ke aplikasi
Pada langkah ini, Anda akan menambahkan Firebase Analytics ke aplikasi untuk mencatat data perilaku pengguna (dalam hal ini, film mana yang disukai pengguna). Data ini akan digunakan secara agregat pada langkah selanjutnya untuk melatih model rekomendasi.
Tambahkan Firebase Bill of Materials dan ketergantungan Analytics
Ketergantungan berikut diperlukan untuk menambahkan Firebase Analytics ke aplikasi Anda. Mereka seharusnya sudah disertakan dalam file app/build.gradle.kts (verifikasi).
app/build.grade.kts
implementation(platform("com.google.firebase:firebase-bom:32.0.0"))
implementation("com.google.firebase:firebase-analytics-ktx")
Siapkan Firebase Analytics di aplikasi
LikedMoviesViewModel berisi fungsi untuk menyimpan film yang disukai pengguna. Setiap kali pengguna menyukai film baru, kami juga ingin mengirimkan peristiwa log analitik untuk merekamnya.
Tambahkan fungsi onMovieLiked dengan kode di bawah ini untuk mendaftarkan acara analitik saat pengguna mengklik seperti di film.
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())
}
}
Tambahkan bidang dan fungsi berikut untuk mencatat peristiwa Analytics saat film ditambahkan ke daftar Disukai pengguna.
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)
}
}
8. Uji integrasi Analytics Anda
Pada langkah ini, kami akan membuat peristiwa Analytics di aplikasi dan memverifikasi bahwa peristiwa tersebut dikirim ke Firebase Console.
Aktifkan Pencatatan Debug Analytics
Firebase Analytics dirancang untuk memaksimalkan masa pakai baterai pengguna dan akan mengelompokkan peristiwa di perangkat dan hanya mengirimkannya ke Firebase sesekali. Untuk tujuan debug, kami dapat menonaktifkan perilaku ini untuk melihat peristiwa saat dicatat secara real time dengan menjalankan perintah berikut di shell.
Terminal
adb shell setprop debug.firebase.analytics.app com.google.firebase.codelabs.recommendations
Verifikasi peristiwa Analytics dibuat
- Di studio Android, buka jendela Logcat untuk memeriksa logging dari aplikasi Anda.
- Setel filter Logcat ke string "Logging event".
- Verifikasi bahwa peristiwa Analytics "select_item" ditampilkan setiap kali Anda menyukai film di aplikasi.
Pada titik ini, Anda telah berhasil mengintegrasikan Firebase Analytics ke dalam aplikasi Anda. Saat pengguna menggunakan aplikasi Anda dan menyukai film, kesukaan mereka akan dicatat secara agregat. Kami akan menggunakan data gabungan ini di bagian codelab lainnya untuk melatih model rekomendasi kami. Berikut ini adalah langkah opsional untuk melihat peristiwa Analytics yang sama dengan yang Anda lihat di Logcat juga streaming ke konsol Firebase. Jangan ragu untuk melompat ke halaman berikutnya.
Opsional: Konfirmasi peristiwa Analytics di Firebase Console
- Buka konsol Firebase .
- Pilih DebugView di bawah Analytics
- Di Android Studio, pilih Jalankan untuk meluncurkan aplikasi dan menambahkan beberapa film ke daftar Suka Anda.
- Di DebugView Firebase console, verifikasi bahwa peristiwa ini sedang dicatat saat Anda menambahkan film di aplikasi.
9. Ekspor data Analytics ke Big Query
Big Query adalah produk Google Cloud yang memungkinkan Anda memeriksa dan memproses data dalam jumlah besar. Pada langkah ini, Anda akan menghubungkan proyek Firebase Console ke Big Query sehingga data Analytics yang dihasilkan oleh aplikasi Anda secara otomatis diekspor ke Big Query.
Aktifkan ekspor Big Query
- Buka konsol Firebase .
- Pilih ikon roda gigi Pengaturan di samping Ikhtisar Proyek , lalu pilih Pengaturan proyek
- Pilih tab Integrasi .
- Pilih Tautkan (atau Kelola ) di dalam blok BigQuery .
- Pilih Berikutnya di langkah Tentang Menautkan Firebase ke BigQuery .
- Di bagian Konfigurasikan integrasi , klik sakelar untuk mengaktifkan pengiriman data Google Analytics dan pilih Tautkan ke BigQuery .
Anda sekarang telah mengaktifkan proyek konsol Firebase untuk secara otomatis mengirimkan data peristiwa Firebase Analytics ke Big Query. Hal ini terjadi secara otomatis tanpa interaksi lebih lanjut, namun ekspor pertama yang membuat set data analitik di BigQuery mungkin tidak akan terjadi selama 24 jam. Setelah set data dibuat, Firebase akan terus mengekspor peristiwa Analytics baru ke Big Query ke dalam tabel intraday, dan mengelompokkan peristiwa dari hari-hari sebelumnya di tabel peristiwa.
Melatih model rekomendasi membutuhkan banyak data. Karena kita belum memiliki aplikasi yang menghasilkan data dalam jumlah besar, pada langkah berikutnya kita akan mengimpor kumpulan data sampel ke BigQuery untuk digunakan di sisa tutorial ini.
10. Gunakan BigQuery untuk mendapatkan data pelatihan model
Sekarang setelah kami menghubungkan Firebase Console untuk mengekspor ke BigQuery, data peristiwa analisis aplikasi kami akan muncul secara otomatis di konsol BigQuery setelah beberapa waktu. Untuk mendapatkan beberapa data awal untuk keperluan tutorial ini, pada langkah ini kita akan mengimpor kumpulan data sampel yang ada ke konsol BigQuery Anda untuk digunakan melatih model rekomendasi kami.
Impor kumpulan data sampel ke BigQuery
- Buka dasbor BigQuery di konsol cloud Google.
- Pilih nama proyek Anda di menu.
- Pilih nama project Anda di bagian bawah navigasi kiri BigQuery untuk melihat detailnya.
- Pilih Buat kumpulan data untuk membuka panel pembuatan kumpulan data.
- Masukkan 'firebase_recommendations_dataset' untuk ID Kumpulan Data dan pilih Buat kumpulan data .
- Kumpulan data baru akan muncul di menu sebelah kiri di bawah nama proyek. Klik itu.
- Pilih Buat tabel untuk membuka panel pembuatan tabel.
- Untuk Buat tabel dari pilih 'Google Cloud Storage'.
- Di kolom Select file from GCS bucket , masukkan 'gs://firebase-recommendations/recommendations-test/formatted_data_filtered.txt'.
- Pilih 'JSONL' di tarik-turun Format file .
- Masukkan 'recommendations_table' untuk Nama tabel .
- Centang kotak di bawah Skema > Deteksi otomatis > Skema dan masukan parameter
- Pilih Buat tabel
Jelajahi kumpulan data sampel
Pada titik ini, Anda dapat secara opsional menjelajahi skema dan mempratinjau kumpulan data ini.
- Pilih firebase-recommendations-dataset di menu sebelah kiri untuk meluaskan tabel yang ada di dalamnya.
- Pilih tabel tabel rekomendasi untuk melihat skema tabel.
- Pilih Pratinjau untuk melihat data peristiwa Analytics yang sebenarnya di dalam tabel ini.
Buat kredensial akun layanan
Sekarang, kita akan membuat kredensial akun layanan di project Google Cloud Console yang dapat digunakan di lingkungan Colab pada langkah berikut untuk mengakses dan memuat data BigQuery kita.
- Pastikan penagihan diaktifkan untuk project Google Cloud Anda.
- Aktifkan BigQuery dan BigQuery Storage API API. < klik di sini >
- Buka halaman Buat Kunci Akun Layanan .
- Dari daftar Akun layanan , pilih Akun layanan baru .
- Di bidang Nama akun layanan , masukkan nama.
- Dari daftar Peran , pilih Proyek > Pemilik .
- Klik Buat . File JSON yang berisi unduhan kunci Anda ke komputer Anda.
Pada langkah berikutnya, kami akan menggunakan Google Colab untuk memproses data ini terlebih dahulu dan melatih model rekomendasi kami.
11. Praproses data dan model rekomendasi pelatihan
Pada langkah ini, kami akan menggunakan notebook Colab untuk melakukan langkah-langkah berikut:
- impor data BigQuery ke notebook Colab
- praproses data untuk menyiapkannya untuk pelatihan model
- latih model rekomendasi pada data analitik
- ekspor model sebagai model TF lite
- menerapkan model ke Firebase Console sehingga kami dapat menggunakannya di aplikasi kami
Sebelum meluncurkan notebook pelatihan Colab, pertama-tama kita akan mengaktifkan Firebase Model Management API agar Colab dapat menerapkan model yang dilatih ke Firebase console.
Aktifkan Firebase Model Management API
Buat keranjang untuk menyimpan model ML Anda
Di Firebase Console Anda, buka Penyimpanan dan klik Mulai.
Ikuti dialog untuk menyiapkan ember Anda.
Aktifkan Firebase ML API
Buka halaman API Firebase ML di Google Cloud Console dan klik Aktifkan.
Gunakan notebook Colab untuk melatih dan men-deploy model
Buka buku catatan colab menggunakan tautan berikut dan selesaikan langkah-langkah di dalamnya. Setelah menyelesaikan langkah-langkah di notebook Colab, Anda akan memiliki file model TF lite yang di-deploy ke Firebase console yang dapat disinkronkan ke aplikasi kita.
Buka di Colab
12. Unduh model di aplikasi Anda
Pada langkah ini, kita akan memodifikasi aplikasi kita untuk mengunduh model yang baru saja kita latih dari Firebase Machine Learning.
Tambahkan dependensi Firebase ML
Dependensi berikut diperlukan untuk menggunakan model Firebase Machine Learning di aplikasi Anda. Seharusnya sudah ditambahkan (verifikasi).
app/build.grade.kts
implementation("com.google.firebase:firebase-ml-modeldownloader:24.1.2")
Download model dengan Firebase Model Manager API
Salin kode di bawah ke RecommendationClient.kt untuk menyiapkan kondisi di mana unduhan model terjadi dan buat tugas unduhan untuk menyinkronkan model jarak jauh ke aplikasi kita.
RekomendasiClient.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.")
}
}
13. Integrasikan model rekomendasi Tensorflow Lite di aplikasi Anda
Tensorflow Lite runtime akan memungkinkan Anda menggunakan model Anda di aplikasi untuk menghasilkan rekomendasi. Pada langkah sebelumnya kami menginisialisasi juru bahasa TFlite dengan file model yang kami unduh. Pada langkah ini, pertama-tama kita akan memuat kamus dan label untuk menemani model kita dalam langkah inferensi, lalu kita akan menambahkan pra-pemrosesan untuk menghasilkan input ke model kita dan pasca-pemrosesan di mana kita akan mengekstrak hasil dari inferensi kita .
Muat Kamus dan Label
Label yang digunakan untuk menghasilkan kandidat rekomendasi berdasarkan model rekomendasi tercantum dalam file sort_movie_vocab.json di folder res/assets. Salin kode berikut untuk memuat kandidat ini.
RekomendasiClient.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.")
}
}
Terapkan Pra-pemrosesan
Pada langkah pra-pemrosesan, kami mengubah bentuk data input agar sesuai dengan yang diharapkan model kami. Di sini, kami mengisi panjang input dengan nilai placeholder jika kami belum menghasilkan banyak suka dari pengguna. Salin kode di bawah ini:
RekomendasiClient.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
}
}
Jalankan juru bahasa untuk menghasilkan rekomendasi
Di sini kami menggunakan model yang kami unduh di langkah sebelumnya untuk menjalankan inferensi pada input yang telah diproses sebelumnya. Kami menetapkan jenis masukan dan keluaran untuk model kami dan menjalankan inferensi untuk menghasilkan rekomendasi film kami. Salin kode berikut ke dalam aplikasi Anda.
RekomendasiClient.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()
}
}
}
Terapkan Pasca-pemrosesan
Terakhir, pada langkah ini kami melakukan pasca-proses output dari model kami, memilih hasil dengan keyakinan tertinggi dan menghapus nilai yang terkandung (film yang sudah disukai pengguna). Salin kode berikut ke dalam aplikasi Anda.
RekomendasiClient.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
}
}
Uji aplikasi Anda!
Jalankan kembali aplikasi Anda. Saat Anda memilih beberapa film, model baru akan diunduh secara otomatis dan mulai menghasilkan rekomendasi!
14. Selamat!
Anda telah membuat fitur rekomendasi ke dalam aplikasi Anda menggunakan TensorFlow Lite dan Firebase. Perlu diperhatikan bahwa teknik dan pipeline yang ditampilkan dalam codelab ini dapat digeneralisasikan dan juga digunakan untuk menyajikan jenis rekomendasi lainnya.
Apa yang telah kita bahas
- Firebase ML
- Analitik Firebase
- Ekspor peristiwa analitik ke BigQuery
- Peristiwa analitik praproses
- Latih rekomendasi model TensorFlow
- Ekspor model dan terapkan ke Firebase Console
- Sajikan rekomendasi film dalam aplikasi
Langkah selanjutnya
- Terapkan rekomendasi Firebase ML di aplikasi Anda.