เพิ่มคำแนะนำให้กับแอปของคุณด้วย TensorFlow Lite และ Firebase - Android Codelab

1. ภาพรวม

ยินดีต้อนรับสู่คำแนะนำด้วย TensorFlow Lite และ Codelab ของ Firebase ใน Codelab นี้ คุณจะได้เรียนรู้วิธีใช้ TensorFlow Lite และ Firebase เพื่อปรับใช้โมเดลคำแนะนำกับแอปของคุณ Codelab นี้อิงตาม ตัวอย่าง TensorFlow Lite นี้

คำแนะนำช่วยให้แอปใช้การเรียนรู้ของเครื่องเพื่อให้บริการเนื้อหาที่เกี่ยวข้องมากที่สุดสำหรับผู้ใช้แต่ละคนได้อย่างชาญฉลาด โดยคำนึงถึงพฤติกรรมของผู้ใช้ในอดีตเพื่อแนะนำเนื้อหาของแอปที่ผู้ใช้อาจต้องการโต้ตอบด้วยในอนาคตโดยใช้แบบจำลองที่ได้รับการฝึกอบรมเกี่ยวกับพฤติกรรมโดยรวมของผู้ใช้รายอื่นจำนวนมาก

บทแนะนำนี้แสดงวิธีรับข้อมูลจากผู้ใช้แอปของคุณด้วย Firebase Analytics สร้างโมเดลแมชชีนเลิร์นนิงสำหรับคำแนะนำจากข้อมูลนั้น จากนั้นใช้โมเดลนั้นในแอป Android เพื่อเรียกใช้การอนุมานและรับคำแนะนำ คำแนะนำของเราจะแนะนำว่าภาพยนตร์เรื่องใดที่ผู้ใช้น่าจะดูมากที่สุดโดยพิจารณาจากรายชื่อภาพยนตร์ที่ผู้ใช้ชอบก่อนหน้านี้

สิ่งที่คุณจะได้เรียนรู้

  • ผสานรวม Firebase Analytics เข้ากับแอป Android เพื่อรวบรวมข้อมูลพฤติกรรมผู้ใช้
  • ส่งออกข้อมูลนั้นไปยัง Google Big Query
  • ประมวลผลข้อมูลล่วงหน้าและฝึกอบรมโมเดลคำแนะนำ 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 ( android_studio_folder.png ) จากการดาวน์โหลดโค้ดตัวอย่าง ( File > Open > .../codelab-recommendations-android/start)

ตอนนี้คุณควรเปิดโปรเจ็กต์เริ่มต้นใน Android Studio แล้ว

4. สร้างโครงการคอนโซล Firebase

สร้างโครงการใหม่

  1. ไปที่ คอนโซล Firebase
  2. เลือก เพิ่มโครงการ (หรือ สร้างโครงการ หากเป็นโครงการแรก)
  3. เลือกหรือป้อนชื่อโครงการแล้วคลิก ดำเนินการต่อ
  4. ตรวจสอบให้แน่ใจว่าเปิดใช้งาน "เปิดใช้งาน Google Analytics สำหรับโปรเจ็กต์นี้" แล้ว
  5. ทำตามขั้นตอนการตั้งค่าที่เหลือในคอนโซล Firebase จากนั้นคลิกสร้างโปรเจ็กต์ (หรือเพิ่ม Firebase หากคุณใช้โปรเจ็กต์ Google ที่มีอยู่)

5. เพิ่ม Firebase

  1. จากหน้าจอภาพรวมของโปรเจ็กต์ใหม่ของคุณ ให้คลิกไอคอน Android เพื่อเปิดเวิร์กโฟลว์การตั้งค่า
  2. ป้อนชื่อแพ็กเกจของ Codelab: com.google.firebase.codelabs.recommendations
  3. เลือก ลงทะเบียนแอป

เพิ่มไฟล์ 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 ในโปรเจ็กต์แล้ว (ตรวจสอบเพื่อยืนยัน):

แอป/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 ณ จุดนี้ เลือก ไฟล์ > ซิงค์โปรเจ็กต์ด้วยไฟล์ Gradle จากแถบเครื่องมือ Android Studio

