เพิ่มคำแนะนำให้กับแอปของคุณด้วย 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 เวอร์ชัน 3.4+
  • โค้ดตัวอย่าง.
  • อุปกรณ์ทดสอบที่ใช้ Android 2.3+ และบริการ Google Play 9.8 หรือใหม่กว่า หรือ Emulator ที่มีบริการ 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 ในแอปของคุณ

หลังจากเพิ่มชื่อแพ็กเกจและเลือก Register แล้ว ให้คลิก ดาวน์โหลด google-services.json เพื่อรับไฟล์กำหนดค่า Firebase Android จากนั้นคัดลอกไฟล์ google-services.json ลงในไดเรกทอรี app ในโปรเจ็กต์ของคุณ หลังจากดาวน์โหลดไฟล์แล้ว คุณสามารถ ข้าม ขั้นตอนถัดไปที่แสดงในคอนโซลได้ (ซึ่งได้ทำไปแล้วสำหรับคุณในโปรเจ็กต์ build-android-start)

เพิ่มปลั๊กอินบริการของ Google ในแอปของคุณ

ปลั๊กอิน google-services ใช้ไฟล์ google-services.json เพื่อกำหนดค่าแอปพลิเคชันของคุณให้ใช้ Firebase ควรเพิ่มบรรทัดต่อไปนี้ในไฟล์ build.gradle ในโครงการแล้ว (ตรวจสอบเพื่อยืนยัน):

app/build.grade

apply plugin: 'com.google.gms.google-services'

build.grade

classpath 'com.google.gms:google-services:4.3.4'

ซิงค์โปรเจ็กต์ของคุณกับไฟล์ gradle

เพื่อให้แน่ใจว่าการพึ่งพาทั้งหมดพร้อมใช้งานสำหรับแอปของคุณ คุณควรซิงค์โปรเจ็กต์ของคุณกับไฟล์ gradle ณ จุดนี้ เลือก ไฟล์ > ซิงค์โปรเจ็กต์ด้วย Gradle Files จากแถบเครื่องมือ Android Studio

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

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

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

7. เพิ่ม Firebase Analytics ลงในแอป

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

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

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

app/build.grade

implementation 'com.google.firebase:firebase-analytics-ktx:17.6.0'

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

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

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

ชอบหนังViewModel.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 เมื่อมีการเพิ่มภาพยนตร์ลงในรายการถูกใจของผู้ใช้

ชอบหนังViewModel.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 ให้เปิดหน้าต่าง Logcat เพื่อตรวจสอบการบันทึกจากแอปของคุณ
  2. ตั้งค่าตัวกรอง Logcat เป็นสตริง "การบันทึกเหตุการณ์"
  3. ตรวจสอบว่ามีการแสดงเหตุการณ์ "select_item" ของ Analytics ทุกครั้งที่คุณชอบภาพยนตร์ในแอป

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

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

  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' สำหรับ Dataset ID และเลือก Create dataset
  6. ชุดข้อมูลใหม่จะแสดงขึ้นในเมนูด้านซ้ายใต้ชื่อโครงการ คลิกเลย
  7. เลือก สร้างตาราง เพื่อเปิดแผงการสร้างตาราง
  8. สำหรับ สร้างตารางจาก เลือก 'Google Cloud Storage'
  9. ในช่อง Select file from GCS bucket ให้ป้อน 'gs://firebase-recommendations/recommendations-test/formatted_data_filtered.txt'
  10. เลือก 'JSONL' ในรายการดรอปดาวน์ รูปแบบไฟล์
  11. ป้อน 'recommendations_table' สำหรับ ชื่อตาราง
  12. ทำเครื่องหมายที่ช่องภายใต้ Schema > Auto detect > Schema and Input Parameter
  13. เลือก สร้างตาราง

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

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

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

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

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

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

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

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

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

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

ก่อนที่เราจะเปิดตัวสมุดบันทึกการฝึกอบรม 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 ในแอปของคุณ ควรเพิ่มแล้ว (ยืนยัน)

app/build.grade

implementation 'com.google.firebase:firebase-ml-model-interpreter:22.0.4'

ดาวน์โหลดโมเดลด้วย Firebase Model Manager API

คัดลอกโค้ดด้านล่างลงใน RecommendationClient.kt เพื่อตั้งค่าเงื่อนไขภายใต้การดาวน์โหลดโมเดล และสร้างงานดาวน์โหลดเพื่อซิงค์โมเดลระยะไกลกับแอปของเรา

RecommendationClient.kt

    private fun downloadModel(modelName: String) {
        val remoteModel = FirebaseCustomRemoteModel.Builder(modelName).build()
        val firebaseModelManager = FirebaseModelManager.getInstance()
        firebaseModelManager
            .isModelDownloaded(remoteModel)
            .continueWithTask { task ->
                // Create update condition if model is already downloaded, otherwise create download
                // condition.
                val conditions = if (task.result != null && task.result == true) {
                    FirebaseModelDownloadConditions.Builder()
                        .requireWifi()
                        .build() // Update condition that requires wifi.
                } else {
                    FirebaseModelDownloadConditions.Builder().build(); // Download condition.
                }
                firebaseModelManager.download(remoteModel, conditions)
            }
            .addOnSuccessListener {
                firebaseModelManager.getLatestModelFile(remoteModel)
                    .addOnCompleteListener {
                        val model = it.result
                        if (model == null) {
                            showToast(context, "Failed to get model file.")
                        } else {
                            showToast(context, "Downloaded remote model")
                            GlobalScope.launch { initializeInterpreter(model) }
                        }
                    }
            }
            .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
  • Firebase Analytics
  • ส่งออกกิจกรรมการวิเคราะห์ไปยัง BigQuery
  • เหตุการณ์การวิเคราะห์ก่อนประมวลผล
  • คำแนะนำในการฝึกโมเดล TensorFlow
  • ส่งออกโมเดลและปรับใช้กับ Firebase Console
  • ให้บริการแนะนำภาพยนตร์ในแอพ

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

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

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

มีคำถาม?

รายงานปัญหา