Android için metin sınıflandırma kılavuzu

MediaPipe Metin Sınıflandırıcı görevi, metni pozitif veya negatif duygu gibi tanımlanmış bir dizi kategoriye göre sınıflandırmanızı sağlar. Kategoriler, kullandığınız modeli ve bu modelin nasıl eğitildiğini belirler. Bu talimatlar Metin Sınıflandırıcı'nın Android uygulamalarıyla nasıl kullanılacağını gösterir.

Demoyu izleyerek bu görevi çalışırken görebilirsiniz. Bu görevin özellikleri, modelleri ve yapılandırma seçenekleri hakkında daha fazla bilgi edinmek için Genel Bakış bölümüne bakın.

Kod örneği

Metin Sınıflandırıcı için örnek kod, size referans olması açısından bu görevin basit bir uygulamasını sağlar. Bu kod, bu görevi test etmenize ve kendi metin sınıflandırma uygulamanızı oluşturmaya başlamanıza yardımcı olur. GitHub'da Metin Sınıflandırıcı örnek koduna göz atabilirsiniz.

Kodu indirme

Aşağıdaki talimatlar, git sürüm kontrolü komut satırı aracını kullanarak örnek kodun yerel bir kopyasını nasıl oluşturacağınızı göstermektedir.

Örnek kodu indirmek için:

  1. Aşağıdaki komutu kullanarak git deposunu klonlayın:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. İsteğe bağlı olarak, git örneğinizi az ödeme yöntemini kullanacak şekilde yapılandırın. Böylece yalnızca Metin Sınıflandırıcı örnek uygulamasına ait dosyalara sahip olursunuz:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_classification/android
    

Android Studio ile örnek oluşturma ve çalıştırma talimatları için Android için Kurulum Kılavuzu'nda yer alan örnek kod kurulumu talimatlarına bakın.

Temel bileşenler

Aşağıdaki dosyalar, metin sınıflandırma örnek uygulaması için önemli kodu içerir:

Kurulum

Bu bölümde, geliştirme ortamınızı ayarlamanın temel adımları açıklanmaktadır ve projelerinizi özel olarak Metin Sınıflandırıcı'yı kullanacak şekilde kodlamalısınız. Platform sürümü gereksinimleri de dahil olmak üzere geliştirme ortamınızı MediaPipe Tasks'ı kullanmak üzere ayarlama hakkında genel bilgiler için Android için kurulum kılavuzuna bakın.

Bağımlılıklar

Metin Sınıflandırıcı, com.google.mediapipe:tasks-text kitaplıklarını kullanır. Bu bağımlılığı, Android uygulaması geliştirme projenizin build.gradle dosyasına ekleyin. Gerekli bağımlılıkları aşağıdaki kodu kullanarak içe aktarabilirsiniz:

dependencies {
    implementation 'com.google.mediapipe:tasks-text:latest.release'
}

Model

MediaPipe Metin Sınıflandırıcı görevi, bu görevle uyumlu, eğitilmiş bir model gerektirir. Metin Sınıflandırıcı için eğitilmiş modellerle ilgili daha fazla bilgi almak üzere göreve genel bakış Modeller bölümüne bakın.

Bir model seçip indirin ve ardından projenizin assets dizininde depolayın:

<dev-project-root>/src/main/assets

Kullanılacak modelin yolunu belirtmek için BaseOptions.Builder.setModelAssetPath() yöntemini kullanın. Kod örneği için sonraki bölüme bakın.

Görevi oluşturma

Çıkarımları çalıştırmak üzere görevi hazırlamak için Metin Sınıflandırıcı TextClassifier.createFrom...() işlevlerinden birini kullanın. createFromFile() işlevini, eğitilen model dosyasına giden göreli veya mutlak bir yolla kullanabilirsiniz. Aşağıdaki kod örneğinde, TextClassifier.createFromOptions() işlevinin kullanımı gösterilmiştir. Kullanılabilir yapılandırma seçenekleri hakkında daha fazla bilgi edinmek için Yapılandırma seçenekleri başlıklı makaleye bakın.

Aşağıdaki kod bu görevin nasıl oluşturulacağını ve yapılandırılacağını gösterir.

// no directory path required if model file is in src/main/assets:
String currentModel = "text_classifier_model.tflite";

fun initClassifier() {
    val baseOptionsBuilder = BaseOptions.builder()
        .setModelAssetPath(currentModel)
    try {
        val baseOptions = baseOptionsBuilder.build()
        val optionsBuilder = TextClassifier.TextClassifierOptions.builder()
            .setBaseOptions(baseOptions)
        val options = optionsBuilder.build()
        textClassifier = TextClassifier.createFromOptions(context, options)
    } catch (e: IllegalStateException) { // exception handling
    }
}

