1. ภาพรวม
ยินดีต้อนรับสู่ Codelab การแนะนำด้วย TensorFlow Lite และ Firebase ใน Codelab นี้ คุณจะได้เรียนรู้วิธีใช้ TensorFlow Lite และ Firebase เพื่อติดตั้งใช้งานโมเดลคำแนะนำในแอป Codelab นี้อิงตามตัวอย่าง TensorFlow Lite นี้
คำแนะนำช่วยให้แอปใช้แมชชีนเลิร์นนิงเพื่อแสดงเนื้อหาที่เกี่ยวข้องมากที่สุดต่อผู้ใช้แต่ละรายได้อย่างชาญฉลาด โดยจะพิจารณาพฤติกรรมของผู้ใช้ในอดีตเพื่อแนะนำเนื้อหาของแอปที่ผู้ใช้อาจต้องการโต้ตอบในอนาคตโดยใช้โมเดลที่ฝึกจากพฤติกรรมรวมของผู้ใช้รายอื่นๆ จำนวนมาก
บทแนะนำนี้แสดงวิธีรับข้อมูลจากผู้ใช้แอปด้วย Firebase Analytics สร้างโมเดลแมชชีนเลิร์นนิงสําหรับคําแนะนําจากข้อมูลนั้น แล้วใช้โมเดลดังกล่าวในแอป Android เพื่อเรียกใช้การอนุมานและรับคําแนะนํา โดยเฉพาะอย่างยิ่ง คำแนะนำของเราจะแนะนำภาพยนตร์ที่ผู้ใช้น่าจะรับชมมากที่สุดจากรายการภาพยนตร์ที่ผู้ใช้เคยกดชอบ
สิ่งที่คุณจะได้เรียนรู้
- ผสานรวม Firebase Analytics เข้ากับแอป Android เพื่อรวบรวมข้อมูลพฤติกรรมของผู้ใช้
- ส่งออกข้อมูลดังกล่าวไปยัง Google BigQuery
- ประมวลผลข้อมูลล่วงหน้าและฝึกโมเดลคำแนะนำ TF Lite
- ติดตั้งใช้งานโมเดล TF Lite ใน Firebase ML และเข้าถึงจากแอป
- เรียกใช้การอนุมานในอุปกรณ์โดยใช้โมเดลเพื่อแนะนำเนื้อหาแก่ผู้ใช้
สิ่งที่คุณต้องมี
- Android Studio เวอร์ชันล่าสุด
- โค้ดตัวอย่าง
- อุปกรณ์ทดสอบที่ใช้ Android 7 ขึ้นไปและบริการ Google Play 9.8 ขึ้นไป หรือโปรแกรมจำลองที่มีบริการ Google Play 9.8 ขึ้นไป
- หากใช้อุปกรณ์ ให้ใช้สายเชื่อมต่อ
คุณจะใช้บทแนะนำนี้อย่างไร
คุณจะให้คะแนนประสบการณ์ในการสร้างแอป Android เท่าใด
2. รับโค้ดตัวอย่าง
โคลนที่เก็บ GitHub จากบรรทัดคำสั่ง
$ git clone https://github.com/FirebaseExtended/codelab-contentrecommendation-android.git
3. นำเข้าแอปเริ่มต้น
จาก Android Studio ให้เลือกไดเรกทอรี codelab-recommendations-android
( ) จากการดาวน์โหลดโค้ดตัวอย่าง (File > Open > .../codelab-recommendations-android/start)
ตอนนี้คุณควรเปิดโปรเจ็กต์เริ่มต้นใน Android Studio แล้ว
4. สร้างโปรเจ็กต์คอนโซล Firebase
สร้างโปรเจ็กต์ใหม่
- ไปที่คอนโซล Firebase
- เลือกเพิ่มโปรเจ็กต์ (หรือสร้างโปรเจ็กต์หากเป็นโปรเจ็กต์แรก)
- เลือกหรือป้อนชื่อโปรเจ็กต์ แล้วคลิกต่อไป
- ตรวจสอบว่าได้เปิดใช้ "เปิดใช้ Google Analytics สำหรับโปรเจ็กต์นี้" แล้ว
- ทำตามขั้นตอนการตั้งค่าที่เหลือในคอนโซล Firebase แล้วคลิกสร้างโปรเจ็กต์ (หรือเพิ่ม Firebase หากคุณใช้โปรเจ็กต์ Google ที่มีอยู่)
5. เพิ่ม Firebase
- จากหน้าจอภาพรวมของโปรเจ็กต์ใหม่ ให้คลิกไอคอน Android เพื่อเปิดเวิร์กโฟลว์การตั้งค่า
- ป้อนชื่อแพ็กเกจของโค้ดแล็บ:
com.google.firebase.codelabs.recommendations
- เลือกลงทะเบียนแอป
เพิ่มไฟล์ google-services.json ลงในแอป
หลังจากเพิ่มชื่อแพ็กเกจและเลือก "ลงทะเบียน" แล้ว ให้คลิกดาวน์โหลด google-services.json เพื่อรับไฟล์กำหนดค่า Firebase Android จากนั้นคัดลอกไฟล์ google-services.json ไปยังไดเรกทอรี app
ในโปรเจ็กต์ หลังจากดาวน์โหลดไฟล์แล้ว คุณสามารถข้ามขั้นตอนถัดไปที่แสดงในคอนโซลได้ (ระบบได้ดำเนินการให้คุณแล้วในโปรเจ็กต์ build-android-start)
เพิ่มปลั๊กอิน google-services ลงในแอป
ปลั๊กอิน google-services ใช้ไฟล์ google-services.json เพื่อกำหนดค่าแอปพลิเคชันให้ใช้ Firebase ควรเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ build.gradle.kts ในโปรเจ็กต์แล้ว (ตรวจสอบเพื่อยืนยัน)
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
}
ซิงค์โปรเจ็กต์กับไฟล์ Gradle
คุณควรซิงค์โปรเจ็กต์กับไฟล์ Gradle ในตอนนี้เพื่อให้แน่ใจว่าแอปมีทรัพยากร Dependency ทั้งหมด เลือกไฟล์ > ซิงค์โปรเจ็กต์กับไฟล์ Gradle จากแถบเครื่องมือของ Android Studio
6. เรียกใช้แอปเริ่มต้น
ตอนนี้คุณได้นำเข้าโปรเจ็กต์ลงใน Android Studio และกำหนดค่าปลั๊กอิน google-services
ด้วยไฟล์ JSON แล้ว คุณก็พร้อมที่จะเรียกใช้แอปเป็นครั้งแรก เชื่อมต่ออุปกรณ์ Android แล้วคลิกเรียกใช้ ( ) ในแถบเครื่องมือ Android Studio
แอปควรเปิดขึ้นในอุปกรณ์ ตอนนี้คุณจะเห็นแอปพลิเคชันที่ใช้งานได้ซึ่งแสดงแท็บที่มีรายการภาพยนตร์ แท็บภาพยนตร์ที่ชอบ และแท็บคำแนะนำ คุณคลิกภาพยนตร์ในรายการภาพยนตร์เพื่อเพิ่มลงในรายการที่ชอบได้ หลังจากทำตามขั้นตอนที่เหลือของโค้ดแล็บแล้ว เราจะสร้างคำแนะนำภาพยนตร์ในแท็บคำแนะนำได้
7. เพิ่ม Firebase Analytics ลงในแอป
ในขั้นตอนนี้ คุณจะเพิ่ม Firebase Analytics ลงในแอปเพื่อบันทึกข้อมูลพฤติกรรมของผู้ใช้ (ในกรณีนี้คือภาพยนตร์ที่ผู้ใช้ชอบ) ระบบจะใช้ข้อมูลนี้แบบรวมในขั้นตอนต่อๆ ไปเพื่อฝึกโมเดลคำแนะนำ
เพิ่ม Firebase Bill of Materials และทรัพยากร Dependency ของ Analytics
คุณต้องเพิ่มทรัพยากร Dependency ต่อไปนี้เพื่อเพิ่ม 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 เมื่อมีการเพิ่มภาพยนตร์ลงในรายการที่ชอบของผู้ใช้
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. ทดสอบการผสานรวม Analytics
ในขั้นตอนนี้ เราจะสร้างเหตุการณ์ Analytics ในแอปและยืนยันว่าระบบได้ส่งเหตุการณ์ไปยังคอนโซล Firebase แล้ว
เปิดใช้การบันทึกการแก้ไขข้อบกพร่องของ Analytics
Firebase Analytics ออกแบบมาเพื่อยืดอายุการใช้งานแบตเตอรี่ของผู้ใช้ให้ได้มากที่สุด โดยจะจัดกลุ่มเหตุการณ์ในอุปกรณ์และส่งไปยัง Firebase เป็นครั้งคราวเท่านั้น เพื่อวัตถุประสงค์ในการแก้ไขข้อบกพร่อง เราสามารถปิดใช้ลักษณะการทำงานนี้เพื่อดูเหตุการณ์ตามที่ระบบบันทึกไว้แบบเรียลไทม์ได้โดยการเรียกใช้คำสั่งต่อไปนี้ในเชลล์
เทอร์มินัล
adb shell setprop debug.firebase.analytics.app com.google.firebase.codelabs.recommendations
ยืนยันว่าระบบสร้างเหตุการณ์ Analytics แล้ว
- ใน Android Studio ให้เปิดหน้าต่าง Logcat เพื่อตรวจสอบการบันทึกจากแอป
- ตั้งค่าตัวกรอง Logcat เป็นสตริง "Logging event"
- ตรวจสอบว่าระบบจะปล่อยเหตุการณ์ Analytics "select_item" ทุกครั้งที่คุณกดชอบภาพยนตร์ในแอป
ตอนนี้คุณได้ผสานรวม Firebase Analytics เข้ากับแอปเรียบร้อยแล้ว เมื่อผู้ใช้ใช้แอปและกดชอบภาพยนตร์ ระบบจะบันทึกการกดชอบของผู้ใช้แบบรวม เราจะใช้ข้อมูลรวมนี้ในส่วนที่เหลือของโค้ดแล็บนี้เพื่อฝึกโมเดลคำแนะนำ ขั้นตอนต่อไปนี้เป็นขั้นตอนที่ไม่บังคับเพื่อให้เห็นเหตุการณ์ Analytics เดียวกันกับที่เห็นใน Logcat ซึ่งสตรีมไปยังคอนโซล Firebase ด้วย คุณข้ามไปยังหน้าถัดไปได้เลย
ไม่บังคับ: ยืนยันเหตุการณ์ Analytics ในคอนโซล Firebase
- ไปที่คอนโซล Firebase
- เลือก DebugView ในส่วน Analytics
- ใน Android Studio ให้เลือกเรียกใช้เพื่อเปิดแอป แล้วเพิ่มภาพยนตร์บางเรื่องลงในรายการที่ชอบ
- ใน DebugView ของคอนโซล Firebase ให้ตรวจสอบว่าระบบบันทึกเหตุการณ์เหล่านี้เมื่อคุณเพิ่มภาพยนตร์ในแอป
9. ส่งออกข้อมูล Analytics ไปยัง BigQuery
BigQuery เป็นผลิตภัณฑ์ของ Google Cloud ที่ช่วยให้คุณตรวจสอบและประมวลผลข้อมูลจำนวนมากได้ ในขั้นตอนนี้ คุณจะเชื่อมต่อโปรเจ็กต์คอนโซล Firebase กับ BigQuery เพื่อให้ระบบส่งออกข้อมูล Analytics ที่แอปสร้างขึ้นไปยัง BigQuery โดยอัตโนมัติ
เปิดใช้การส่งออก BigQuery
- ไปที่คอนโซล Firebase
- เลือกไอคอนรูปเฟืองการตั้งค่าข้างภาพรวมของโปรเจ็กต์ แล้วเลือกการตั้งค่าโปรเจ็กต์
- เลือกแท็บการผสานรวม
- เลือกลิงก์ (หรือจัดการ) ในบล็อก BigQuery
- เลือกถัดไปในขั้นตอนเกี่ยวกับการลิงก์ Firebase กับ BigQuery
- ในส่วนกําหนดค่าการผสานรวม ให้คลิกสวิตช์เพื่อเปิดใช้การส่งข้อมูล Google Analytics แล้วเลือกลิงก์กับ BigQuery
ตอนนี้คุณได้เปิดใช้โปรเจ็กต์คอนโซล Firebase เพื่อส่งข้อมูลเหตุการณ์ Firebase Analytics ไปยัง BigQuery โดยอัตโนมัติแล้ว ซึ่งจะเกิดขึ้นโดยอัตโนมัติโดยไม่ต้องมีการโต้ตอบเพิ่มเติม อย่างไรก็ตาม การส่งออกครั้งแรกที่สร้างชุดข้อมูลวิเคราะห์ใน BigQuery อาจใช้เวลาถึง 24 ชั่วโมง หลังจากสร้างชุดข้อมูลแล้ว Firebase จะส่งออกเหตุการณ์ Analytics ใหม่ไปยัง BigQuery อย่างต่อเนื่องลงในตารางระหว่างวัน และจัดกลุ่มเหตุการณ์จากวันก่อนๆ ในตารางเหตุการณ์
การฝึกโมเดลคำแนะนำต้องใช้ข้อมูลจำนวนมาก เนื่องจากเรายังไม่มีแอปที่สร้างข้อมูลจำนวนมาก ในขั้นตอนถัดไป เราจะนำเข้าชุดข้อมูลตัวอย่างไปยัง BigQuery เพื่อใช้ในส่วนที่เหลือของบทแนะนำนี้
10. ใช้ BigQuery เพื่อรับข้อมูลการฝึกโมเดล
ตอนนี้เราได้เชื่อมต่อคอนโซล Firebase เพื่อส่งออกไปยัง BigQuery แล้ว ข้อมูลเหตุการณ์วิเคราะห์แอปจะปรากฏในคอนโซล BigQuery โดยอัตโนมัติหลังจากผ่านไปสักระยะ ในขั้นตอนนี้ เราจะนําเข้าชุดข้อมูลตัวอย่างที่มีอยู่ไปยังคอนโซล BigQuery เพื่อใช้ฝึกโมเดลคําแนะนํา เพื่อให้ได้ข้อมูลเริ่มต้นสําหรับวัตถุประสงค์ของบทแนะนำนี้
นำเข้าชุดข้อมูลตัวอย่างไปยัง BigQuery
- ไปที่แดชบอร์ด BigQuery ในคอนโซล Google Cloud
- เลือกชื่อโปรเจ็กต์ในเมนู
- เลือกชื่อโปรเจ็กต์ที่ด้านล่างของการนำทางด้านซ้ายของ BigQuery เพื่อดูรายละเอียด
- เลือกสร้างชุดข้อมูลเพื่อเปิดแผงการสร้างชุดข้อมูล
- ป้อน "firebase_recommendations_dataset" สำหรับรหัสชุดข้อมูล แล้วเลือกสร้างชุดข้อมูล
- ชุดข้อมูลใหม่จะปรากฏในเมนูด้านซ้ายใต้ชื่อโปรเจ็กต์ ให้คลิกไอคอนนี้
- เลือกสร้างตารางเพื่อเปิดแผงการสร้างตาราง
- สำหรับสร้างตารางจาก ให้เลือก "Google Cloud Storage"
- ในช่องเลือกไฟล์จากที่เก็บข้อมูล GCS ให้ป้อน "gs://firebase-recommendations/recommendations-test/formatted_data_filtered.txt"
- เลือก "JSONL" ในเมนูแบบเลื่อนลงรูปแบบไฟล์
- ป้อน "recommendations_table" สำหรับชื่อตาราง
- เลือกช่องใต้สคีมา > ตรวจหาอัตโนมัติ > สคีมาและพารามิเตอร์อินพุต
- เลือกสร้างตาราง
สำรวจชุดข้อมูลตัวอย่าง
ตอนนี้คุณสามารถเลือกสำรวจสคีมาและดูตัวอย่างชุดข้อมูลนี้ได้
- เลือก firebase-recommendations-dataset ในเมนูด้านซ้ายเพื่อขยายตารางที่มีอยู่
- เลือกตาราง recommendations-table เพื่อดูสคีมาของตาราง
- เลือกแสดงตัวอย่างเพื่อดูข้อมูลเหตุการณ์ Analytics จริงที่ตารางนี้มี
สร้างข้อมูลเข้าสู่ระบบบัญชีบริการ
ตอนนี้เราจะสร้างข้อมูลเข้าสู่ระบบของบัญชีบริการในโปรเจ็กต์ Google Cloud Console ที่เราใช้ได้ในสภาพแวดล้อม Colab ในขั้นตอนต่อไปเพื่อเข้าถึงและโหลดข้อมูล BigQuery
- ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Google Cloud แล้ว
- เปิดใช้ BigQuery API และ BigQuery Storage API < คลิกที่นี่>
- ไปที่หน้าสร้างคีย์บัญชีบริการ
- จากรายการบัญชีบริการ ให้เลือกบัญชีบริการใหม่
- ป้อนชื่อในช่องชื่อบัญชีบริการ
- จากรายการบทบาท ให้เลือกโปรเจ็กต์ > เจ้าของ
- คลิกสร้าง ระบบจะดาวน์โหลดไฟล์ JSON ที่มีคีย์ลงในคอมพิวเตอร์
ในขั้นตอนถัดไป เราจะใช้ Google Colab เพื่อประมวลผลข้อมูลนี้ล่วงหน้าและฝึกโมเดลคำแนะนำ
11. ประมวลผลข้อมูลล่วงหน้าและฝึกโมเดลคำแนะนำ
ในขั้นตอนนี้ เราจะใช้สมุดบันทึก Colab เพื่อทำตามขั้นตอนต่อไปนี้
- นำเข้าข้อมูล BigQuery ไปยังสมุดบันทึก Colab
- ประมวลผลข้อมูลล่วงหน้าเพื่อเตรียมข้อมูลสำหรับการฝึกโมเดล
- ฝึกโมเดลคำแนะนำในข้อมูล Analytics
- ส่งออกโมเดลเป็นโมเดล TF Lite
- Deploy โมเดลไปยังคอนโซล Firebase เพื่อให้เราใช้โมเดลในแอปได้
ก่อนที่จะเปิดตัว Notebook การฝึก Colab เราจะเปิดใช้ Firebase Model Management API ก่อนเพื่อให้ Colab สามารถติดตั้งใช้งานโมเดลที่ฝึกแล้วในคอนโซล Firebase ของเราได้
เปิดใช้ Firebase Model Management API
สร้างที่เก็บข้อมูลเพื่อจัดเก็บโมเดล ML
ในคอนโซล Firebase ให้ไปที่ Storage แล้วคลิก "เริ่มต้นใช้งาน"
ทำตามกล่องโต้ตอบเพื่อตั้งค่าที่เก็บข้อมูล
เปิดใช้ Firebase ML API
ไปที่หน้า Firebase ML API ใน Google Cloud Console แล้วคลิกเปิดใช้
ใช้ Colab Notebook เพื่อฝึกและทำให้โมเดลใช้งานได้
เปิดสมุดบันทึก Colab โดยใช้ลิงก์ต่อไปนี้และทำตามขั้นตอนภายใน หลังจากทำตามขั้นตอนในสมุดบันทึก Colab เสร็จแล้ว คุณจะมีไฟล์โมเดล TF Lite ที่ติดตั้งใช้งานในคอนโซล Firebase ซึ่งเราสามารถซิงค์ลงในแอปได้
เปิดใน Colab
12. ดาวน์โหลดโมเดลในแอป
ในขั้นตอนนี้ เราจะแก้ไขแอปเพื่อดาวน์โหลดโมเดลที่เราเพิ่งฝึกจากแมชชีนเลิร์นนิงใน Firebase
เพิ่มทรัพยากร Dependency ของ Firebase ML
คุณต้องมี Dependency ต่อไปนี้เพื่อใช้โมเดลแมชชีนเลิร์นนิงของ Firebase ในแอป โดยควรเพิ่มไว้แล้ว (ตรวจสอบ)
app/build.grade.kts
implementation("com.google.firebase:firebase-ml-modeldownloader:24.1.2")
ดาวน์โหลดโมเดลด้วย Firebase Model Manager API
คัดลอกโค้ดด้านล่างลงใน RecommendationClient.kt เพื่อตั้งค่าเงื่อนไขที่จะทำให้เกิดการดาวน์โหลดโมเดล และสร้างงานดาวน์โหลดเพื่อซิงค์โมเดลระยะไกลกับแอปของเรา
RecommendationClient.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. ผสานรวมโมเดลคำแนะนำ Tensorflow Lite ในแอป
รันไทม์ของ TensorFlow Lite จะช่วยให้คุณใช้โมเดลในแอปเพื่อสร้างคำแนะนำได้ ในขั้นตอนก่อนหน้า เราได้เริ่มต้นโปรแกรมแปล TFlite ด้วยไฟล์โมเดลที่ดาวน์โหลดมา ในขั้นตอนนี้ เราจะโหลดพจนานุกรมและป้ายกำกับก่อนเพื่อใช้กับโมเดลในขั้นตอนการอนุมาน จากนั้นจะเพิ่มการประมวลผลล่วงหน้าเพื่อสร้างอินพุตให้กับโมเดล และการประมวลผลภายหลังเพื่อดึงผลลัพธ์จากการอนุมาน
โหลดพจนานุกรมและป้ายกำกับ
ป้ายกำกับที่ใช้สร้างแคนดิเดตคำแนะนำโดยโมเดลคำแนะนำจะแสดงอยู่ในไฟล์ sorted_movie_vocab.json ในโฟลเดอร์ res/assets คัดลอกโค้ดต่อไปนี้เพื่อโหลดตัวเลือกเหล่านี้
RecommendationClient.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.")
}
}
ใช้การประมวลผลล่วงหน้า
ในขั้นตอนการประมวลผลล่วงหน้า เราจะเปลี่ยนรูปแบบของข้อมูลอินพุตให้ตรงกับที่โมเดลของเราคาดหวัง ในที่นี้ เราจะเพิ่มความยาวของอินพุตด้วยค่าตัวยึดตำแหน่งหากยังไม่ได้สร้างการกดถูกใจของผู้ใช้จำนวนมาก คัดลอกโค้ดด้านล่าง
RecommendationClient.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
}
}
เรียกใช้โปรแกรมแปลเพื่อสร้างคำแนะนำ
ในที่นี้ เราใช้โมเดลที่ดาวน์โหลดในขั้นตอนก่อนหน้าเพื่อเรียกใช้การอนุมานในอินพุตที่ประมวลผลล่วงหน้า เราตั้งค่าประเภทอินพุตและเอาต์พุตสำหรับโมเดลของเรา และเรียกใช้การอนุมานเพื่อสร้างภาพยนตร์ที่แนะนำ คัดลอกโค้ดต่อไปนี้ลงในแอป
RecommendationClient.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()
}
}
}
ใช้การประมวลผลภายหลัง
สุดท้าย ในขั้นตอนนี้ เราจะประมวลผลเอาต์พุตจากโมเดลของเราภายหลัง โดยเลือกผลลัพธ์ที่มีความมั่นใจสูงสุดและนำค่าที่รวมอยู่ (ภาพยนตร์ที่ผู้ใช้กดชอบแล้ว) ออก คัดลอกโค้ดต่อไปนี้ลงในแอป
RecommendationClient.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
}
}
ทดสอบแอป
เรียกใช้แอปอีกครั้ง เมื่อคุณเลือกภาพยนตร์ 2-3 เรื่อง ระบบจะดาวน์โหลดโมเดลใหม่โดยอัตโนมัติและเริ่มสร้างคำแนะนำ
14. ยินดีด้วย
คุณได้สร้างฟีเจอร์คำแนะนำลงในแอปโดยใช้ TensorFlow Lite และ Firebase โปรดทราบว่าเทคนิคและไปป์ไลน์ที่แสดงใน Codelab นี้สามารถนำไปใช้และใช้เพื่อแสดงคำแนะนำประเภทอื่นๆ ได้เช่นกัน
สิ่งที่เราได้พูดถึงไปแล้ว
- Firebase ML
- Firebase Analytics
- ส่งออกเหตุการณ์การวิเคราะห์ไปยัง BigQuery
- ประมวลผลเหตุการณ์ Analytics ล่วงหน้า
- ฝึกโมเดล TensorFlow สำหรับสินค้าแนะนำ
- ส่งออกโมเดลและทําให้ใช้งานได้ในคอนโซล Firebase
- แสดงภาพยนตร์ที่แนะนำในแอป
ขั้นตอนถัดไป
- ติดตั้งใช้งานคำแนะนำของ Firebase ML ในแอป