Thử nghiệm A / B hai phiên bản của một mô hình

Sau khi huấn luyện một mô hình tùy chỉnh mới hoặc mô hình AutoML Vision Edge, bạn có thể sử dụng Thử nghiệm A/B để xem mô hình mới hoạt động tốt như thế nào trong điều kiện thực tế so với mô hình bạn đã sử dụng. Sau khi xác nhận rằng mô hình mới của bạn là một cải tiến, bạn có thể dễ dàng triển khai mô hình mới cho tất cả người dùng của mình mà không yêu cầu cập nhật ứng dụng.

Trang này hiển thị cách bạn có thể tiến hành thử nghiệm A/B để đánh giá hai phiên bản của một mô hình hỗ trợ tính năng tìm kiếm thực vật trực quan giả định. Tính năng này sử dụng mô hình ghi nhãn hình ảnh tùy chỉnh để giúp người dùng xác định các loài thực vật từ hình ảnh của chúng.

Giả sử bạn vừa xuất bản một mô hình ghi nhãn thực vật mới, plant_labeler_v2 và bạn muốn chạy thử nghiệm so sánh mô hình đó với mô hình hiện tại của bạn, có tên là plant_labeler_v1 . Các bước bên dưới cho biết cách thiết lập, chạy thử nghiệm và thực hiện hành động đối với kết quả.

1. Làm cho mô hình của bạn có thể cấu hình từ xa

Bước đầu tiên để thử nghiệm A/B cho mô hình của bạn là sửa đổi ứng dụng của bạn để sử dụng tham số Cấu hình từ xa nhằm xác định xem ứng dụng đó sử dụng mô hình nào. Ban đầu, bạn sẽ đặt giá trị mặc định của tham số này thành mô hình mà ứng dụng của bạn đã sử dụng, nhưng vì tên mô hình được điều khiển bởi một tham số có thể định cấu hình từ xa nên bạn có thể thay đổi và thử nghiệm các mô hình khác nhau mà không cần phải đẩy các bản cập nhật ứng dụng vào máy của mình. người dùng mọi lúc.

Vì vậy, nếu bạn xuất bản mô hình hiện tại của mình dưới tên plant_labeler_v1 thì trong mã khởi tạo ứng dụng của mình, bạn sẽ đặt plant_labeler_v1 làm giá trị mặc định của tham số plant_labeler_model , như trong ví dụ sau:

Nhanh

let remoteConfig = RemoteConfig.remoteConfig()
let defaults = [
    "plant_labeler_model": "plant_labeler_v1" as NSObject,
    // ...
]
remoteConfig.setDefaults(defaults)
remoteConfig.fetchAndActivate()

Mục tiêu-C

FIRRemoteConfig *remoteConfig = [FIRRemoteConfig remoteConfig];
NSDictionary<NSString *, NSObject *> *defaults = @{
  @"plant_labeler_model" : (NSObject *)@"plant_labeler_v1",
  // ...
};
[remoteConfig setDefaults:defaults];
[remoteConfig fetchAndActivateWithCompletionHandler:nil];

Sau đó, thay đổi mã thiết lập mô hình của bạn để tải mô hình được chỉ định bởi tham số plant_labeler_model :

Nhanh

let rcValue = remoteConfig.configValue(forKey: "plant_labeler_model")
guard let remoteModelName = rcValue.stringValue else { return }

// ...

let remoteModel = RemoteModel(
    name: remoteModelName,
    allowsModelUpdates: true,
    initialConditions: initialConditions,
    updateConditions: updateConditions
)
ModelManager.modelManager().register(remoteModel)

// Optionally configure a local model:
// https://firebase.google.com/docs/ml/ios/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml/ios/use-custom-models#configure_a_local_model

Mục tiêu-C

FIRRemoteConfigValue *rcValue = [remoteConfig configValueForKey:@"plant_labeler_model"];
NSString *remoteModelName = [rcValue stringValue];

// ...

FIRRemoteModel *remoteModel = [[FIRRemoteModel alloc] initWithName:remoteModelName
                                                allowsModelUpdates:YES
                                                 initialConditions:initialConditions
                                                  updateConditions:updateConditions];
[[FIRModelManager modelManager] registerRemoteModel:remoteModel];

// Optionally configure a local model:
// https://firebase.google.com/docs/ml/android/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml/android/use-custom-models#configure_a_local_model

Giờ đây, ứng dụng của bạn sử dụng tham số Cấu hình từ xa để xác định mô hình nào sẽ tải, bạn có thể thay đổi mô hình chỉ bằng cách xuất bản một mô hình mới và gán tên của mô hình đó cho tham số Cấu hình từ xa. Khả năng này cho phép Thử nghiệm A/B chỉ định các mô hình khác nhau cho những người dùng khác nhau nhằm mục đích so sánh chúng.

