iOS için metin yerleştirme kılavuzu

Metin Yerleştirici görevi, metin verilerinin anlamsal anlamını yakalamak için sayısal bir temsili oluşturmanıza olanak tanır. Bu talimatlarda, iOS uygulamalarında metin yerleştiricinin nasıl kullanılacağı gösterilmektedir.

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

Kod örneği

Metin Ekleyici'nin örnek kodu, bu görevi entegre eden iOS için bir uygulamanın temel uygulamasını sağlar. Örnek, iki metin parçası arasındaki anlamsal benzerlikleri değerlendirir ve fiziksel bir iOS cihazı veya iOS simülasyon aracı gerektirir.

Uygulamayı kendi iOS uygulamanız için başlangıç noktası olarak kullanabilir veya mevcut bir uygulamayı değiştirirken referans olarak kullanabilirsiniz. GitHub'daki metin yerleştirici örnek koduna bakabilirsiniz.

Kodu indirme

Aşağıdaki talimatlarda, git komut satırı aracını kullanarak örnek kodun yerel bir kopyasını nasıl oluşturacağınız gösterilmektedir.

Ö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 kontrol kullanacak şekilde yapılandırın. Böylece, yalnızca metin yerleştirici örnek uygulamasının dosyalarına sahip olursunuz:

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

Örnek kodun yerel bir sürümünü oluşturduktan sonra MediaPipe görev kitaplığını yükleyebilir, Xcode'u 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, Text Embedder örnek uygulaması için önemli kodu içerir:

Kurulum

Bu bölümde, geliştirme ortamınızı ve kod projelerinizi metin yerleştiriciyi kullanacak şekilde ayarlamayla ilgili temel adımlar açıklanmaktadır. Platform sürümü gereksinimleri dahil olmak üzere, geliştirme ortamınızı MediaPipe görevlerini kullanmak için ayarlama hakkında genel bilgi için iOS için kurulum kılavuzuna bakın.

Bağımlılıklar

Metin Yerleştirme aracı, CocoaPods kullanılarak yüklenmesi gereken MediaPipeTasksText kitaplığını kullanır. 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 CocoaPods yükleme kılavuzuna bakın. Uygulamanız için gerekli kapsüllerle bir Podfile oluşturma talimatlarını CocoaPods'u kullanma bölümünde bulabilirsiniz.

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

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

Uygulamanız birim testi hedefleri içeriyorsa Podfile'inizi ayarlama hakkında daha fazla bilgi için iOS için Kurulum Kılavuzu'na bakın.

Model

MediaPipe metin yerleştirme görevi, bu görevle uyumlu bir eğitimli model gerektirir. Metin Yerleştirme için kullanılabilen eğitilmiş modeller hakkında daha fazla bilgi için göreve genel bakış Modeller bölümüne bakın.

Bir model seçip indirin ve Xcode'u kullanarak proje dizininize ekleyin. Xcode projenize nasıl dosya ekleyeceğinizle ilgili talimatlar için Xcode projenizdeki dosyaları ve klasörleri yönetme bölümüne bakın.

Uygulama paketinizde modelin yolunu belirtmek için BaseOptions.modelAssetPath mülkünü kullanın. Kod örneği için sonraki bölüme bakın.

Görevi oluşturun

Metin Ekleyici görevini, başlatıcılarından birini çağırarak oluşturabilirsiniz. TextEmbedder(options:) başlatıcısı, yapılandırma seçenekleri için değerleri kabul eder.

Özelleştirilmiş yapılandırma seçenekleriyle başlatılan bir Text Embedder'a ihtiyacınız yoksa, varsayılan seçeneklerle bir Text Embedder oluşturmak için TextEmbedder(modelPath:) başlatıcıyı 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 kodda, bu görevin nasıl oluşturulacağı ve yapılandırılacağı gösterilmektedir.

Swift

import MediaPipeTasksText

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

let options = TextEmbedderOptions()
options.baseOptions.modelAssetPath = modelPath
options.quantize = true

let textEmbedder = try TextEmbedder(options: options)

Objective-C

@import MediaPipeTasksText;

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

MPPTextEmbedderOptions *options = [[MPPTextEmbedderOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.quantize = YES;

MPPTextEmbedder *textEmbedder =
      [[MPPTextEmbedder alloc] initWithOptions:options error:nil];

Yapılandırma seçenekleri

Bu görevde, iOS uygulamaları için aşağıdaki yapılandırma seçenekleri bulunur:

Seçenek Adı Açıklama Değer Aralığı Varsayılan Değer
l2_normalize Döndürülen özellik vektörünün L2 normuyla normalleştirilip normalleştirilmeyeceği. Bu seçeneği yalnızca modelde halihazırda doğal bir L2_NORMALIZATION TFLite Op içermiyorsa kullanın. Çoğu durumda bu durum geçerlidir ve L2 normalleştirmesi bu seçeneğe gerek kalmadan TFLite çıkarımıyla elde edilir. Boolean False
quantize Döndürülen yerleştirmenin skaler kesme işlemiyle baytlara bölünüp bölünmeyeceği. Yerleştirmelerin dolaylı olarak birim-norm olarak kabul edildiği varsayılır. Bu nedenle, tüm boyutların [-1,0, 1,0] arasında bir değere sahip olması garanti edilir. Bu durumda l2_normalize seçeneğini kullanın. Boolean False

Görevi çalıştırma

Giriş metnini yerleştirmek ve gömme vektörlerini elde etmek için TextEmbedder sınıfının embed(text:) yöntemini kullanabilirsiniz.

Swift

let result = try textEmbedder.embed(text: text)

Objective-C

MPPTextEmbedderResult *result = [textEmbedder embedText:text
                                                  error:nil];

Not: Görev, metinde çıkarım çalıştırmayı tamamlayana kadar mevcut iş parçacığını engeller. Mevcut iş parçacığının engellenmesini önlemek için iOS Dispatch veya NSOperation çerçevelerini kullanarak işlemeyi arka planda bir iş parçacığında yürütün. Uygulamanız Swift kullanılarak oluşturulduysa arka plan iş parçacığı yürütme için Swift eşzamanlılığı özelliğini de kullanabilirsiniz.

Örnek kodda embed(text:) yöntemi TextEmbedderService.swift dosyasında çağrılır.

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

Çıkarım yapıldıktan sonra Metin Yerleştirme görevi, giriş metni için yerleştirmeler listesi (kayan nokta veya skaler olarak nicelenmiş) içeren bir TextEmbedderResult nesnesi döndürür.

Aşağıda, bu görevin çıkış verilerine örnek verilmiştir:

TextEmbedderResult:
  Embedding #0 (sole embedding head):
    float_embedding: {0.2345f, 0.1234f, ..., 0.6789f}
    head_index: 0

TextEmbedder.cosineSimilarity yöntemini kullanarak iki yerleştirmenin anlamsal benzerliğini karşılaştırabilirsiniz.

Swift

let similarity = try TextEmbedder.cosineSimilarity(
  embedding1: result.embeddingResult.embeddings[0],
  embedding2: otherResult.embeddingResult.embeddings[0])
    

Objective-C

NSNumber *similarity = [MPPTextEmbedder
      cosineSimilarityBetweenEmbedding1:result.embeddingResult.embeddings[0]
                          andEmbedding2:otherResult.embeddingResult.embeddings[0]
                                  error:nil];
    

Örnek kodda TextEmbedder.cosineSimilarity yöntemi TextEmbedderService.swift dosyasında çağrılır.