Bir görevin nasıl oluşturulacağına ilişkin bir örneği, kod örneği olan TextClassifierHelper sınıf initClassifier() işlevinde görebilirsiniz.

Yapılandırma seçenekleri

Bu görev, Android uygulamaları için aşağıdaki yapılandırma seçeneklerine sahiptir:

Seçenek Adı Açıklama Değer Aralığı Varsayılan Değer
displayNamesLocale Varsa görev modelinin meta verilerinde sağlanan görünen adlar için kullanılacak etiketlerin dilini ayarlar. İngilizce için varsayılan değer en şeklindedir. TensorFlow Lite Metadata Writer API'yi kullanarak özel modelin meta verilerine yerelleştirilmiş etiketler ekleyebilirsiniz Yerel ayar kodu en
maxResults İsteğe bağlı olarak döndürülecek en yüksek puanlı sınıflandırma sonuçlarının isteğe bağlı maksimum sayısını ayarlar. < 0 ise mevcut tüm sonuçlar döndürülür. Pozitif sayılar -1
scoreThreshold Model meta verilerinde belirtilen eşiği (varsa) geçersiz kılan tahmin puanı eşiğini ayarlar. Bu değerin altındaki sonuçlar reddedilir. Tüm kayan Belirlenmedi
categoryAllowlist İsteğe bağlı olarak izin verilen kategori adları listesini ayarlar. Boş değilse kategori adı bu grupta yer almayan sınıflandırma sonuçları filtrelenir. Yinelenen veya bilinmeyen kategori adları yoksayılır. Bu seçenek, categoryDenylist ile birlikte kullanılamaz ve her iki sonucun da kullanılması hataya neden olur. Herhangi bir dize Belirlenmedi
categoryDenylist İzin verilmeyen kategori adlarının isteğe bağlı listesini ayarlar. Boş değilse kategori adı bu kümede yer alan sınıflandırma sonuçları filtrelenir. Yinelenen veya bilinmeyen kategori adları yoksayılır. Bu seçenek categoryAllowlist ile birlikte kullanılamaz ve her iki sonucun da kullanılması hataya neden olur. Herhangi bir dize Belirlenmedi

Verileri hazırlama

Metin Sınıflandırıcı, metin (String) verileriyle çalışır. Görev, tokenizasyon ve tensör ön işlemesi dahil olmak üzere veri girişi ön işlemesini yürütür.

Tüm ön işlemeler, classify() işlevi içinde gerçekleştirilir. Giriş metninin önceden işlenmesine gerek yoktur.

String inputText = "The input text to be classified.";

Görevi çalıştırma

Metin Sınıflandırıcı, çıkarımları yapmak için TextClassifier.classify() işlevini kullanır. Uygulamanızdaki Android kullanıcı arayüzü iş parçacığını engellemekten kaçınmak amacıyla sınıflandırmayı yürütmek için ayrı bir yürütme iş parçacığı kullanın.

Aşağıdaki kod, ayrı bir yürütme iş parçacığı kullanarak işlemenin görev modeliyle nasıl yürütüleceğini gösterir.

    fun classify(text: String) {
        executor = ScheduledThreadPoolExecutor(1)

        executor.execute {
            val results = textClassifier.classify(text)
            listener.onResult(results)
        }
    }

Bir görevin nasıl çalıştırılacağına dair bir örneği, kod örneği olan TextClassifierHelper sınıf classify() işlevinde görebilirsiniz.

Sonuçları işleme ve görüntüleme

Metin Sınıflandırıcı, giriş metni için olası kategorilerin listesini içeren bir TextClassifierResult çıktısı verir. Kategoriler, kullandığınız modele göre tanımlanır. Bu nedenle, farklı kategoriler istiyorsanız farklı bir model seçin veya mevcut bir modeli yeniden eğitin.

Aşağıda, bu görevden alınan çıkış verilerinin bir örneği gösterilmektedir:

TextClassificationResult:
  Classification #0 (single classification head):
    ClassificationEntry #0:
      Category #0:
        category name: "positive"
        score: 0.8904
        index: 0
      Category #1:
        category name: "negative"
        score: 0.1096
        index: 1

Bu sonuç, şu giriş metninde BERT-sınıflandırıcı çalıştırılarak elde edildi: "an imperfect but overall entertaining mystery".

Sonuçların nasıl gösterileceğini belirten bir örneği, kod örneği ResultsAdapter ve ViewHolder iç sınıfında görebilirsiniz.