6. เรียกใช้แอปเริ่มต้น

เมื่อคุณนำเข้าโปรเจ็กต์ไปยัง Android Studio และกำหนดค่าปลั๊กอิน google-services ด้วยไฟล์ JSON แล้ว คุณก็พร้อมที่จะเรียกใช้แอปเป็นครั้งแรก เชื่อมต่ออุปกรณ์ Android ของคุณแล้วคลิก เรียกใช้ ( ดำเนินการ.png ) ในแถบเครื่องมือ Android Studio

แอปควรเปิดบนอุปกรณ์ของคุณ ณ จุดนี้ คุณจะเห็นแอปพลิเคชันที่ทำงานซึ่งแสดงแท็บพร้อมรายการภาพยนตร์ แท็บภาพยนตร์ที่ชอบ และแท็บคำแนะนำ คุณสามารถคลิกที่ภาพยนตร์ในรายการภาพยนตร์เพื่อเพิ่มลงในรายการที่คุณชอบได้ หลังจากทำตามขั้นตอนที่เหลือของ Codelab เสร็จแล้ว เราจะสามารถสร้างภาพยนตร์แนะนำได้ในแท็บคำแนะนำ

7. เพิ่ม Firebase Analytics ให้กับแอป

ในขั้นตอนนี้ คุณจะเพิ่ม Firebase Analytics ลงในแอปเพื่อบันทึกข้อมูลพฤติกรรมผู้ใช้ (ในกรณีนี้คือภาพยนตร์ที่ผู้ใช้ชอบ) ข้อมูลนี้จะถูกนำมาใช้โดยรวมในขั้นตอนต่อๆ ไปเพื่อฝึกโมเดลคำแนะนำ

เพิ่ม Firebase Bill of Materials และการพึ่งพาการวิเคราะห์

การขึ้นต่อกันต่อไปนี้จำเป็นในการเพิ่ม Firebase Analytics ให้กับแอปของคุณ ควรรวมไว้ในไฟล์ app/build.gradle.kts แล้ว (ตรวจสอบ)

แอป/build.grade.kts

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

ตั้งค่า Firebase Analytics ในแอป

LikedMoviesViewModel มีฟังก์ชันสำหรับจัดเก็บภาพยนตร์ที่ผู้ใช้ชื่นชอบ ทุกครั้งที่ผู้ใช้ชอบภาพยนตร์เรื่องใหม่ เราต้องการส่งเหตุการณ์บันทึกการวิเคราะห์เพื่อบันทึกการถูกใจนั้นด้วย

เพิ่มฟังก์ชัน onMovieLiked ด้วยโค้ดด้านล่างเพื่อบันทึกเหตุการณ์การวิเคราะห์เมื่อผู้ใช้คลิกชอบภาพยนตร์

ชอบMoviesViewModel.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 เมื่อมีการเพิ่มภาพยนตร์ไปยังรายการที่ชอบของผู้ใช้

ชอบMoviesViewModel.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

  1. ใน Android studio ให้เปิดหน้าต่าง Logcat เพื่อตรวจสอบการบันทึกจากแอปของคุณ
  2. ตั้งค่าตัวกรอง Logcat เป็นสตริง "การบันทึกเหตุการณ์"
  3. ตรวจสอบว่ามีการปล่อยเหตุการณ์ Analytics "select_item" ทุกครั้งที่คุณชอบภาพยนตร์ในแอป

ณ จุดนี้ คุณได้ผสานรวม Firebase Analytics เข้ากับแอปของคุณเรียบร้อยแล้ว เมื่อผู้ใช้ใช้แอปของคุณและชอบภาพยนตร์ การถูกใจของพวกเขาจะถูกบันทึกโดยรวม เราจะใช้ข้อมูลที่รวบรวมนี้ในส่วนที่เหลือของ Codelab นี้เพื่อฝึกโมเดลคำแนะนำของเรา ต่อไปนี้เป็นขั้นตอนที่ไม่บังคับในการดูเหตุการณ์ Analytics เดียวกันกับที่คุณเห็นใน Logcat และสตรีมไปยังคอนโซล Firebase ด้วย อย่าลังเลที่จะข้ามไปยังหน้าถัดไป

