เพิ่มคำแนะนำในแอปด้วย TensorFlow Lite และ Firebase - iOS Codelab

1. ภาพรวม

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

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

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

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

  • ผสานรวม Firebase Analytics ในแอป Android เพื่อรวบรวมข้อมูลพฤติกรรมของผู้ใช้
  • ส่งออกข้อมูลนั้นไปยัง Google Big Query
  • ประมวลผลข้อมูลล่วงหน้าและฝึกโมเดลคำแนะนำของ TF Lite
  • ทำให้โมเดล TF Lite ใช้งานได้ใน Firebase ML และเข้าถึงได้จากแอปของคุณ
  • เรียกใช้จากการอนุมานอุปกรณ์โดยใช้โมเดลเพื่อแนะนำคำแนะนำให้แก่ผู้ใช้

สิ่งที่ต้องมี

  • Xcode 11 (หรือสูงกว่า)
  • CocoaPods 1.9.1 (หรือสูงกว่า)

คุณจะใช้บทแนะนำนี้อย่างไร

อ่านเท่านั้น อ่านและทำแบบฝึกหัด

คุณจะให้คะแนนประสบการณ์ในการสร้างแอป iOS อย่างไร

มือใหม่ ระดับกลาง ผู้ชำนาญ

2. สร้างโปรเจ็กต์คอนโซล Firebase

เพิ่ม Firebase ไปยังโปรเจ็กต์

  1. ไปที่คอนโซล Firebase
  2. เลือกสร้างโปรเจ็กต์ใหม่ และตั้งชื่อโปรเจ็กต์เป็น "Firebase ML iOS Codelab"

3. รับโปรเจ็กต์ตัวอย่าง

ดาวน์โหลดโค้ด

เริ่มต้นโดยการโคลนโปรเจ็กต์ตัวอย่างแล้วเรียกใช้ pod update ในไดเรกทอรีโปรเจ็กต์ ดังนี้

git clone https://github.com/FirebaseExtended/codelab-contentrecommendation-ios.git
cd codelab-contentrecommendation-ios/start
pod install --repo-update

หากยังไม่ได้ติดตั้ง Git คุณจะดาวน์โหลดโปรเจ็กต์ตัวอย่างจากหน้า GitHub ได้ หรือคลิกลิงก์นี้ เมื่อคุณดาวน์โหลดโปรเจ็กต์แล้ว ให้เรียกใช้ใน Xcode และลองทำตามคําแนะนําเพื่อดูวิธีการทำงาน

ตั้งค่า Firebase

ทำตามเอกสารประกอบเพื่อสร้างโปรเจ็กต์ Firebase ใหม่ เมื่อมีโปรเจ็กต์แล้ว ให้ดาวน์โหลดไฟล์ GoogleService-Info.plist ของโปรเจ็กต์จากคอนโซล Firebase และลากโปรเจ็กต์ไปที่รูทของโปรเจ็กต์ Xcode

4a923d5c7ae0d8f3.png

เพิ่ม Firebase ไปยัง Podfile และเรียกใช้การติดตั้งพ็อด

pod 'FirebaseAnalytics'
pod 'FirebaseMLModelDownloader', '9.3.0-beta'
pod 'TensorFlowLiteSwift'

ในเมธอด didFinishLaunchingWithOptions ของ AppDelegate ให้นำเข้า Firebase ที่ด้านบนของไฟล์

import FirebaseCore

และเพิ่มการเรียกใช้เพื่อกำหนดค่า Firebase

FirebaseApp.configure()

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

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

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

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

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

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

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

AllMoviesCollectionViewController.swift

import FirebaseAnalytics
//


override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
//

if movie.liked == nil {
      movie.liked = true
      Analytics.logEvent(AnalyticsEventSelectItem, parameters: [AnalyticsParameterItemID: movie.id])
    } else {
      movie.liked?.toggle()
    }
       
}

5. ทดสอบการผสานรวม Analytics ของคุณ

ในขั้นตอนนี้ เราจะสร้างเหตุการณ์ Analytics ในแอปและยืนยันว่าระบบกำลังส่งเหตุการณ์เหล่านั้นไปยังคอนโซล Firebase

