Catch up on highlights from Firebase at Google I/O 2023. Learn more

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

Sau khi đào tạo 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 cho biết 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ô hình hỗ trợ tính năng tìm kiếm thực vật bằng hình ảnh giả định. Tính năng này sử dụng mô hình dán 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 dán 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ể định cấu hình từ xa

Bước đầu tiên để kiểm tra A / B các mô hình của bạn là sửa đổi ứng dụng của bạn để sử dụng thông số Cấu hình từ xa để xác định mô hình đó sử dụng. Ban đầu, bạn sẽ đặt giá trị mặc định của thông số này là mô hình mà ứng dụng của bạn đã sử dụng, nhưng vì tên mô hình được kiểm soát bởi một thông số có thể định cấu hình từ xa, bạn có thể thay đổi và thử nghiệm với 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 lên 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 , trong mã khởi tạo ứng dụng của bạn, bạn sẽ đặt plant_labeler_v1 làm giá trị mặc định của thông số plant_labeler_model , như trong ví dụ sau:

Kotlin+KTX

val remoteConfig = FirebaseRemoteConfig.getInstance()

val remoteConfigDefaults = HashMap<String, Any>()
remoteConfigDefaults["plant_labeler_model"] = "plant_labeler_v1"
Tasks.await(remoteConfig.setDefaultsAsync(remoteConfigDefaults))

remoteConfig.fetchAndActivate().addOnSuccessListener { success ->
    if (success) {
      // Okay to get remote values.
      // ...
    }
}

Java

final FirebaseRemoteConfig remoteConfig = FirebaseRemoteConfig.getInstance();

Map<String, Object> remoteConfigDefaults = new HashMap<>();
remoteConfigDefaults.put("plant_labeler_model", "plant_labeler_v1");
Tasks.await(remoteConfig.setDefaultsAsync(remoteConfigDefaults));

remoteConfig.fetchAndActivate().addOnSuccessListener(
        new OnSuccessListener<Boolean>() {
            @Override
            public void onSuccess(Boolean success) {
                if (success) {
                  // Okay to get remote values.
                  // ...
                }
            }
        });

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 :

Kotlin+KTX

val rcValue = remoteConfig.getValue("plant_labeler_model")
val remoteModelName = rcValue.asString()

// ...

val remoteModel = FirebaseRemoteModel.Builder(remoteModelName)
        .enableModelUpdates(true)
        .setInitialDownloadConditions(initialConditions)
        .setUpdatesDownloadConditions(updateConditions)
        .build()
FirebaseModelManager.getInstance().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

Java

FirebaseRemoteConfigValue rcValue = remoteConfig.getValue("plant_labeler_model");
String remoteModelName = rcValue.asString();

// ...

FirebaseRemoteModel remoteModel = new FirebaseRemoteModel.Builder(remoteModelName)
        .enableModelUpdates(true)
        .setInitialDownloadConditions(initialConditions)
        .setUpdatesDownloadConditions(updateConditions)
        .build();
FirebaseModelManager.getInstance().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 thông 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 nó cho thông 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 bạn tiếp tục, hãy thực hiện bổ sung sau vào mã tải xuống mô hình của bạn:

Kotlin+KTX

FirebaseModelManager.getInstance().downloadRemoteModelIfNeeded(remoteModel)
    .addOnSuccessListener {
        // If the model downloaded was specified by a remote parameter, log an
        // event, which will be our experiment's activation event.
        if (rcValue.source == FirebaseRemoteConfig.VALUE_SOURCE_REMOTE) {
            FirebaseAnalytics.getInstance(this).logEvent("nondefault_model_downloaded", null)
        }
    }

Java

FirebaseModelManager.getInstance().downloadRemoteModelIfNeeded(remoteModel)
        .addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {
                // If the model downloaded was specified by a remote parameter, log an
                // event, which will be our experiment's activation event.
                if (rcValue.getSource() == FirebaseRemoteConfig.VALUE_SOURCE_REMOTE) {
                    FirebaseAnalytics.getInstance(YourActivity.this)
                            .logEvent("nondefault_model_downloaded", null);
                }
            }
        });

Đ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 bị ghi lại trong kiểm tra 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 của họ.

2. Xác định số liệu mục tiêu

Bước tiếp theo là quyết định cách bạn sẽ đo lường mức độ thành công của mô hình và đảm bảo rằng ứ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 chỉ số đó.

Thử nghiệm A / B có một số chỉ số 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 chỉ số này thường hữu ích để kiểm tra 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ể cố gắng tối ưu hóa cho một 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 của mình theo thứ tự độ tin cậy của mô hình trong mỗi kết quả. Một cách bạn có thể biết về độ chính xác của mô hình là xem xét 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 các lần nhấp vào kết quả hàng đầu một cách tốt nhất, bạn sẽ ghi lại một 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ả.

Kotlin+KTX

FirebaseAnalytics.getInstance(this).logEvent("first_result_opened", null)

Java

FirebaseAnalytics.getInstance(YourActivity.this).logEvent("first_result_opened", null);

Chỉ số bạn kiểm tra cuối cùng phụ thuộc vào cách ứng dụng của bạn 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 Cửa hàng Play. Ứng dụng của bạn sẽ tiếp tục sử dụng mô hình ban đầu của bạn, nhưng cấu hình từ xa và mã Analytics mà bạn đã thêm sẽ cho phép bạn thử nghiệm với các mô hình khác nhau chỉ bằng bảng điều khiển Firebase.

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

Giờ đây, ứ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 hiệu quả 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 của bạn mà 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 số liệu 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 số liệu mục tiêu và chọn bất kỳ số liệu 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 điều khiển (được tạo tự động)
      • Người trồng cây thử nghiệm

      Đối với nhóm Điều khiển , hãy tạo một tham số plant_labeler_model và đặt nó 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 thông số thành (no change) , vì trong ứng dụng của bạn, bạn đang kiểm tra rằng bạn đang sử dụng một giá trị từ xa.)

      Đối với biến thể máy dán nhãn thực vật Thử nghiệm , hãy đặt thông 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 kiểm tra A / B

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

4. Giới thiệu biến thể chiến thắng cho tất cả người dùng

Phiếu kết quả kiểm tra A / B

Sau khi Thử nghiệm A / B đã thu thập đủ thông tin để tuyên bố người dẫn đầu — trong trường hợp này, 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ó triển khai biến thể chiến thắng (hoặc một 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 của bạn 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 triển khai biến thể hàng đầu hay một 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 > Giới thiệu 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 đã sử dụng mô hình mới nhất, vì vậy 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 cập nhật tính năng tiếp theo.