Trước khi tiếp tục, hãy thực hiện thêm phần bổ sung sau vào mã tải xuống mô hình của bạn:

Nhanh

NotificationCenter.default.addObserver(
    forName: .firebaseMLModelDownloadDidSucceed,
    object: nil,
    queue: nil
) { [weak self] notification in
    guard let _ = self,
        let userInfo = notification.userInfo,
        let model = userInfo[ModelDownloadUserInfoKey.remoteModel.rawValue]
            as? RemoteModel,
        model.name == remoteModelName
        else { return }
    // If the model downloaded was specified by a remote parameter, log an
    // event, which will be our experiment's activation event.
    if rcValue.source == .remote {
        Analytics.logEvent("nondefault_model_downloaded", parameters: nil)
    }
}

Mục tiêu-C

__weak typeof(self) weakSelf = self;

[NSNotificationCenter.defaultCenter
    addObserverForName:FIRModelDownloadDidSucceedNotification
                object:nil
                 queue:nil
            usingBlock:^(NSNotification *_Nonnull note) {
              if (weakSelf == nil | note.userInfo == nil) {
                return;
              }

              FIRRemoteModel *model = note.userInfo[FIRModelDownloadUserInfoKeyRemoteModel];
              if ([model.name isEqualToString:remoteModelName] &&
                  rcValue.source == FIRRemoteConfigSourceRemote) {
                // If the model downloaded was specified by a remote parameter, log an
                // event, which will be our experiment's activation event.
                [FIRAnalytics logEventWithName:@"nondefault_model_downloaded" parameters:nil];
              }
            }];

Đoạn mã trên ghi lại sự kiện Analytics tùy chỉnh mà bạn sẽ sử dụng sau này làm thử nghiệm của mình sự kiện kích hoạt . Sự kiện kích hoạt là sự kiện mà người dùng phải kích hoạt trước khi họ được coi là một phần của thử nghiệm. Điều này đảm bảo rằng người dùng sẽ không được ghi lại trong thử nghiệm A/B của bạn cho đến khi thiết bị của họ tải xuống xong mô hình ML tùy chỉnh.

2. Xác định thước đo mục tiêu

Bước tiếp theo là quyết định cách bạn sẽ đo lường sự thành công của mô hình và đảm bảo ứng dụng của bạn đang thu thập dữ liệu cần thiết để kiểm tra xem các phiên bản khác nhau của mô hình hoạt động tốt như thế nào theo số liệu đó.

Thử nghiệm A/B có một số số liệu tích hợp, bao gồm doanh thu, mức độ tương tác hàng ngày và tỷ lệ giữ chân người dùng. Các số liệu này thường hữu ích để thử nghiệm các luồng UX khác nhau hoặc tinh chỉnh các thông số nhưng có thể không có ý nghĩa khi đánh giá mô hình và trường hợp sử dụng của bạn. Trong trường hợp này, thay vào đó, bạn có thể thử tối ưu hóa cho sự kiện Analytics tùy chỉnh.

Sử dụng tính năng tìm kiếm thực vật trực quan giả định làm ví dụ, giả sử bạn trình bày kết quả tìm kiếm cho người dùng theo thứ tự độ tin cậy của mô hình đối với từng kết quả. Một cách để bạn có thể biết được độ chính xác của mô hình của mình là xem tần suất người dùng mở kết quả tìm kiếm đầu tiên.

Để kiểm tra xem mô hình nào đạt được mục tiêu tối đa hóa số lượt nhấp vào kết quả hàng đầu tốt nhất, bạn sẽ ghi lại sự kiện tùy chỉnh bất cứ khi nào người dùng nhấn vào mục đầu tiên trong danh sách kết quả.

Nhanh

Analytics.logEvent("first_result_opened", parameters: nil)

Mục tiêu-C

[FIRAnalytics logEventWithName:@"first_result_opened" parameters:nil];

Số liệu bạn kiểm tra cuối cùng phụ thuộc vào cách ứng dụng sử dụng mô hình của bạn.

Tại thời điểm này, bạn có thể triển khai ứng dụng của mình lên App Store. Ứng dụng của bạn sẽ tiếp tục sử dụng mô hình ban đầu nhưng mã Phân tích và Cấu hình từ xa mà bạn đã thêm sẽ cho phép bạn thử nghiệm các mô hình khác nhau chỉ bằng cách sử dụng bảng điều khiển Firebase.

3. Chạy thử nghiệm Thử nghiệm A/B

