Catch up on everthing we announced at this year's Firebase Summit. 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 công bố một mô hình dán nhãn nhà máy mới, plant_labeler_v2 và bạn muốn chạy thử nghiệm so sánh nó với mô hình hiện tại của bạn, tên 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 bạn dưới cái tên plant_labeler_v1 , bạn sẽ, trong mã khởi tạo ứng dụng của bạn, thiết lập plant_labeler_v1 như giá trị mặc định của plant_labeler_model tham số, 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 theo quy định của plant_labeler_model tham số:

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 Sự kiện trang của các firebase console, xác minh bạn đang đăng nhập các sự kiện Analytics có liên quan: sự kiện kích hoạt và mục tiêu số liệ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 căn cứ hỏa lực console, 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> Remote Config.

    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 bạn bắt đầu đăng nhập (trong ví dụ này, nondefault_model_downloaded)
    3. Trong phần Mục tiêu, chọn mục tiêu số liệu bạn đã xác định trong phần trước (trong ví dụ này, first_result_opened) từ danh sách các số liệu mục tiêu, và chọn bất kỳ số liệu bổ sung mà bạn muốn theo dõi, chẳng hạn như doanh thu mua hàng hoặc người sử dụng sụp đổ miễn phí.

    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)
      • Thực nghiệm viên dán nhãn

      Đối với nhóm kiểm soát, tạo ra một plant_labeler_model tham số và đặt nó vào 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 thiết lập các tham số để (no change) , vì trong ứng dụng, bạn thử nghiệm đang mà bạn đang sử dụng một giá trị từ xa.)

      Đối với thực nghiệm nhãn cây biến thể, thiết lập plant_labeler_model tham số để plant_labeler_v2 (giả sử bạn công bố mô hình mới của bạn dưới cá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 một nhà lãnh đạo, bạn có thể cần phải mở rộng thử nghiệm để 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 căn cứ hỏa lực console , mở 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.

Để tung ra một biến thể để tất cả người dùng, nhấp > cuộn ra 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 plant_labeler_model tham số sẽ plant_labeler_v2 cho tất cả người dùng.

Trong một 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 plant_labeler_model tham số để plant_labeler_v2 và cập nhật mô hình kèm nếu bạn sử dụng nó. 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.