1. Genel Bakış
TensorFlow Lite ve Firebase ile Öneriler adlı codelab'e hoş geldiniz. Bu codelab'de, uygulamanıza bir öneri modeli dağıtmak için TensorFlow Lite ve Firebase'i nasıl kullanacağınızı öğreneceksiniz. Bu codelab, TensorFlow Lite örneğini temel alır.
Öneriler, uygulamaların her kullanıcı için en alakalı içeriği akıllıca sunmak üzere makine öğreniminden yararlanmasına olanak tanır. Çok sayıda kullanıcının toplu davranışları üzerinde eğitilmiş bir model kullanarak, kullanıcının gelecekte etkileşimde bulunmak isteyebileceği uygulama içeriklerini önermek için geçmiş kullanıcı davranışlarını dikkate alırlar.
Bu eğitimde, Firebase Analytics ile uygulamanızın kullanıcılarından nasıl veri elde edeceğiniz, bu verilerden öneriler için nasıl makine öğrenimi modeli oluşturacağınız ve ardından çıkarım çalıştırmak ve öneri almak için bu modeli iOS uygulamasında nasıl kullanacağınız gösterilmektedir. Özellikle, önerilerimiz kullanıcının daha önce beğendiği filmler listesine göre hangi filmleri izleme olasılığının en yüksek olduğunu gösterir.
Neler öğreneceksiniz?
- Kullanıcı davranışı verilerini toplamak için Firebase Analytics'i bir Android uygulamasına entegre etme
- Bu verileri Google BigQuery'ye aktarın.
- Verileri önceden işleme ve TF Lite öneri modeli eğitme
- TF Lite modelini Firebase ML'ye dağıtma ve uygulamanızdan erişme
- Kullanıcılara öneriler sunmak için modeli kullanarak cihaz üzerinde çıkarım çalıştırma
Gerekenler
- Xcode 11 veya sonraki sürümler
- CocoaPods 1.9.1 veya sonraki sürümler
Bu eğitimi nasıl kullanacaksınız?
iOS uygulamaları oluşturma deneyiminizi nasıl değerlendirirsiniz?
2. Firebase konsolu projesi oluşturma
Firebase'i projeye ekleme
- Firebase konsoluna gidin.
- Yeni Proje Oluştur'u seçin ve projenize "Firebase ML iOS Codelab" adını verin.
3. Örnek Projeyi Alma
Kodu indirme
Ö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ığını anlamak için öneriyi inceleyin.
Firebase'i ayarlama
Yeni bir Firebase projesi oluşturmak için dokümanları inceleyin. Projenizi oluşturduktan sonra GoogleService-Info.plist
dosyasını Firebase konsolundan indirip Xcode projesinin kök dizinine sürükleyin.
Firebase'i Podfile dosyanıza ekleyin ve pod install komutunu çalıştırın.
pod 'FirebaseAnalytics' pod 'FirebaseMLModelDownloader', '9.3.0-beta' pod 'TensorFlowLiteSwift'
AppDelegate
'nizin didFinishLaunchingWithOptions
yönteminde, dosyanın en üstüne Firebase'i içe aktarın.
import FirebaseCore
Ayrıca, 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şlatıldığında kilitlenmediğinden emin olmak için projeyi tekrar çalıştırın.
- "Bu proje için Google Analytics'i etkinleştir" seçeneğinin etkinleştirildiğinden emin olun.
- Firebase konsolunda kalan kurulum adımlarını uygulayın, ardından Proje oluştur'u (veya mevcut bir Google projesi kullanıyorsanız Firebase ekle'yi) tıklayın.
4. Uygulamaya Firebase Analytics'i ekleme
Bu adımda, kullanıcı davranış verilerini (bu örnekte, kullanıcının beğendiği filmler) kaydetmek için uygulamaya Firebase Analytics'i ekleyeceksiniz. Bu veriler, öneri modelini eğitmek için gelecekteki adımlarda toplu olarak kullanılır.
Uygulamada Firebase Analytics'i ayarlama
LikedMoviesViewModel, kullanıcının beğendiği filmleri depolamaya yönelik işlevler içerir. Kullanıcı her yeni filmi beğendiğinde, bu beğeniyi kaydetmek için bir Analytics günlük etkinliği de göndermek istiyoruz.
Kullanıcı bir filmi beğendiğinde bir Analytics 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 bunların Firebase konsoluna gönderildiğini doğrulayacağız.
Analytics hata ayıklama günlük kaydını etkinleştirme
Genellikle, uygulamanız tarafından kaydedilen etkinlikler yaklaşık bir saatlik süre boyunca gruplandırılır ve birlikte yüklenir. Bu yaklaşım, son kullanıcıların cihazlarındaki pili korur ve ağ verisi kullanımını azaltır. Ancak, Analytics uygulamanızı doğrulamak (ve Analytics'i DebugView raporunda görüntülemek) için geliştirme cihazınızda hata ayıklama modunu etkinleştirerek etkinlikleri minimum gecikmeyle yükleyebilirsiniz.
Geliştirme cihazınızda Analytics hata ayıklama modunu etkinleştirmek için Xcode'da şu komut satırı bağımsız değişkenini belirtin:
-FIRDebugEnabled
Bu noktada, Firebase Analytics'i uygulamanıza başarıyla entegre ettiniz. Kullanıcılar uygulamanızı kullandıkça ve filmleri beğendikçe beğenileri toplu olarak kaydedilir. Öneri modelimizi eğitmek için bu toplu verileri bu codelab'in geri kalanında kullanacağız. Aşağıdaki adım, Logcat'te gördüğünüz Analytics etkinliklerinin Firebase konsoluna da aktarıldığını görmek için isteğe bağlı olarak uygulanabilir. İsterseniz sonraki sayfaya geçebilirsiniz.
İsteğe bağlı: Firebase konsolunda Analytics etkinliklerini onaylayın
- Firebase konsoluna gidin.
- Analytics bölümünde DebugView'u seçin.
- Xcode'da Run'ı (Çalıştır) seçerek uygulamayı başlatın ve Beğenilenler listenize bazı filmler ekleyin.
- Firebase konsolunun DebugView bölümünde, uygulamaya film eklerken bu etkinliklerin kaydedildiğini doğrulayın.
6. Analytics verilerini BigQuery'ye aktarma
BigQuery, büyük miktarda veriyi incelemenize ve işlemenize olanak tanıyan bir Google Cloud ürünüdür. Bu adımda, uygulamanız tarafından oluşturulan Analytics verilerinin otomatik olarak BigQuery'ye aktarılması için Firebase Console projenizi BigQuery'ye bağlayacaksınız.
BigQuery Export'u etkinleştirme
- Firebase konsoluna gidin.
- Proje Genel Bakışı'nın yanındaki Ayarlar dişli simgesini ve ardından Proje ayarları'nı seçin.
- 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ın 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.
Artık Firebase konsolu projenizi, Firebase Analytics etkinlik verilerini otomatik olarak BigQuery'ye gönderecek şekilde etkinleştirdiniz. Bu işlem, başka bir etkileşim olmadan otomatik olarak gerçekleşir. Ancak BigQuery'de analiz veri kümesini oluşturan ilk dışa aktarma işlemi 24 saat sürebilir. Veri kümesi oluşturulduktan sonra Firebase, yeni Analytics etkinliklerini gün içinde doldurulan tabloya sürekli olarak BigQuery'ye aktarır ve geçmiş günlerdeki etkinlikleri events tablosunda gruplandırır.
Öneri modelini eğitmek için çok fazla veri gerekir. Şu anda büyük miktarda veri üreten bir uygulamamız olmadığı için bu eğitimin geri kalanında kullanmak üzere bir örnek veri kümesini BigQuery'ye aktaracağız.
7. Model eğitimi verilerini elde etmek için BigQuery'yi kullanma
Firebase konsolumuzu BigQuery'ye aktaracak şekilde bağladığımıza göre, uygulama analizleri etkinlik verilerimiz bir süre sonra BigQuery konsolunda otomatik olarak gösterilecek. Bu eğitimin amaçları doğrultusunda başlangıç verileri elde etmek için bu adımda, öneri modelimizi eğitmek üzere kullanacağımız mevcut bir örnek veri kümesini BigQuery konsolunuza aktaracağız.
Örnek veri kümesini BigQuery'ye aktarma
- Google Cloud Console'da BigQuery kontrol paneline gidin.
- Menüde proje adınızı seçin.
- Ayrıntıları görmek için BigQuery'nin sol gezinme bölümünün alt kısmında proje adınızı seçin.
- Veri kümesi oluşturma panelini açmak için Veri kümesi oluştur'u seçin.
- Veri kümesi kimliği için "firebase_recommendations_dataset" girin ve Veri kümesi oluştur'u seçin.
- Yeni veri kümesi, sol menüde proje adının altında 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şturun için "Google Cloud Storage"ı seçin.
- GCS paketinden dosya seçin alanına "gs://firebase-recommendations/recommendations-test/formatted_data_filtered.txt" girin.
- Dosya biçimi açılır listesinde "JSONL"yi seçin.
- Tablo adı için "recommendations_table" girin.
- Şema > Otomatik algılama > Şema ve giriş parametreleri bölümündeki kutuyu işaretleyin.
- Tablo oluştur'u seçin.
Örnek veri kümesini keşfetme
Bu aşamada, isteğe bağlı olarak şemayı keşfedebilir 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 bilgileri oluşturacağız. Bu kimlik bilgilerini, BigQuery verilerimize erişmek ve bunları yüklemek için Colab ortamında kullanacağız.
- Google Cloud projeniz için faturalandırmanın etkinleştirildiğinden emin olun.
- BigQuery ve BigQuery Storage API'lerini etkinleştirin. < burayı tıklayın>
- Hizmet Hesabı Anahtarı Oluşturma sayfasına gidin.
- Hizmet hesabı listesinden Yeni hizmet hesabı'nı seçin.
- Hizmet hesabı adı alanına bir ad girin.
- Rol listesinden Proje > Sahip'i seçin.
- Oluştur'u tıklayın. Anahtarı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 önceden işleme ve öneri modelini eğitme
Bu adımda, aşağıdaki adımları uygulamak için bir Colab not defteri kullanacağız:
- BigQuery verilerini Colab not defterine aktarma
- verileri model eğitimine hazırlamak için önceden işleme
- öneri modelini analiz verileri üzerinde eğitme
- Modeli TF Lite modeli olarak dışa aktarma
- modeli Firebase konsoluna dağıtarak uygulamamızda kullanabilme
Colab eğitim not defterini kullanıma sunmadan önce, eğitilen modeli Firebase konsolumuza dağıtabilmesi için Firebase Model Management API'yi etkinleştireceğiz.
Firebase Model Management API'yi etkinleştirme
ML modellerinizi depolamak için paket oluşturma
Firebase konsolunuzda Storage'a gidip Başlayın'ı tıklayın.
Bucket'ınızı ayarlamak için diyalogdaki adımları uygulayın.
Firebase ML API'yi etkinleştirme
Google Cloud Console'da Firebase ML API sayfasına gidin ve Etkinleştir'i tıklayın.
Modeli eğitmek ve dağıtmak için Colab not defterini kullanma
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ılmış bir TF Lite model dosyanız olur. Bu dosyayı uygulamamızla senkronize edebiliriz.
Colab'de aç
9. Modeli uygulamanıza indirme
Bu adımda, uygulamamızı Firebase Machine Learning'den yeni eğittiğimiz modeli indirecek şekilde değiştireceğiz.
Firebase ML bağımlılığını ekleme
Uygulamanızda Firebase makine öğrenimi modellerini kullanmak için aşağıdaki bağımlılık gereklidir. Bu bağımlılık zaten eklenmiş olmalıdır (doğrulayın).
Podfile
import FirebaseCore
import FirebaseMLModelDownloader
Firebase Model Manager API ile modeli indirme
Modelin indirilme koşullarını ayarlamak ve uzak modeli uygulamamızla senkronize etmek için bir indirme görevi oluşturmak üzere aşağıdaki kodu ModelLoader.swift dosyasına kopyalayın.
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 etme
TensorFlow Lite çalışma zamanı, öneri oluşturmak için modelinizi uygulamada kullanmanıza olanak tanır. Önceki adımda, indirdiğimiz model dosyasıyla bir TFlite yorumlayıcısı başlatmıştık. Bu adımda, önce çıkarım adımında modelimize eşlik edecek bir sözlük ve etiketler yükleyeceğiz. Ardından, modelimize giriş oluşturmak için ön işleme ve çıkarımımızdan sonuçları çıkaracağımız son işleme ekleyeceğiz.
Load Dictionary and Labels (Sözlük ve Etiketleri Yükle)
Öneri modeli tarafından öneri adayları oluşturmak için kullanılan etiketler, varlıklar klasöründeki sorted_movie_vocab.json dosyasında listelenir. Bu adayları 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ği biçime göre değiştiririz. Burada, henüz çok fazla kullanıcı beğenisi 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
}
Öneriler oluşturmak için yorumlayıcıyı çalıştırma
Burada, önceden işlenmiş girişimizde çıkarım çalıştırmak için önceki adımda indirdiğimiz modeli kullanıyoruz. Modelimizin giriş ve çıkış türünü belirleyip film önerilerimizi oluşturmak için çıkarım gerçekleştiririz. 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)")
}
}
Son İşlemeyi Uygulama
Son olarak, bu adımda modelimizin çıktısını işleriz. En yüksek güvene sahip sonuçları seçer ve içerilen değerleri (kullanıcının daha önce 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şturulmaya başlanır.
11. Tebrikler!
TensorFlow Lite ve Firebase kullanarak uygulamanıza öneri özelliği eklediniz. Bu Codelab'de gösterilen tekniklerin ve işlem hattının genelleştirilebileceğini ve diğer öneri türlerini sunmak için de kullanılabileceğini unutmayın.
İşlediğimiz konular
- Firebase ML
- Firebase Analytics
- Analytics etkinliklerini BigQuery'ye aktarma
- Analiz etkinliklerini ön işleme
- Öneri TensorFlow modelini eğitme
- Modeli dışa aktarma ve Firebase Konsolu'na dağıtma
- Uygulamada film önerileri sunma
Sonraki adımlar
- Uygulamanızda Firebase ML önerilerini uygulayın.
Daha Fazla Bilgi
Sorunuz mu var?
Sorunları Bildirme