ไม่บังคับ: ยืนยันเหตุการณ์ Analytics ในคอนโซล Firebase

  1. ไปที่ คอนโซล Firebase
  2. เลือก DebugView ใต้ Analytics
  3. ใน Android Studio ให้เลือก เรียกใช้ เพื่อเปิดแอปและเพิ่มภาพยนตร์บางเรื่องลงในรายการที่คุณชอบ
  4. ใน DebugView ของคอนโซล Firebase ให้ตรวจสอบว่ามีการบันทึกเหตุการณ์เหล่านี้เมื่อคุณเพิ่มภาพยนตร์ในแอป

9. ส่งออกข้อมูล Analytics ไปยัง Big Query

Big Query เป็นผลิตภัณฑ์ Google Cloud ที่ช่วยให้คุณสามารถตรวจสอบและประมวลผลข้อมูลจำนวนมากได้ ในขั้นตอนนี้ คุณจะเชื่อมต่อโปรเจ็กต์คอนโซล Firebase กับ Big Query เพื่อให้ข้อมูล Analytics ที่สร้างโดยแอปของคุณถูกส่งออกไปยัง Big Query โดยอัตโนมัติ

เปิดใช้การส่งออก Big Query

  1. ไปที่ คอนโซล Firebase
  2. เลือกไอคอนรูปเฟืองการตั้งค่าถัดจาก ภาพรวมโครงการ จากนั้นเลือก การตั้งค่าโครงการ
  3. เลือกแท็บ การรวมระบบ
  4. เลือก ลิงก์ (หรือ จัดการ ) ภายในบล็อก BigQuery
  5. เลือก ถัดไป ในขั้นตอน เกี่ยวกับการลิงก์ Firebase กับ BigQuery
  6. ใต้ส่วน กำหนดค่าการผสานรวม คลิกสวิตช์เพื่อเปิดใช้งานการส่งข้อมูล Google Analytics และเลือก ลิงก์ไปยัง BigQuery

ตอนนี้คุณได้เปิดใช้โปรเจ็กต์คอนโซล Firebase เพื่อส่งข้อมูลเหตุการณ์ Firebase Analytics ไปยัง Big Query โดยอัตโนมัติ สิ่งนี้จะเกิดขึ้นโดยอัตโนมัติโดยไม่ต้องมีการโต้ตอบใดๆ เพิ่มเติม อย่างไรก็ตาม การส่งออกครั้งแรกที่สร้างชุดข้อมูลการวิเคราะห์ใน BigQuery อาจไม่เกิดขึ้นเป็นเวลา 24 ชั่วโมง หลังจากสร้างชุดข้อมูลแล้ว Firebase จะส่งออกเหตุการณ์ Analytics ใหม่ไปยัง Big Query ลงในตารางระหว่างวันอย่างต่อเนื่อง และจัดกลุ่มเหตุการณ์จากวันที่ผ่านมาในตารางเหตุการณ์

การฝึกอบรมแบบจำลองคำแนะนำต้องใช้ข้อมูลจำนวนมาก เนื่องจากเรายังไม่มีแอปที่สร้างข้อมูลจำนวนมาก ในขั้นตอนถัดไป เราจะนำเข้าชุดข้อมูลตัวอย่างไปยัง BigQuery เพื่อใช้สำหรับส่วนที่เหลือของบทแนะนำนี้

10. ใช้ BigQuery เพื่อรับข้อมูลการฝึกโมเดล

ตอนนี้เราได้เชื่อมต่อคอนโซล Firebase เพื่อส่งออกไปยัง BigQuery แล้ว ข้อมูลเหตุการณ์การวิเคราะห์แอปของเราจะแสดงในคอนโซล BigQuery โดยอัตโนมัติหลังจากผ่านไประยะหนึ่ง หากต้องการรับข้อมูลเบื้องต้นตามวัตถุประสงค์ของบทแนะนำนี้ ในขั้นตอนนี้ เราจะนำเข้าชุดข้อมูลตัวอย่างที่มีอยู่ลงในคอนโซล BigQuery เพื่อใช้ในการฝึกโมเดลคำแนะนำของเรา