Bây giờ ứng dụng của bạn đã nằm trong tay người dùng và đang thu thập dữ liệu phân tích, hãy tạo thử nghiệm Thử nghiệm A/B để kiểm tra tác động của việc sử dụng mô hình mới thay vì mô hình hiện tại.

Để tạo thử nghiệm:

  1. Trên trang Sự kiện của bảng điều khiển Firebase, hãy xác minh rằng bạn đang ghi nhật ký các sự kiện Analytics có liên quan: sự kiện kích hoạt và chỉ số mục tiêu.

    Ứng dụng của bạn cần ghi lại từng sự kiện ít nhất một lần trước khi sự kiện đó xuất hiện trong bảng điều khiển Firebase.

  2. Trong bảng điều khiển Firebase, hãy mở phần Thử nghiệm A/B .

  3. Tạo một thử nghiệm mới:

    1. Nhấp vào Tạo thử nghiệm > Cấu hình từ xa .

    2. Trong phần Nhắm mục tiêu :

      • Chọn ứng dụng của bạn từ danh sách
      • Chỉ định số lượng người dùng bạn muốn đưa vào thử nghiệm
      • Chọn sự kiện kích hoạt mà bạn đã bắt đầu ghi nhật ký (trong ví dụ này là nondefault_model_downloaded )
    3. Trong phần Mục tiêu , hãy chọn chỉ số mục tiêu bạn đã xác định trong phần trước (trong ví dụ này là first_result_opened ) từ danh sách chỉ số mục tiêu và chọn bất kỳ chỉ số bổ sung nào bạn muốn theo dõi, chẳng hạn như doanh thu mua hàng hoặc người dùng không gặp sự cố.

    4. Trong phần Biến thể , xác định hai biến thể:

      • Nhóm kiểm soát (được tạo tự động)
      • Máy dán nhãn thực vật thí nghiệm

      Đối với nhóm Control , tạo tham số plant_labeler_model và đặt thành plant_labeler_v1 . Người dùng được chỉ định vào nhóm kiểm soát sẽ sử dụng mô hình cũ. (Không đặt tham số thành (no change) , vì trong ứng dụng của bạn, bạn đang kiểm tra xem mình có đang sử dụng giá trị từ xa hay không.)

      Đối với biến thể Nhãn thực vật thử nghiệm , hãy đặt tham số plant_labeler_model thành plant_labeler_v2 (giả sử bạn đã xuất bản mô hình mới của mình dưới tên đó). Người dùng được chỉ định cho biến thể này sẽ sử dụng mô hình mới.

    Màn hình cấu hình thử nghiệm A/B

Bắt đầu thử nghiệm và để nó chạy trong vài ngày hoặc hơn cho đến khi Thử nghiệm A/B tuyên bố dẫn đầu. Nếu thử nghiệm không thể xác định được người dẫn đầu, bạn có thể cần mở rộng thử nghiệm tới nhiều người dùng hơn .

4. Triển khai biến thể chiến thắng cho tất cả người dùng

Thẻ kết quả thử nghiệm A/B

Sau khi Thử nghiệm A/B đã thu thập đủ thông tin để tuyên bố dẫn đầu—trong trường hợp này là biến thể tối đa hóa số lần nhấp vào kết quả tìm kiếm hàng đầu—bạn có thể quyết định có nên triển khai biến thể chiến thắng (hoặc biến thể khác) cho tất cả người dùng của mình hay không.

Trong phần Thử nghiệm A/B của bảng điều khiển Firebase , hãy mở chế độ xem chi tiết của thử nghiệm đã hoàn thành. Từ chế độ xem này, bạn có thể xem từng biến thể hoạt động như thế nào theo chỉ số mục tiêu và bất kỳ chỉ số phụ nào bạn đã chọn. Với thông tin này, bạn có thể quyết định nên tung ra biến thể hàng đầu hay biến thể khác.

Để triển khai một biến thể cho tất cả người dùng, hãy nhấp vào > Triển khai biến thể trên trang chi tiết của thử nghiệm. Khi bạn làm như vậy, giá trị của tham số plant_labeler_model sẽ là plant_labeler_v2 cho tất cả người dùng.

Trong bản cập nhật ứng dụng trong tương lai, bạn nên thay đổi giá trị mặc định của tham số plant_labeler_model thành plant_labeler_v2 và cập nhật mô hình đi kèm nếu bạn sử dụng. Tuy nhiên, người dùng của bạn hiện đang sử dụng mẫu mới nhất nên bạn có thể đẩy bản cập nhật này như một phần của ứng dụng đã xuất bản bất cứ khi nào thuận tiện, chẳng hạn như khi bạn thực hiện bản cập nhật tính năng tiếp theo.