1. Genel Bakış
TensorFlow Lite ve Firebase ile Öneriler codelab'ine hoş geldiniz. Bu codelab'de, uygulamanıza öneri modeli dağıtmak için TensorFlow Lite ve Firebase'i nasıl kullanacağınızı öğreneceksiniz. Bu codelab, bu TensorFlow Lite örneğine dayanmaktadır.
Öneriler, uygulamaların her kullanıcıya en alakalı içerikleri akıllıca sunmak için makine öğrenimini kullanmasına olanak tanır. Bunlar, çok sayıda başka kullanıcının toplu davranışlarına göre eğitilmiş bir model kullanarak gelecekte kullanıcının etkileşimde bulunmak isteyebileceği uygulama içeriklerini önermek için geçmişteki kullanıcı davranışlarını dikkate alır.
Bu eğitimde, Firebase Analytics ile uygulamanızın kullanıcılarından nasıl veri elde edileceği, bu verilerden öneriler almak için makine öğrenimi modeli oluşturma ve daha sonra bu modeli bir iOS uygulamasında kullanarak çıkarımda bulunup öneriler alma hakkında bilgi verilmektedir. Özellikle, kullanıcının daha önce beğendiği filmlerin listesine bakıldığında, önerilerimiz kullanıcının izleme olasılığının en yüksek olduğu filmlere öneride bulunur.
Neler öğreneceksiniz?
- Kullanıcı davranışı verilerini toplamak için Firebase Analytics'i Android uygulamasına entegre etme
- Bu verileri Google BigQuery'ye aktarın
- Verileri önceden işleyin ve TF Lite öneri modeli eğitin
- TF Lite modelini Firebase ML'ye dağıtıp uygulamanızdan bu modele erişin
- Kullanıcılara öneriler önermek için modeli kullanarak cihaz çıkarımı üzerinde çalıştır
Gerekenler
- Xcode 11 (veya üzeri)
- CocoaPods 1.9.1 veya sonraki sürümler
Bu eğiticiden nasıl yararlanacaksınız?
iOS uygulaması geliştirme deneyiminizi nasıl değerlendirirsiniz?
2. Firebase konsol projesi oluşturun
Firebase'i projeye ekleyin
- Firebase konsoluna gidin.
- Create New Project'i (Yeni Proje Oluştur) seçin ve projenize "Firebase ML iOS Codelab" adını verin.
3. Örnek Projeyi Alma
Kodu İndirin
Örnek projeyi klonlayıp proje dizininde pod update
komutunu çalıştırarak başlayın:
git clone https://github.com/FirebaseExtended/codelab-contentrecommendation-ios.git cd codelab-contentrecommendation-ios/start pod install --repo-update
Git yüklü değilse örnek projeyi GitHub sayfasından veya bu bağlantıyı tıklayarak da indirebilirsiniz. Projeyi indirdikten sonra Xcode'da çalıştırın ve nasıl çalıştığına dair fikir edinmek için öneriler üzerinde denemeler yapın.
Firebase'i ayarlayın
Yeni bir Firebase projesi oluşturmak için belgeleri uygulayın. Projenizi aldıktan sonra, Firebase konsolundan projenizin GoogleService-Info.plist
dosyasını indirin ve Xcode projesinin köküne sürükleyin.
Firebase'i Podfile dosyanıza ekleyin ve kapsül yüklemesini çalıştırın.
pod 'FirebaseAnalytics' pod 'FirebaseMLModelDownloader', '9.3.0-beta' pod 'TensorFlowLiteSwift'
AppDelegate
cihazınızın didFinishLaunchingWithOptions
yönteminde, dosyanın en üstündeki Firebase'i içe aktarın
import FirebaseCore
Ardından, Firebase'i yapılandırmak için bir çağrı ekleyin.
FirebaseApp.configure()
Uygulamanın doğru şekilde yapılandırıldığından ve başlatma sırasında kilitlenmediğinden emin olmak için projeyi tekrar çalıştırın.
- "Bu proje için Google Analytics'i etkinleştir" etkin olduğundan emin olun.
- Firebase konsolunda kalan kurulum adımlarını uygulayın, ardından Proje oluştur'u (veya mevcut bir Google projesini kullanıyorsanız Firebase'i Ekle'yi) tıklayın.
4. Firebase Analytics'i uygulamaya ekleyin
Bu adımda, kullanıcı davranışı verilerini (bu örnekte, kullanıcının sevdiği filmler) günlüğe kaydetmek için uygulamaya Firebase Analytics'i ekleyeceksiniz. Bu veriler, öneri modelini eğitmek için gelecekteki adımlarda toplu olarak kullanılacaktır.
Uygulamada Firebase Analytics'i ayarlayın
LikedMoviesViewModel, kullanıcının beğendiği filmleri depolamak için işlevler içerir. Kullanıcı yeni bir filmi beğendiğinde bunun gibi bir kaydı kaydetmek için bir analiz günlüğü etkinliği de göndermek istiyoruz.
Kullanıcı bir film gibi tıkladığında bir analiz etkinliği kaydetmek için aşağıdaki kodu ekleyin.
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 entegrasyonunuzu test etme
Bu adımda, uygulamada Analytics etkinlikleri oluşturacak ve bu etkinliklerin Firebase konsoluna gönderildiğini doğrulayacağız.
Analytics Hata Ayıklama Günlük Kaydını Etkinleştir
Genel olarak, uygulamanız tarafından günlüğe kaydedilen etkinlikler yaklaşık bir saatlik bir süre içinde gruplanır ve birlikte yüklenir. Bu yaklaşım, son kullanıcıların pilden tasarruf etmesini sağlar. ve ağ veri kullanımını azaltır. Bununla birlikte, analiz uygulamanızı doğrulamak (ve analizlerinizi DebugView raporunda görüntülemek) amacıyla, etkinlikleri minimum gecikmeyle yüklemek için geliştirme cihazınızda Hata Ayıklama modunu etkinleştirebilirsiniz.
Geliştirme cihazınızda Analytics Hata Ayıklama modunu etkinleştirmek için Xcode'da aşağıdaki komut satırı bağımsız değişkenini belirtin:
-FIRDebugEnabled
Bu aşamada, Firebase Analytics'i uygulamanıza başarıyla entegre ettiniz. Kullanıcılar uygulamanızı kullanırken ve filmleri beğenirken beğenmeleri toplu olarak kaydedilir. Bu birleştirilmiş verileri, öneri modelimizi eğitmek için bu codelab'in geri kalanında kullanacağız. Aşağıda, Logcat'te gördüğünüz Analytics etkinliklerinin Firebase konsoluna da akışını görmek için isteğe bağlı bir adım sunulmuştur. Sonraki sayfaya geçmekten çekinmeyin.
İsteğe bağlı: Firebase konsolunda Analytics etkinliklerini onaylama
- Firebase konsoluna gidin.
- Analytics bölümünde DebugView'u seçin
- Xcode'da uygulamayı başlatmak için Çalıştır'ı seçin ve Beğendikleriniz listenize birkaç film ekleyin.
- Firebase konsolunun DebugView'da, uygulamaya film eklenirken bu etkinliklerin günlüğe kaydedildiğini doğrulayın.
6. Analytics verilerini BigQuery'ye aktarma
BigQuery, büyük miktarlarda veriyi inceleyip işlemenize olanak tanıyan bir Google Cloud ürünüdür. Bu adımda, uygulamanızın oluşturduğu Analytics verilerinin otomatik olarak BigQuery'ye aktarılması için Firebase konsolu projenizi BigQuery'ye bağlayacaksınız.
BigQuery dışa aktarımını etkinleştirme
- Firebase konsoluna gidin.
- Projeye Genel Bakış'ın yanındaki Ayarlar dişli simgesini, ardından Proje ayarları'nı seçin
- Integrations (Entegrasyonlar) sekmesini seçin.
- BigQuery bloğunda Bağla'yı (veya Yönet'i) seçin.
- Firebase'i BigQuery'ye Bağlama Hakkında adımında Sonraki'yi seçin.
- Entegrasyonu yapılandır bölümünde, Google Analytics verilerinin gönderilmesini etkinleştirmek için anahtarı tıklayın ve BigQuery'ye bağla'yı seçin.
Firebase konsol projenizi, Firebase Analytics etkinlik verilerinin BigQuery'ye otomatik olarak gönderilmesini sağlayacak şekilde etkinleştirdiniz. Bu işlem başka etkileşim olmadan otomatik olarak gerçekleştirilir. Ancak BigQuery'de analiz veri kümesini oluşturan ilk dışa aktarma işlemi 24 saat boyunca gerçekleşmeyebilir. Veri kümesi oluşturulduktan sonra Firebase, yeni Analytics etkinliklerini sürekli olarak BigQuery'ye aktarır ve gün içi tabloya aktarır ve geçmiş günlere ait etkinlikleri etkinlikler tablosunda gruplandırır.
Öneri modellerini eğitmek çok fazla veri gerektirir. Halihazırda büyük miktarda veri oluşturan bir uygulamamız olmadığından, bir sonraki adımda bu eğiticinin geri kalanında kullanmak üzere örnek bir veri kümesini BigQuery'ye aktaracağız.
7. Model eğitimi verilerini almak için BigQuery'yi kullanma
Artık BigQuery'ye dışa aktarmak için Firebase konsolumuzu bağladığımıza göre, uygulama analizi etkinlik verilerimiz bir süre sonra otomatik olarak BigQuery konsolunda görünecektir. Bu eğiticinin amaçları doğrultusunda başlangıç verilerini almak için bu adımda öneri modelimizi eğitmek üzere kullanmak üzere mevcut bir örnek veri kümesini BigQuery konsolunuza aktaracağız.
Örnek veri kümesini BigQuery'ye aktarma
- Google Cloud konsolunda BigQuery kontrol paneline gidin.
- Menüden projenizin adını seçin.
- Ayrıntıları görmek için BigQuery'nin sol gezinme menüsünün en altında projenizin adını seçin.
- Veri kümesi oluşturma panelini açmak için Veri kümesi oluştur'u seçin.
- "firebase_recommendations_dataset" girin Veri Kümesi Kimliği'ni girin ve Veri kümesi oluştur'u seçin.
- Yeni veri kümesi, proje adının altında soldaki menüde gösterilir. Bu simgeyi tıklayın.
- Tablo oluşturma panelini açmak için Tablo oluştur'u seçin.
- Şu kaynaktan tablo oluştur için "Google Cloud Storage"ı seçin.
- GCS paketinden dosya seçin alanına "gs://firebase-recommendations/recommendations-test/formatted_data_filtered.txt" yazın.
- "JSONL"yi seçin Dosya biçimi açılır menüsünde bulabilirsiniz.
- "recommendations_table" yazın Tablo adı'nı seçin.
- Schema > (Şema >) altındaki kutuyu işaretleyin. Otomatik algıla > Şema ve giriş parametreleri
- Tablo oluştur'u seçin
Örnek veri kümesini keşfedin
Bu noktada isteğe bağlı olarak şemayı inceleyebilir ve bu veri kümesini önizleyebilirsiniz.
- İçerdiği tabloları genişletmek için sol menüden firebase-recommendations-dataset'i seçin.
- Tablo şemasını görüntülemek için recommendations-table tablosunu seçin.
- Bu tablonun içerdiği gerçek Analytics etkinlik verilerini görmek için Önizleme'yi seçin.
Hizmet hesabı kimlik bilgileri oluşturma
Şimdi, Google Cloud Console projemizde hizmet hesabı kimlik bilgilerini oluşturacağız. Bu bilgileri, bir sonraki adımda BigQuery verilerimize erişip yüklemek için Colab ortamında kullanabileceğimiz şekilde kullanacağız.
- Google Cloud projeniz için faturalandırmanın etkinleştirildiğinden emin olun.
- BigQuery ve BigQuery Storage API API'lerini etkinleştirin. < burayı tıklayın>
- Hizmet Hesabı Anahtarı Oluşturma sayfasına gidin.
- Service account (Hizmet hesabı) listesinden New service account'u (Yeni hizmet hesabı) seçin.
- Hizmet hesabı adı alanına bir ad girin.
- Role (Rol) listesinden Proje'yi seçin > Sahip.
- Oluştur'u tıklayın. Anahtarlarınızı içeren bir JSON dosyası, bilgisayarınıza indirilir.
Bir sonraki adımda, bu verileri önceden işlemek ve öneri modelimizi eğitmek için Google Colab'i kullanacağız.
8. Verileri ön işleme ve öneri modelini eğitme
Bu adımda aşağıdaki adımları gerçekleştirmek için bir Colab not defteri kullanacağız:
- BigQuery verilerini Colab not defterine aktarma
- model eğitimine hazırlamak için verileri ön işleme
- Öneri modelini analiz verileri üzerinde eğitmek
- modeli TF lite modeli olarak dışa aktar
- modeli Firebase Konsolu'na dağıtarak uygulamamızda kullanabiliriz.
Colab eğitim not defterini kullanıma sunmadan önce ilk olarak Firebase Model Management API'yi etkinleştireceğiz. Böylece Colab, eğitilen modeli Firebase konsoluna dağıtabilecek.
Firebase Model Management API'yi etkinleştir
ML modellerinizi depolamak için paket oluşturma
Firebase Konsolunuzda Storage'a gidip Başlayın'ı tıklayın. .
Paketinizi hazırlamak için diyaloğu takip edin.
Firebase ML API'yi etkinleştirme
Google Cloud Console'da Firebase ML API sayfasına gidip Etkinleştir'i tıklayın.
Modeli eğitmek ve dağıtmak için Colab not defterini kullanın
Aşağıdaki bağlantıyı kullanarak colab not defterini açın ve içindeki adımları tamamlayın. Colab not defterindeki adımları tamamladıktan sonra Firebase konsoluna dağıtılan bir TF lite model dosyanız olur. Bu dosyayı uygulamamıza senkronize edebiliriz.
Colab'de aç
9. Modeli uygulamanıza indirin
Bu adımda, uygulamamızı Firebase Makine Öğrenimi'nden eğittiğimiz modeli indirecek şekilde değiştireceğiz.
Firebase ML bağımlılığı ekleyin
Uygulamanızda Firebase Makine Öğrenimi modellerini kullanmak için aşağıdaki bağımlılık gerekir. Daha önce eklenmiş olması gerekir (doğrulayın).
Pod dosyası
import FirebaseCore
import FirebaseMLModelDownloader
Modeli Firebase Model Manager API ile indirme
Model indirme işleminin gerçekleşeceği koşulları ayarlamak için aşağıdaki kodu ModelLoader.swift klasörüne kopyalayın ve uzak modeli uygulamamızla senkronize etmek için bir indirme görevi oluşturun.
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 öneri modelini uygulamanıza entegre edin
Tensorflow Lite çalışma zamanı, öneriler oluşturmak için uygulamada modelinizi kullanmanıza olanak tanır. Önceki adımda, indirdiğimiz model dosyasıyla bir TFlite çevirmeni başlattık. Bu adımda, ilk olarak çıkarım adımında modelimize eşlik edecek bir sözlük ve etiketler yükleyeceğiz. Ardından, modelimize girdi oluşturmak için ön işlemeyi ve çıkarımımızdan sonuçları çıkaracağımız işleme sonrası süreci ekleyeceğiz.
Sözlük ve Etiketleri Yükleme
Öneri modeline göre öneri adaylarını oluşturmak için kullanılan etiketler, items klasöründeki sorted_movie_vocab.json dosyasında listelenir. Bu önerileri yüklemek için aşağıdaki kodu kopyalayın.
RecommendationsViewController.swift
func getMovies() -> [MovieItem] {
let barController = self.tabBarController as! TabBarController
return barController.movies
}
Ön işlemeyi uygulama
Ön işleme adımında, giriş verilerinin biçimini modelimizin beklediğiyle eşleşecek şekilde değiştiririz. Burada henüz çok sayıda kullanıcı beğenmesi oluşturmadıysak giriş uzunluğunu bir yer tutucu değerle doldururuz. Aşağıdaki kodu kopyalayın:
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
}
Öneri oluşturmak için çevirmen çalıştırma
Burada, önceden işlenmiş girdimiz üzerinde çıkarım yapmak için önceki adımda indirdiğimiz modeli kullanırız. Modelimizin giriş ve çıkış türünü belirleriz ve film önerilerimizi oluşturmak için çıkarım yaparız. Aşağıdaki kodu uygulamanıza kopyalayın.
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)")
}
}
İşleme sonrası yaklaşımı uygulama
Son olarak, bu adımda modelimizden elde edilen çıkışı işleyerek en yüksek güven düzeyine sahip sonuçları seçer ve içerdiği değerleri (kullanıcının zaten beğendiği filmler) kaldırırız. Aşağıdaki kodu uygulamanıza kopyalayın.
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]))
}
}
Uygulamanızı test edin
Uygulamanızı yeniden çalıştırın. Birkaç film seçtiğinizde yeni model otomatik olarak indirilir ve öneriler oluşturmaya başlar.
11. Tebrikler!
TensorFlow Lite ve Firebase'i kullanarak uygulamanıza bir öneriler özelliği eklediniz. Bu codelab'de gösterilen tekniklerin ve ardışık düzenin genelleştirilebileceğini ve diğer öneri türlerini sunmak için kullanılabileceğini unutmayın.
İşlediğimiz konular
- Firebase ML
- Firebase Analytics
- Analiz etkinliklerini BigQuery'ye aktarın
- Ön işlem analiz etkinlikleri
- Önerileri TensorFlow modeli eğitme
- Modeli dışa aktarın ve Firebase konsoluna dağıtın
- Uygulamada film önerileri sunun
Sonraki adımlar
- Uygulamanızda Firebase makine öğrenimi önerilerini uygulayın.
Daha Fazla Bilgi
Sorunuz mu var?
Sorun Bildirin