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

Metin Sınıflandırıcı görevi, metinleri tanımlanmış bir dizi kategori halinde sınıflandırmanıza olanak tanır. örnek olarak verilebilir. Kategoriler, Google Haritalar'daki ve bu modelin nasıl eğitildiğine de değineceğiz. Bu talimatlar size iOS uygulamalarında Metin Sınıflandırıcı'nın nasıl kullanılacağını inceleyeceğiz. Bu kılavuzlarda açıklanan kod örneği talimatları şu adreste bulabilirsiniz: GitHub'a gidin.

Bu Web sayfasını görüntüleyerek bu görevin nasıl yerine getirildiğini demo'ya gidin. Örneğin, özellikleri, modelleri ve yapılandırma seçenekleri hakkında daha fazla bilgi için Genel Bakış.

Kod örneği

MediaPipe Tasks örnek kodu, bir Metin Sınıflandırıcı'nın temel uygulamasıdır uygulamasını indirin.

Uygulamayı kendi iOS uygulamanız için bir başlangıç noktası olarak kullanabilir veya buna başvurabilirsiniz mevcut bir uygulamada değişiklik yaparken. Daha fazla bilgi için Metin Sınıflandırıcı örnek koduna açık GitHub'a gidin.

Kodu indirme

Aşağıdaki talimatlarda, örneğin yerel bir kopyasını nasıl oluşturacağınız gösterilmektedir kodu oluşturmak için git komut satırı aracını kullanın.

Ö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 seyrek ödeme yöntemini kullanacak şekilde yapılandırın. Böylece, yalnızca Metin Sınıflandırıcı örnek uygulamasına ilişkin dosyalar:

    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_classification/ios/
    

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

Temel bileşenler

Aşağıdaki dosyalarda Metin Sınıflandırıcı örneği için önemli bir kod bulunmaktadır uygulama:

Kurulum

Bu bölümde, geliştirme ortamınızı ve ayarlarınızı yönetmeyle ilgili Metin Sınıflandırıcı'yı kullanmak için projeleri kodlayın. platform sürümü de dahil olmak üzere MediaPipe görevlerini kullanmaya yönelik geliştirme ortamı iOS için kurulum kılavuzuna bakın.

Bağımlılıklar

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

CocoaPods'u macOS'e yükleme talimatları için bkz. CocoaPods kurulum kılavuzuna başvurun. Uygulamanız için gerekli kapsülleri içeren bir Podfile oluşturma talimatlarına için CocoaPods'da bulabilirsiniz.

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 iOS'i kurma hakkında daha fazla bilgi edinin. Podfile cihazınız.

Model

MediaPipe Metin Sınıflandırıcı görevi, uyumlu olan ve eğitilmiş bir model gerektiriyor karar veriyorum. Mevcut eğitilmiş modeller hakkında daha fazla bilgi için Metin Sınıflandırıcı, göreve genel bakış için bkz. Modeller bölümünü inceleyin.

Bir model seçip indirin ve Xcode'u kullanarak bu modeli proje dizininize ekleyin. Xcode projenize dosya eklemeyle ilgili talimatlar için bkz. Xcode'daki dosyalar ve klasörler inceleyebilirsiniz.

Modelin yolunu belirtmek için BaseOptions.modelAssetPath özelliğini kullanın daha fazla bilgi edineceksiniz. 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. İlgili içeriği oluşturmak için kullanılan TextClassifier(options:) başlatıcı, yapılandırma için değerleri ayarlar seçenekleri vardır.

Özelleştirilmiş yapılandırmayla başlatılan bir Metin Sınıflandırıcı'ya ihtiyacınız yoksa seçeneklerini görmek isterseniz TextClassifier(modelPath:) başlatıcıyı kullanarak Varsayılan seçeneklerle Metin Sınıflandırıcı. Yapılandırma hakkında daha fazla bilgi için Yapılandırmaya Genel Bakış bölümüne göz atı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 görev modelinin meta verileri (varsa). Şunun için varsayılan: en İngilizce. Özel bir modelin meta verilerine yerelleştirilmiş etiketler ekleyebilirsiniz TensorFlow Lite Metadata Writer API'yi kullanarak Yerel ayar kodu en
maxResults İsteğe bağlı maksimum puanlı sınıflandırma sonucu sayısını şu değere ayarlar: dön. < 0 ise tüm mevcut sonuçlar döndürülür. Pozitif sayılar -1
scoreThreshold Şu kriterde sağlanan tahmini geçersiz kılan bir tahmin puanı eşiğini belirler: model meta verileri (varsa). Bu değerin altındaki sonuçlar reddedilir. Herhangi bir kayan nokta Ayarlanmadı
categoryAllowlist İzin verilen kategori adlarının isteğe bağlı listesini ayarlar. Boş değilse kategori adı bu kümede bulunmayan sınıflandırma sonuçları filtrelendi. Yinelenen veya bilinmeyen kategori adları yoksayılır. Bu seçenek categoryDenylist ile birlikte kullanılamaz ve her ikisi de hataya neden olur. Tüm dizeler Ayarlanmadı
categoryDenylist İzin verilmeyen kategori adlarının isteğe bağlı listesini ayarlar. Eğer Boş olmayan, kategori adı bu kümede bulunan sınıflandırma sonuçları filtrelenir çıkar. Yinelenen veya bilinmeyen kategori adları yoksayılır. Bu seçenek birlikte hariç tutmanın yanı sıra her iki sonucun da hatalı olarak kullanılmasıdır.categoryAllowlist Tüm dizeler Ayarlanmadı

Verileri hazırlama

Metin Sınıflandırıcı metin verileriyle çalışır. Görev, veri girişini işler ön işleme dahil edilir.

Tüm ön işlemler, classify(text:) işlevi içinde gerçekleştirilir. Hayır giriş metninin önceden ek olarak işlenmesi gerekir.

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ı girilen metin 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, çıkarım çalıştırmayı tamamlayana kadar mevcut iş parçacığını engeller olduğunu görebilirsiniz. Mevcut iş parçacığının engellenmesini önlemek için işlemeyi iOS kullanarak arka plan iş parçacığı Sevkiyat veya NSOperation çerçeveleri.

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

Çıkarım çalıştırıldığında, Metin Sınıflandırıcı görevi bir TextClassifierResult döndürür. nesne (giriş metni için olası kategorilerin listesini içerir). İlgili içeriği oluşturmak için kullanılan kategoriler, kullandığınız modele göre tanımlanır. Bu nedenle, farklı kategoriler kullanabilir, farklı bir model seçebilir veya mevcut modeli yeniden eğitebilirsiniz.

Aşağıda, bu görevdeki çı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ç, giriş metninde BERT sınıflandırıcı çalıştırılarak elde edilmiştir: "an imperfect but overall entertaining mystery".

İlgili içeriği oluşturmak için kullanılan ViewController.swift dosyası, algılama sonuçlarının nasıl görüntüleneceğini gösterir pek bir önemi yok.