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

1. ภาพรวม

ยินดีต้อนรับสู่คำแนะนำด้วย TensorFlow Lite และ Codelab ของ Firebase ใน 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

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 ในแอป

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

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

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

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

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

-FIRDebugEnabled

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

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

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

6. ส่งออกข้อมูล 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 เพื่อใช้สำหรับส่วนที่เหลือของบทแนะนำนี้

7. ใช้ 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 เพื่อประมวลผลข้อมูลนี้ล่วงหน้าและฝึกโมเดลคำแนะนำของเรา

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 เพื่อฝึกและทำให้โมเดลใช้งานได้

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

เปิดใน Colab

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

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

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

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

พอดไฟล์

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 ในโฟลเดอร์ Asset คัดลอกรหัสต่อไปนี้เพื่อโหลดผู้สมัครเหล่านี้

RecommendationViewController.swift

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

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

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

RecommendationViewController.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
  }

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

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

RecommendationViewController.swift

import TensorFlowLite

RecommendationViewController.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)")
    }
  }

ดำเนินการหลังการประมวลผล

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

RecommendationViewController.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
  • การวิเคราะห์ฐานไฟ
  • ส่งออกเหตุการณ์การวิเคราะห์ไปยัง BigQuery
  • เหตุการณ์การวิเคราะห์ล่วงหน้า
  • คำแนะนำรถไฟรุ่น TensorFlow
  • ส่งออกโมเดลและปรับใช้กับคอนโซล Firebase
  • ให้คำแนะนำภาพยนตร์ในแอป

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

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

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

มีคำถาม?

รายงานปัญหา