นำเข้าชุดข้อมูลตัวอย่างไปยัง BigQuery

  1. ไปที่แดชบอร์ด BigQuery ในคอนโซลระบบคลาวด์ของ Google
  2. เลือกชื่อโครงการของคุณในเมนู
  3. เลือกชื่อโปรเจ็กต์ที่ด้านล่างของการนำทางด้านซ้ายของ BigQuery เพื่อดูรายละเอียด
  4. เลือก สร้างชุดข้อมูล เพื่อเปิดแผงการสร้างชุดข้อมูล
  5. ป้อน 'firebase_recommendations_dataset' สำหรับ รหัสชุดข้อมูล และเลือก สร้างชุดข้อมูล
  6. ชุดข้อมูลใหม่จะแสดงในเมนูด้านซ้ายใต้ชื่อโปรเจ็กต์ คลิกมัน
  7. เลือก สร้างตาราง เพื่อเปิดแผงการสร้างตาราง
  8. สำหรับ การสร้างตารางจาก การเลือก 'Google Cloud Storage'
  9. ในช่อง เลือกไฟล์จากที่เก็บข้อมูล GCS ให้ป้อน "gs://firebase-recommendations/recommendations-test/formatted_data_filtered.txt"
  10. เลือก 'JSONL' ใน รูปแบบไฟล์ แบบเลื่อนลง
  11. ป้อน 'recommendations_table' สำหรับ ชื่อตาราง
  12. ทำเครื่องหมายที่ช่องใต้ สคีมา > ตรวจจับอัตโนมัติ > สคีมาและพารามิเตอร์อินพุต
  13. เลือก สร้างตาราง

สำรวจชุดข้อมูลตัวอย่าง

ณ จุดนี้ คุณสามารถเลือกสำรวจสคีมาและดูตัวอย่างชุดข้อมูลนี้ได้

  1. เลือกชุด ข้อมูล firebase-recommendations-dataset ในเมนูด้านซ้ายเพื่อขยายตารางที่มีอยู่
  2. เลือกตาราง คำแนะนำ เพื่อดูสคีมาตาราง
  3. เลือก ดูตัวอย่าง เพื่อดูข้อมูลเหตุการณ์ Analytics จริงในตารางนี้มี

สร้างข้อมูลรับรองบัญชีบริการ

ตอนนี้ เราจะสร้างข้อมูลรับรองบัญชีบริการในโครงการคอนโซล Google Cloud ที่เราสามารถใช้ได้ในสภาพแวดล้อม Colab ในขั้นตอนต่อไปนี้เพื่อเข้าถึงและโหลดข้อมูล BigQuery ของเรา

  1. ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Google Cloud ของคุณ
  2. เปิดใช้ BigQuery และ BigQuery Storage API API < คลิกที่นี่ >
  3. ไปที่ หน้าสร้างรหัสบัญชีบริการ
  4. จากรายการ บัญชีบริการ เลือก บัญชีบริการใหม่
  5. ในช่อง ชื่อบัญชีบริการ ให้ป้อนชื่อ
  6. จากรายการ บทบาท ให้เลือก โครงการ > เจ้าของ
  7. คลิก สร้าง ไฟล์ JSON ที่มีการดาวน์โหลดคีย์ของคุณลงในคอมพิวเตอร์

ในขั้นตอนถัดไป เราจะใช้ Google Colab เพื่อประมวลผลข้อมูลนี้ล่วงหน้าและฝึกโมเดลคำแนะนำของเรา

11. ประมวลผลข้อมูลล่วงหน้าและฝึกแบบจำลองคำแนะนำ

