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örevin nasıl yerine getirildiğini öğrenebilirsiniz. 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, metin yerleştirici örnek uygulamasının önemli kodunu 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ştirici, 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ülleri içeren bir Podfile oluşturma talimatları için CocoaPods'u kullanma başlıklı makaleyi inceleyin.

MediaPipeTasksText kapsülünü, aşağıdaki kodu kullanarak 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 dosya eklemeyle ilgili talimatlar için Xcode projenizdeki dosya ve klasörleri yönetme başlıklı makaleyi inceleyin.

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şturma

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ış başlıklı makaleyi inceleyin.

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 model zaten yerel bir L2_NORMALIZATION TFLite Op'u içermiyorsa kullanın. Çoğu durumda bu durum zaten böyledir ve böylece L2 normalleştirmesi, bu seçeneğe gerek olmadan TFLite çıkarımıyla gerçekleştirilir. 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. Aksi takdirde 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 işlemini tamamlayana kadar mevcut mesaj dizisini 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 planda iş parçacığı yürütme için Swift Concurrency'i 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

Metin Yerleştirici görevi, çıkarım çalıştırıldığında giriş metni için yerleştirmelerin (kayan nokta veya skaler olarak kesirli) listesini içeren bir TextEmbedderResultnesnesi 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.