เปิดใช้การบันทึกการแก้ไขข้อบกพร่องของ Analytics

โดยทั่วไปแล้ว เหตุการณ์ที่แอปของคุณบันทึกไว้จะถูกจัดกลุ่มรวมกันในช่วงเวลาประมาณ 1 ชั่วโมง แล้วอัปโหลดรวมกัน วิธีนี้จะช่วยประหยัดแบตเตอรี่ของผู้ใช้ปลายทาง อุปกรณ์ต่างๆ และลดปริมาณการใช้อินเทอร์เน็ตของเครือข่าย อย่างไรก็ตาม คุณสามารถเปิดใช้โหมดแก้ไขข้อบกพร่องในอุปกรณ์การพัฒนาเพื่ออัปโหลดเหตุการณ์ที่มีความล่าช้าน้อยที่สุดเพื่อจุดประสงค์ในการตรวจสอบความถูกต้องของการติดตั้งข้อมูลวิเคราะห์ (เพื่อดูการวิเคราะห์ในรายงานในรายงาน DebugView)

ในการเปิดใช้โหมดแก้ไขข้อบกพร่องของ Analytics ในอุปกรณ์การพัฒนา ให้ระบุอาร์กิวเมนต์บรรทัดคำสั่งต่อไปนี้ใน Xcode

-FIRDebugEnabled

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

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

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

6. ส่งออกข้อมูล Analytics ไปยัง BigQuery

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

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

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

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

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

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

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

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

  1. ไปที่แดชบอร์ด BigQuery ในคอนโซล Google Cloud
  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. เลือกตาราง recommendations-table เพื่อดูสคีมาของตาราง
  3. เลือกแสดงตัวอย่างเพื่อดูข้อมูลเหตุการณ์ Analytics จริงในตารางนี้

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

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

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

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

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

ในขั้นตอนนี้ เราจะใช้สมุดบันทึก 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 Notebook เพื่อฝึกและทำให้โมเดลใช้งานได้

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

เปิดใน Colab

9. ดาวน์โหลดโมเดลในแอป

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

เพิ่มทรัพยากร Dependency ของ Firebase ML

จำเป็นต้องมีทรัพยากร Dependency ต่อไปนี้เพื่อใช้โมเดลแมชชีนเลิร์นนิงของ Firebase ในแอป ข้อมูลนี้ควรได้รับการเพิ่มแล้ว (ยืนยัน)

Podfile

import FirebaseCore
import FirebaseMLModelDownloader

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

คัดลอกโค้ดด้านล่างไปยัง ModelLoader.swift เพื่อตั้งค่าเงื่อนไขสำหรับการดาวน์โหลดโมเดลที่เกิดขึ้น แล้วสร้างงานการดาวน์โหลดเพื่อซิงค์โมเดลระยะไกลกับแอปของเรา

ModelLoader.swift

static func downloadModel(named name: String,
                            completion: @escaping (CustomModel?, DownloadError?) -> Void) {
    guard FirebaseApp.app() != nil else {
      completion(nil, .firebaseNotInitialized)
      return
    }
    guard success == nil && failure == nil else {
      completion(nil, .downloadInProgress)
      return
    }
    let conditions = ModelDownloadConditions(allowsCellularAccess: false)
    ModelDownloader.modelDownloader().getModel(name: name, downloadType: .localModelUpdateInBackground, conditions: conditions) { result in
            switch (result) {
            case .success(let customModel):
                    // Download complete.
                    // The CustomModel object contains the local path of the model file,
                    // which you can use to instantiate a TensorFlow Lite classifier.
                    return completion(customModel, nil)
            case .failure(let error):
                // Download was unsuccessful. Notify error message.
              completion(nil, .downloadFailed(underlyingError: error))
            }
    }
  }

10. ผสานรวมโมเดลคำแนะนำของ Tensorflow Lite ในแอป

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

โหลดพจนานุกรมและป้ายกำกับ

ป้ายกำกับที่ใช้สร้างตัวเลือกการแนะนำตามโมเดลคำแนะนำจะแสดงอยู่ในไฟล์ sorted_movie_vocab.json ในโฟลเดอร์เนื้อหา คัดลอกโค้ดต่อไปนี้เพื่อโหลดตัวเลือก