ในขั้นตอนนี้ เราจะใช้สมุดบันทึก Colab เพื่อทำตามขั้นตอนต่อไปนี้

  1. นำเข้าข้อมูล BigQuery ลงในสมุดบันทึก Colab
  2. ประมวลผลข้อมูลล่วงหน้าเพื่อเตรียมพร้อมสำหรับการฝึกโมเดล
  3. ฝึกอบรมโมเดลคำแนะนำเกี่ยวกับข้อมูลการวิเคราะห์
  4. ส่งออกโมเดลเป็นโมเดล TF lite
  5. ปรับใช้โมเดลกับคอนโซล Firebase เพื่อให้เราสามารถใช้ในแอปของเราได้

ก่อนที่เราจะเปิดตัวสมุดบันทึกการฝึกอบรม Colab เราจะเปิดใช้ Firebase Model Management API ก่อน เพื่อให้ Colab ปรับใช้โมเดลที่ผ่านการฝึกอบรมกับคอนโซล Firebase ของเราได้

เปิดใช้งาน Firebase Model Management API

สร้างบัคเก็ตเพื่อจัดเก็บโมเดล ML ของคุณ

ในคอนโซล Firebase ของคุณ ไปที่พื้นที่เก็บข้อมูลแล้วคลิกเริ่มต้น fbbea78f0eb3dc9f.png

ทำตามกล่องโต้ตอบเพื่อตั้งค่าที่เก็บข้อมูลของคุณ

19517c0d6d2aa14d.png

เปิดใช้งาน Firebase ML API

ไปที่ หน้า Firebase ML API บน Google Cloud Console แล้วคลิกเปิดใช้งาน

ใช้สมุดบันทึก Colab เพื่อฝึกและทำให้โมเดลใช้งานได้

เปิดสมุดบันทึก colab โดยใช้ลิงก์ต่อไปนี้และทำตามขั้นตอนภายในให้เสร็จสิ้น หลังจากทำตามขั้นตอนในสมุดบันทึก Colab เสร็จแล้ว คุณจะมีไฟล์โมเดล TF lite ที่ใช้งานกับคอนโซล Firebase ซึ่งเราสามารถซิงค์ลงในแอปของเราได้

เปิดใน Colab

12. ดาวน์โหลดโมเดลในแอปของคุณ

ในขั้นตอนนี้ เราจะแก้ไขแอปของเราเพื่อดาวน์โหลดโมเดลที่เราเพิ่งฝึกจาก Firebase Machine Learning

เพิ่มการพึ่งพา Firebase ML

จำเป็นต้องมีการขึ้นต่อกันต่อไปนี้เพื่อใช้โมเดล Firebase Machine Learning ในแอปของคุณ ควรเพิ่มแล้ว (ตรวจสอบ)

แอป/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
        }
    }


ทดสอบแอปของคุณ!

เรียกใช้แอปของคุณอีกครั้ง เมื่อคุณเลือกภาพยนตร์บางเรื่อง ภาพยนตร์ควรดาวน์โหลดโมเดลใหม่โดยอัตโนมัติและเริ่มสร้างคำแนะนำ!

14. ขอแสดงความยินดี!

คุณได้สร้างฟีเจอร์คำแนะนำลงในแอปของคุณโดยใช้ TensorFlow Lite และ Firebase โปรดทราบว่าเทคนิคและไปป์ไลน์ที่แสดงใน Codelab นี้สามารถนำไปใช้ทั่วไปและนำไปใช้เพื่อให้คำแนะนำประเภทอื่นๆ ได้เช่นกัน

สิ่งที่เราได้กล่าวถึง

  • Firebase ML
  • การวิเคราะห์ฐานไฟ
  • ส่งออกเหตุการณ์การวิเคราะห์ไปยัง BigQuery
  • เหตุการณ์การวิเคราะห์ล่วงหน้า
  • คำแนะนำรถไฟรุ่น TensorFlow
  • ส่งออกโมเดลและปรับใช้กับคอนโซล Firebase
  • ให้คำแนะนำภาพยนตร์ในแอป

ขั้นตอนถัดไป

  • ใช้คำแนะนำ Firebase ML ในแอปของคุณ

เรียนรู้เพิ่มเติม

มีคำถาม?

รายงานปัญหา