1. Обзор
Добро пожаловать в Рекомендации с TensorFlow Lite и лабораторией кода Firebase. В этой лаборатории вы узнаете, как использовать TensorFlow Lite и Firebase для развертывания модели рекомендаций в вашем приложении. Эта кодовая лаборатория основана на этом примере 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 в проект
- Перейдите в консоль Firebase .
- Выберите « Создать новый проект» и назовите свой проект «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.
Добавьте Firebase в свой подфайл и запустите установку модуля.
pod 'FirebaseAnalytics' pod 'FirebaseMLModelDownloader', '9.3.0-beta' pod 'TensorFlowLiteSwift'
В методе didFinishLaunchingWithOptions
вашего AppDelegate
импортируйте Firebase в верхней части файла.
import FirebaseCore
И добавьте вызов для настройки Firebase.
FirebaseApp.configure()
Запустите проект еще раз, чтобы убедиться, что приложение настроено правильно и не происходит сбой при запуске.
- Убедитесь, что параметр «Включить Google Analytics для этого проекта» включен.
- Выполните оставшиеся шаги настройки в консоли 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. Проверьте интеграцию с Google Analytics
На этом этапе мы создадим события Analytics в приложении и проверим, что они отправляются в консоль Firebase.
Включить ведение журнала отладки Analytics
Обычно события, регистрируемые вашим приложением, группируются в течение примерно одного часа и загружаются вместе. Такой подход экономит заряд батареи на устройствах конечных пользователей и снижает использование сетевых данных. Однако в целях проверки реализации аналитики (и для просмотра аналитики в отчете DebugView) вы можете включить режим отладки на своем устройстве разработки, чтобы загружать события с минимальной задержкой.
Чтобы включить режим отладки Analytics на вашем устройстве разработки, укажите следующий аргумент командной строки в Xcode:
-FIRDebugEnabled
На этом этапе вы успешно интегрировали Firebase Analytics в свое приложение. Когда пользователи используют ваше приложение и им нравятся фильмы, их лайки будут регистрироваться в совокупности. Мы будем использовать эти совокупные данные в оставшейся части этой лаборатории для обучения нашей модели рекомендаций. Ниже приведен необязательный шаг, позволяющий увидеть, что те же события Analytics, которые вы видели в Logcat, также транслируются в консоль Firebase. Смело переходите на следующую страницу.
Необязательно: подтвердите события Analytics в консоли Firebase.
- Перейдите в консоль Firebase .
- Выберите DebugView в разделе Analytics.
- В Xcode выберите «Выполнить» , чтобы запустить приложение и добавить несколько фильмов в список «Понравилось».
- В DebugView консоли Firebase убедитесь, что эти события регистрируются при добавлении фильмов в приложение.
6. Экспортируйте данные Analytics в Big Query.
Big Query — это продукт Google Cloud, который позволяет просматривать и обрабатывать большие объемы данных. На этом этапе вы подключите свой проект Firebase Console к Big Query, чтобы данные Analytics, сгенерированные вашим приложением, автоматически экспортировались в Big Query.
Включить экспорт Big Query
- Перейдите в консоль Firebase .
- Щелкните значок шестеренки «Настройки» рядом с пунктом «Обзор проекта» , а затем выберите «Настройки проекта».
- Выберите вкладку «Интеграции» .
- Выберите «Ссылка» (или «Управление ») внутри блока BigQuery .
- Нажмите «Далее» на этапе «О связывании Firebase с BigQuery» .
- В разделе «Настроить интеграцию» нажмите переключатель, чтобы включить отправку данных Google Analytics, и выберите «Ссылка на BigQuery» .
Теперь вы включили свой проект консоли Firebase для автоматической отправки данных о событиях Firebase Analytics в Big Query. Это происходит автоматически без какого-либо дальнейшего взаимодействия, однако первый экспорт, при котором создается набор аналитических данных в BigQuery, может произойти не раньше, чем через 24 часа. После создания набора данных Firebase постоянно экспортирует новые события Analytics в Big Query во внутридневную таблицу и группирует события прошлых дней в таблице событий.
Для обучения модели рекомендаций требуется много данных. Поскольку у нас еще нет приложения, генерирующего большие объемы данных, на следующем этапе мы импортируем образец набора данных в BigQuery, чтобы использовать его в оставшейся части этого руководства.
7. Используйте BigQuery для получения данных обучения модели.
Теперь, когда мы подключили консоль Firebase для экспорта в BigQuery, данные о событиях аналитики наших приложений через некоторое время автоматически появятся в консоли BigQuery. Чтобы получить некоторые исходные данные для целей этого руководства, на этом этапе мы импортируем существующий образец набора данных в вашу консоль BigQuery, чтобы использовать его для обучения нашей модели рекомендаций.
Импортируйте образец набора данных в BigQuery.
- Перейдите на панель управления BigQuery в облачной консоли Google.
- Выберите название вашего проекта в меню.
- Чтобы просмотреть подробности, выберите название своего проекта в нижней части левой панели навигации BigQuery.
- Выберите Создать набор данных , чтобы открыть панель создания набора данных.
- Введите «firebase_recommendations_dataset» в качестве идентификатора набора данных и выберите « Создать набор данных» .
- Новый набор данных появится в левом меню под названием проекта. Нажмите на него.
- Выберите Создать таблицу , чтобы открыть панель создания таблицы.
- Для создания таблицы выберите «Google Cloud Storage».
- В поле «Выбрать файл из сегмента GCS» введите «gs://firebase-recommendations/recommendations-test/formatted_data_filtered.txt».
- Выберите «JSONL» в раскрывающемся списке «Формат файла» .
- Введите «recommendations_table» в качестве имени таблицы .
- Установите флажок в разделе «Схема» > «Автоопределение» > «Схема и входные параметры».
- Выберите Создать таблицу.
Изучите образец набора данных
На этом этапе вы можете дополнительно изучить схему и просмотреть этот набор данных.
- Выберите набор данных firebase-recommendations-dataset в левом меню, чтобы развернуть содержащиеся в нем таблицы.
- Выберите таблицу таблицы рекомендаций, чтобы просмотреть схему таблицы.
- Выберите «Предварительный просмотр» , чтобы просмотреть фактические данные о событиях Analytics, содержащиеся в этой таблице.
Создайте учетные данные сервисной учетной записи
Теперь мы создадим учетные данные сервисной учетной записи в нашем проекте консоли Google Cloud, которые мы сможем использовать в среде Colab на следующем шаге для доступа и загрузки наших данных BigQuery.
- Убедитесь, что для вашего проекта Google Cloud включена оплата.
- Включите API BigQuery и BigQuery Storage API. < нажмите здесь >
- Перейдите на страницу создания ключа учетной записи службы .
- В списке Учетная запись службы выберите Новая учетная запись службы .
- В поле Имя учетной записи службы введите имя.
- В списке Роль выберите Проект > Владелец .
- Нажмите Создать . Файл JSON, содержащий ваш ключ, загружается на ваш компьютер.
На следующем этапе мы будем использовать Google Colab для предварительной обработки этих данных и обучения нашей модели рекомендаций.
8. Предварительная обработка данных и обучение модели рекомендаций.
На этом этапе мы будем использовать блокнот Colab для выполнения следующих шагов:
- импортируйте данные BigQuery в блокнот Colab
- предварительно обработать данные, чтобы подготовить их к обучению модели
- обучить модель рекомендаций на аналитических данных
- экспортируйте модель как модель TF lite
- разверните модель в консоли Firebase, чтобы мы могли использовать ее в нашем приложении.
Прежде чем запустить учебный блокнот Colab, мы сначала включим API управления моделями Firebase, чтобы Colab мог развернуть обученную модель на нашей консоли Firebase.
Включить API управления моделями Firebase
Создайте корзину для хранения моделей машинного обучения.
В консоли Firebase перейдите в раздел «Хранилище» и нажмите «Начать».
Следуйте диалогу, чтобы настроить ведро.
Включить API Firebase ML
Перейдите на страницу Firebase ML API в Google Cloud Console и нажмите «Включить».
Используйте блокнот Colab для обучения и развертывания модели.
Откройте блокнот Colab, используя следующую ссылку, и выполните приведенные ниже шаги. После выполнения шагов в блокноте Colab у вас будет файл модели TF lite, развернутый на консоли Firebase, который мы сможем синхронизировать с нашим приложением.
Открыть в Колабе
9. Загрузите модель в свое приложение.
На этом этапе мы изменим наше приложение, чтобы загрузить модель, которую мы только что обучили с помощью Firebase Machine Learning.
Добавить зависимость Firebase ML
Следующая зависимость необходима для использования моделей машинного обучения Firebase в вашем приложении. Он уже должен быть добавлен (проверьте).
Подфайл
import FirebaseCore
import FirebaseMLModelDownloader
Загрузите модель с помощью Firebase Model Manager API.
Скопируйте приведенный ниже код в ModelLoader.swift , чтобы настроить условия, при которых происходит загрузка модели, и создайте задачу загрузки для синхронизации удаленной модели с нашим приложением.
МодельLoader.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 в папке ресурсов. Скопируйте следующий код, чтобы загрузить этих кандидатов.
РекомендацииViewController.swift
func getMovies() -> [MovieItem] {
let barController = self.tabBarController as! TabBarController
return barController.movies
}
Внедрить предварительную обработку
На этапе предварительной обработки мы меняем форму входных данных, чтобы она соответствовала ожиданиям нашей модели. Здесь мы дополняем входную длину значением-заполнителем, если мы еще не получили много лайков от пользователей. Скопируйте приведенный ниже код:
РекомендацииViewController.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
}
Запустите интерпретатор для генерации рекомендаций
Здесь мы используем модель, которую мы скачали на предыдущем шаге, для выполнения вывода на основе предварительно обработанных входных данных. Мы устанавливаем тип входных и выходных данных для нашей модели и выполняем вывод, чтобы сгенерировать рекомендации по фильмам. Скопируйте следующий код в свое приложение.
РекомендацииViewController.swift
import TensorFlowLite
РекомендацииViewController.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)")
}
}
Внедрить постобработку
Наконец, на этом этапе мы подвергаем постобработке выходные данные нашей модели, выбирая результаты с наибольшей достоверностью и удаляя содержащиеся значения (фильмы, которые уже понравились пользователю). Скопируйте следующий код в свое приложение.
РекомендацииViewController.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. Обратите внимание, что методы и конвейер, показанные в этой кодовой лаборатории, можно обобщить и использовать для предоставления других типов рекомендаций.
Что мы рассмотрели
- Firebase ML
- Аналитика Firebase
- Экспортируйте события аналитики в BigQuery.
- События предварительной обработки аналитики
- Рекомендации по обучению Модель TensorFlow
- Экспортируйте модель и разверните ее в консоли Firebase.
- Показывайте рекомендации фильмов в приложении
Следующие шаги
- Внедрите рекомендации Firebase ML в свое приложение.
Узнать больше
Есть вопрос?
Сообщить о проблемах
1. Обзор
Добро пожаловать в Рекомендации с TensorFlow Lite и лабораторией кода Firebase. В этой лаборатории вы узнаете, как использовать TensorFlow Lite и Firebase для развертывания модели рекомендаций в вашем приложении. Эта кодовая лаборатория основана на этом примере 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 в проект
- Перейдите в консоль Firebase .
- Выберите « Создать новый проект» и назовите свой проект «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.
Добавьте Firebase в свой подфайл и запустите установку модуля.
pod 'FirebaseAnalytics' pod 'FirebaseMLModelDownloader', '9.3.0-beta' pod 'TensorFlowLiteSwift'
В методе didFinishLaunchingWithOptions
вашего AppDelegate
импортируйте Firebase в верхней части файла.
import FirebaseCore
И добавьте вызов для настройки Firebase.
FirebaseApp.configure()
Запустите проект еще раз, чтобы убедиться, что приложение настроено правильно и не происходит сбой при запуске.
- Убедитесь, что параметр «Включить Google Analytics для этого проекта» включен.
- Выполните оставшиеся шаги настройки в консоли 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. Проверьте интеграцию с Google Analytics
На этом этапе мы создадим события Analytics в приложении и проверим, что они отправляются в консоль Firebase.
Включить ведение журнала отладки Analytics
Обычно события, регистрируемые вашим приложением, группируются в течение примерно одного часа и загружаются вместе. Такой подход экономит заряд батареи на устройствах конечных пользователей и снижает использование сетевых данных. Однако в целях проверки реализации аналитики (и для просмотра аналитики в отчете DebugView) вы можете включить режим отладки на своем устройстве разработки, чтобы загружать события с минимальной задержкой.
Чтобы включить режим отладки Analytics на вашем устройстве разработки, укажите следующий аргумент командной строки в Xcode:
-FIRDebugEnabled
На этом этапе вы успешно интегрировали Firebase Analytics в свое приложение. Когда пользователи используют ваше приложение и им нравятся фильмы, их лайки будут регистрироваться в совокупности. Мы будем использовать эти совокупные данные в оставшейся части этой лаборатории для обучения нашей модели рекомендаций. Ниже приведен необязательный шаг, позволяющий увидеть, что те же события Analytics, которые вы видели в Logcat, также транслируются в консоль Firebase. Смело переходите на следующую страницу.
Необязательно: подтвердите события Analytics в консоли Firebase.
- Перейдите в консоль Firebase .
- Выберите DebugView в разделе Analytics.
- В Xcode выберите «Выполнить» , чтобы запустить приложение и добавить несколько фильмов в список «Понравилось».
- В DebugView консоли Firebase убедитесь, что эти события регистрируются при добавлении фильмов в приложение.
6. Экспортируйте данные Analytics в Big Query.
Big Query — это продукт Google Cloud, который позволяет просматривать и обрабатывать большие объемы данных. На этом этапе вы подключите свой проект Firebase Console к Big Query, чтобы данные Analytics, сгенерированные вашим приложением, автоматически экспортировались в Big Query.
Включить экспорт Big Query
- Перейдите в консоль Firebase .
- Щелкните значок шестеренки «Настройки» рядом с пунктом «Обзор проекта» , а затем выберите «Настройки проекта».
- Выберите вкладку «Интеграции» .
- Выберите «Ссылка» (или «Управление ») внутри блока BigQuery .
- Нажмите «Далее» на этапе «О связывании Firebase с BigQuery» .
- В разделе «Настроить интеграцию» нажмите переключатель, чтобы включить отправку данных Google Analytics, и выберите «Связать с BigQuery» .
Теперь вы включили свой проект консоли Firebase для автоматической отправки данных о событиях Firebase Analytics в Big Query. Это происходит автоматически без какого-либо дальнейшего взаимодействия, однако первый экспорт, при котором создается набор аналитических данных в BigQuery, может произойти не раньше, чем через 24 часа. После создания набора данных Firebase постоянно экспортирует новые события Analytics в Big Query во внутридневную таблицу и группирует события прошлых дней в таблице событий.
Для обучения модели рекомендаций требуется много данных. Поскольку у нас еще нет приложения, генерирующего большие объемы данных, на следующем этапе мы импортируем образец набора данных в BigQuery, чтобы использовать его в оставшейся части этого руководства.
7. Используйте BigQuery для получения данных обучения модели.
Теперь, когда мы подключили консоль Firebase для экспорта в BigQuery, данные о событиях аналитики наших приложений через некоторое время автоматически появятся в консоли BigQuery. Чтобы получить некоторые исходные данные для целей этого руководства, на этом этапе мы импортируем существующий образец набора данных в вашу консоль BigQuery, чтобы использовать его для обучения нашей модели рекомендаций.
Импортируйте образец набора данных в BigQuery.
- Перейдите на панель управления BigQuery в облачной консоли Google.
- Выберите название вашего проекта в меню.
- Чтобы просмотреть подробности, выберите название своего проекта в нижней части левой панели навигации BigQuery.
- Выберите Создать набор данных , чтобы открыть панель создания набора данных.
- Введите «firebase_recommendations_dataset» в качестве идентификатора набора данных и выберите « Создать набор данных» .
- Новый набор данных появится в левом меню под названием проекта. Нажмите на него.
- Выберите Создать таблицу , чтобы открыть панель создания таблицы.
- Для создания таблицы выберите «Google Cloud Storage».
- В поле «Выбрать файл из сегмента GCS» введите «gs://firebase-recommendations/recommendations-test/formatted_data_filtered.txt».
- Выберите «JSONL» в раскрывающемся списке «Формат файла» .
- Введите «recommendations_table» в качестве имени таблицы .
- Установите флажок в разделе «Схема» > «Автоопределение» > «Схема и входные параметры».
- Выберите Создать таблицу.
Изучите образец набора данных
На этом этапе вы можете дополнительно изучить схему и просмотреть этот набор данных.
- Выберите набор данных firebase-recommendations-dataset в левом меню, чтобы развернуть содержащиеся в нем таблицы.
- Выберите таблицу таблицы рекомендаций, чтобы просмотреть схему таблицы.
- Выберите «Предварительный просмотр» , чтобы просмотреть фактические данные о событиях Analytics, содержащиеся в этой таблице.
Создайте учетные данные сервисной учетной записи
Теперь мы создадим учетные данные сервисной учетной записи в нашем проекте консоли Google Cloud, которые мы сможем использовать в среде Colab на следующем шаге для доступа и загрузки наших данных BigQuery.
- Убедитесь, что для вашего проекта Google Cloud включена оплата.
- Включите API BigQuery и BigQuery Storage API. < нажмите здесь >
- Перейдите на страницу создания ключа учетной записи службы .
- В списке Учетная запись службы выберите Новая учетная запись службы .
- В поле Имя учетной записи службы введите имя.
- В списке Роль выберите Проект > Владелец .
- Нажмите Создать . Файл JSON, содержащий ваш ключ, загружается на ваш компьютер.
На следующем этапе мы будем использовать Google Colab для предварительной обработки этих данных и обучения нашей модели рекомендаций.
8. Предварительная обработка данных и обучение модели рекомендаций.
На этом этапе мы будем использовать блокнот Colab для выполнения следующих шагов:
- импортируйте данные BigQuery в блокнот Colab
- предварительно обработать данные, чтобы подготовить их к обучению модели
- обучить модель рекомендаций на аналитических данных
- экспортируйте модель как модель TF lite
- разверните модель в консоли Firebase, чтобы мы могли использовать ее в нашем приложении.
Прежде чем запустить учебный блокнот Colab, мы сначала включим API управления моделями Firebase, чтобы Colab мог развернуть обученную модель на нашей консоли Firebase.
Включить API управления моделями Firebase
Создайте корзину для хранения моделей машинного обучения.
В консоли Firebase перейдите в раздел «Хранилище» и нажмите «Начать».
Следуйте диалогу, чтобы настроить ведро.
Включить API Firebase ML
Перейдите на страницу Firebase ML API в Google Cloud Console и нажмите «Включить».
Используйте блокнот Colab для обучения и развертывания модели.
Откройте блокнот Colab, используя следующую ссылку, и выполните приведенные ниже шаги. После выполнения шагов в блокноте Colab у вас будет файл модели TF lite, развернутый на консоли Firebase, который мы сможем синхронизировать с нашим приложением.
Открыть в Колабе
9. Загрузите модель в свое приложение.
На этом этапе мы изменим наше приложение, чтобы загрузить модель, которую мы только что обучили с помощью Firebase Machine Learning.
Добавить зависимость Firebase ML
Следующая зависимость необходима для использования моделей машинного обучения Firebase в вашем приложении. Он уже должен быть добавлен (проверьте).
Подфайл
import FirebaseCore
import FirebaseMLModelDownloader
Загрузите модель с помощью Firebase Model Manager API.
Скопируйте приведенный ниже код в ModelLoader.swift , чтобы настроить условия, при которых происходит загрузка модели, и создайте задачу загрузки для синхронизации удаленной модели с нашим приложением.
МодельLoader.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 в папке ресурсов. Скопируйте следующий код, чтобы загрузить этих кандидатов.
РекомендацииViewController.swift
func getMovies() -> [MovieItem] {
let barController = self.tabBarController as! TabBarController
return barController.movies
}
Внедрить предварительную обработку
На этапе предварительной обработки мы меняем форму входных данных, чтобы она соответствовала ожиданиям нашей модели. Здесь мы дополняем входную длину значением-заполнителем, если мы еще не получили много лайков от пользователей. Скопируйте приведенный ниже код:
РекомендацииViewController.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
}
Запустите интерпретатор для генерации рекомендаций
Здесь мы используем модель, которую мы скачали на предыдущем шаге, для выполнения вывода на основе предварительно обработанных входных данных. Мы устанавливаем тип входных и выходных данных для нашей модели и выполняем вывод, чтобы сгенерировать рекомендации по фильмам. Скопируйте следующий код в свое приложение.
РекомендацииViewController.swift
import TensorFlowLite
РекомендацииViewController.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)")
}
}
Внедрить постобработку
Наконец, на этом этапе мы подвергаем постобработке выходные данные нашей модели, выбирая результаты с наибольшей достоверностью и удаляя содержащиеся значения (фильмы, которые уже понравились пользователю). Скопируйте следующий код в свое приложение.
РекомендацииViewController.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. Обратите внимание, что методы и конвейер, показанные в этой кодовой лаборатории, можно обобщить и использовать для предоставления других типов рекомендаций.
Что мы рассмотрели
- Firebase ML
- Аналитика Firebase
- Экспортируйте события аналитики в BigQuery.
- События предварительной обработки аналитики
- Рекомендации по обучению Модель TensorFlow
- Экспортируйте модель и разверните ее в консоли Firebase.
- Показывайте рекомендации фильмов в приложении
Следующие шаги
- Внедрите рекомендации Firebase ML в свое приложение.
Узнать больше
Есть вопрос?
Сообщить о проблемах