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

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 modele ve bu modelin nasıl eğitildiğine göre belirlenir. Bu talimatlar, iOS uygulamalarında Metin Sınıflandırıcı'nın nasıl kullanılacağını gösterir. Bu talimatlarda açıklanan kod örneğine GitHub'dan ulaşabilirsiniz.

Bu web demosunu 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

MediaPipe Görevleri örnek kodu, iOS için bir Metin Sınıflandırıcı uygulamasının temel bir uygulamasıdır.

Uygulamayı kendi iOS uygulamanız için başlangıç noktası olarak kullanabilir veya mevcut bir uygulamayı değiştirirken başvuruda bulunabilirsiniz. GitHub'daki Metin Sınıflandırıcı örnek koduna bakabilirsiniz.

Kodu indirme

Aşağıdaki talimatlar, git 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/ios/
    

Örnek kodun yerel bir sürümünü oluşturduktan sonra MediaPipe görev kitaplığını yükleyebilir, Xcode kullanarak projeyi açabilir ve uygulamayı çalıştırabilirsiniz. Talimatlar için iOS için Kurulum Kılavuzu'na bakın.

Temel bileşenler

Aşağıdaki dosyalar, Metin Sınıflandırıcı örnek uygulaması için önemli kodu içerir:

Kurulum

Bu bölümde, geliştirme ortamınızı ayarlamanın temel adımları ve Metin Sınıflandırıcı'yı kullanmak için kod projeleriniz açıklanmaktadır. Platform sürümü gereksinimleri de dahil olmak üzere, MediaPipe görevlerini kullanmak amacıyla geliştirme ortamınızı ayarlama hakkında genel bilgiler için iOS için kurulum kılavuzuna bakın.

Bağımlılıklar

Metin Sınıflandırıcı, CocoaPods kullanılarak yüklenmesi gereken MediaPipeTasksText kitaplığını kullanır. Kitaplık hem Swift hem de Objective-C uygulamalarıyla uyumludur ve dile özgü ek kurulum gerektirmez.

CocoaPods'u macOS'e yükleme talimatları için CocoaPods yükleme kılavuzuna bakın. Uygulamanız için gerekli kapsüllerle Podfile oluşturma talimatları için CocoaPods'u kullanma bölümüne bakın.

Aşağıdaki kodu kullanarak MediaPipeTasksText kapsülünü Podfile içine ekleyin:

target 'MyTextClassifierApp' do
  use_frameworks!
  pod 'MediaPipeTasksText'
end

Uygulamanız birim test hedefleri içeriyorsa Podfile cihazınızın kurulumuyla ilgili ek bilgiler için iOS için Kurulum Kılavuzu'na bakın.

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ş modeller hakkında daha fazla bilgi edinmek üzere göreve genel bakış Modeller bölümüne bakın.

Bir model seçip indirin ve Xcode kullanarak proje dizininize ekleyin. Xcode projenize dosya ekleme talimatları için Xcode projenizde dosya ve klasörleri yönetme bölümüne bakın.

Uygulama paketinizdeki modelin yolunu belirtmek için BaseOptions.modelAssetPath özelliğini kullanın. Kod örneği için sonraki bölüme bakın.

Görevi oluşturma

Metin Sınıflandırıcı görevini, başlatıcılardan birini çağırarak oluşturabilirsiniz. TextClassifier(options:) başlatıcı, yapılandırma seçeneklerinin değerlerini ayarlar.

Özelleştirilmiş yapılandırma seçenekleriyle başlatılan bir Metin Sınıflandırıcı'ya ihtiyacınız yoksa varsayılan seçeneklerle bir Metin Sınıflandırıcı oluşturmak için TextClassifier(modelPath:) başlatıcısını kullanabilirsiniz. Yapılandırma seçenekleri hakkında daha fazla bilgi için Yapılandırmaya Genel Bakış bölümüne bakın.

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

Swift

import MediaPipeTasksText

let modelPath = Bundle.main.path(forResource: "model",
                                      ofType: "tflite")

let options = TextClassifierOptions()
options.baseOptions.modelAssetPath = modelPath
options.scoreThreshold = 0.6

let textClassifier = try TextClassifier(options: options)

Objective-C

@import MediaPipeTasksText;

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
                                                      ofType:@"tflite"];

MPPTextClassifierOptions *options = [[MPPTextClassifierOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.scoreThreshold = 0.6;

MPPTextClassifier *textClassifier =
      [[MPPTextClassifier alloc] initWithOptions:options error:nil];

Yapılandırma seçenekleri

Bu görev, iOS 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 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(text:) işlevi içinde gerçekleştirilir. Giriş metninin önceden işlenmesine gerek yoktur.

Swift

let text = "The input text to be classified."

Objective-C

NSString *text = @"The input text to be classified.";

Görevi çalıştırma

Metin Sınıflandırıcı'yı çalıştırmak için classify(text:) yöntemini kullanın. Metin Sınıflandırıcı, giriş metni için olası kategorileri döndürür.

Swift

let result = try textClassifier.classify(text: text)

Objective-C

MPPTextClassifierResult *result = [textClassifier classifyText:text
                                                          error:nil];

Not: Görev, metin üzerinde çıkarım yapmayı bitirene kadar geçerli iş parçacığını engeller. Geçerli iş parçacığının engellenmesini önlemek için işlemeyi iOS Dispatch veya NSOperation çerçevelerini kullanarak bir arka plan iş parçacığında yürütün.

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

Çıkarım çalıştırıldığında, Metin Sınıflandırıcı görevi giriş metni için olası kategorilerin listesini içeren bir TextClassifierResult nesnesi döndürür. 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".

Örnek koddaki ViewController.swift dosyası, görevden döndürülen algılama sonuçlarının nasıl görüntüleneceğini gösterir.