RecommendationsViewController.swift

  func getMovies() -> [MovieItem] {
    let barController = self.tabBarController as! TabBarController
    return barController.movies
  }

ใช้การประมวลผลล่วงหน้า

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

RecommendationsViewController.swift

  // Given a list of selected items, preprocess to get tflite input.
  func preProcess() -> Data {
    let likedMovies = getLikedMovies().map { (MovieItem) -> Int32 in
      return MovieItem.id
    }
    var inputData = Data(copyingBufferOf: Array(likedMovies.prefix(10)))

    // Pad input data to have a minimum of 10 context items (4 bytes each)
    while inputData.count < 10*4 {
      inputData.append(0)
    }
    return inputData
  }

เรียกใช้ล่ามเพื่อสร้างคำแนะนำ

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

RecommendationsViewController.swift

import TensorFlowLite

RecommendationsViewController.swift

 private var interpreter: Interpreter?

 func loadModel() {
    // Download the model from Firebase
    print("Fetching recommendations model...")
    ModelDownloader.fetchModel(named: "recommendations") { (filePath, error) in
      guard let path = filePath else {
        if let error = error {
          print(error)
        }
        return
      }
      print("Recommendations model download complete")
      self.loadInterpreter(path: path)
    }
  }

 func loadInterpreter(path: String) {
    do {
      interpreter = try Interpreter(modelPath: path)

      // Allocate memory for the model's input `Tensor`s.
      try interpreter?.allocateTensors()

      let inputData = preProcess()

      // Copy the input data to the input `Tensor`.
      try self.interpreter?.copy(inputData, toInputAt: 0)

      // Run inference by invoking the `Interpreter`.
      try self.interpreter?.invoke()

      // Get the output `Tensor`
      let confidenceOutputTensor = try self.interpreter?.output(at: 0)
      let idOutputTensor = try self.interpreter?.output(at: 1)

      // Copy output to `Data` to process the inference results.
      let confidenceOutputSize = confidenceOutputTensor?.shape.dimensions.reduce(1, {x, y in x * y})

      let idOutputSize = idOutputTensor?.shape.dimensions.reduce(1, {x, y in x * y})

      let confidenceResults =
        UnsafeMutableBufferPointer<Float32>.allocate(capacity: confidenceOutputSize!)
      let idResults =
        UnsafeMutableBufferPointer<Int32>.allocate(capacity: idOutputSize!)
      _ = confidenceOutputTensor?.data.copyBytes(to: confidenceResults)
      _ = idOutputTensor?.data.copyBytes(to: idResults)

      postProcess(idResults, confidenceResults)

      print("Successfully ran inference")
      DispatchQueue.main.async {
        self.tableView.reloadData()
      }
    } catch {
      print("Error occurred creating model interpreter: \(error)")
    }
  }

ใช้กระบวนการหลังการประมวลผล

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

RecommendationsViewController.swift

  // Postprocess to get results from tflite inference.
  func postProcess(_ idResults: UnsafeMutableBufferPointer<Int32>, _ confidenceResults: UnsafeMutableBufferPointer<Float32>) {
    for i in 0..<10 {
      let id = idResults[i]
      let movieIdx = getMovies().firstIndex { $0.id == id }
      let title = getMovies()[movieIdx!].title
      recommendations.append(Recommendation(title: title, confidence: confidenceResults[i]))
    }
  }

ทดสอบแอป

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

11. ยินดีด้วย

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

สรุปประเด็นที่ได้พูดถึง

  • Firebase ML
  • Firebase Analytics
  • ส่งออกเหตุการณ์การวิเคราะห์ไปยัง BigQuery
  • ประมวลผลเหตุการณ์ Analytics ล่วงหน้า
  • ฝึกโมเดล TensorFlow ที่แนะนำ
  • ส่งออกโมเดลและทำให้ใช้งานได้ในคอนโซล Firebase
  • แสดงคำแนะนำภาพยนตร์ในแอป

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

  • ใช้คำแนะนำ Firebase ML ในแอป

ดูข้อมูลเพิ่มเติม

หากมีคำถาม

รายงานปัญหา