Android için metin yerleştirme kılavuzu

MediaPipe Metin Yerleştirme görevi, anlamsal anlamını yakalamak için metin verilerinin sayısal bir gösterimini oluşturmanıza olanak tanır. Bu talimatlar Metin Yerleştirme'nin Android uygulamalarıyla nasıl kullanılacağını gösterir.

Bu görevin özellikleri, modelleri ve yapılandırma seçenekleri hakkında daha fazla bilgi için Genel Bakış'a bakın.

Kod örneği

MediaPipe Tasks örnek kodu, Android için Metin Yerleştirme uygulamasının basit bir uygulamasıdır. Örnek, iki metin parçası arasındaki anlamsal benzerlikleri değerlendirir ve fiziksel bir Android cihaz veya bir Android emülatörü gerektirir.

Uygulamayı kendi Android uygulamanız için başlangıç noktası olarak kullanabilir veya mevcut bir uygulamayı değiştirirken referans olarak kullanabilirsiniz. Metin Yerleştirme örnek kodu GitHub'da barındırılır.

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 Yerleştirme örnek uygulamasının dosyalarına sahip olursunuz:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_embedder/android
    

Örnek kodun yerel bir sürümünü oluşturduktan sonra projeyi Android Studio'ya aktarabilir ve uygulamayı çalıştırabilirsiniz. Talimatlar için Android Kurulum Kılavuzu'na bakın.

Temel bileşenler

Aşağıdaki dosyalar, bu metin yerleştirme örnek uygulaması için önemli kodu içerir:

  • TextEmbedderHelper.kt: Metin yerleştiriciyi başlatır, modeli işler ve seçimi yetkilendirir.
  • MainActivity.kt: Uygulamayı uygular ve kullanıcı arayüzü bileşenlerini derler.

Kurulum

Bu bölümde geliştirme ortamınızı kurmanın temel adımları açıklanmaktadır. Projelerinizi özel olarak Metin Yerleştirme'yi kullanacak şekilde kodlayın. 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 Android için kurulum kılavuzuna bakın.

Bağımlılıklar

Metin Yerleştirme, 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 Yerleştirme görevi, bu görevle uyumlu, eğitilmiş bir model gerektirir. Metin Yerleştirme için eğitilmiş modeller hakkında daha fazla bilgi almak isterseniz göreve genel bakış Modeller bölümüne bakın.

Modeli seçip indirin ve ardından proje dizininizde depolayın:

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

ModelAssetPath parametresinde modelin yolunu belirtin. Örnek kodda, model TextEmbedderHelper.kt dosyasındaki setupTextEmbedder() işlevinde tanımlanır:

Modelin kullandığı yolu belirtmek için BaseOptions.Builder.setModelAssetPath() işlevini kullanın. Bu yöntem, bir sonraki bölümde yer alan kod örneğinde ele alınmaktadır.

Görevi oluşturma

Görevi oluşturmak için createFrom...() işlevlerinden birini kullanabilirsiniz. createFromOptions() işlevi, yerleştirici seçeneklerini ayarlamak için gereken yapılandırma seçeneklerini kabul eder. Görevi, createFromFile() fabrika işlevini kullanarak da başlatabilirsiniz. createFromFile() işlevi, eğitilen model dosyasına giden göreli veya mutlak yolu kabul eder. Yapılandırma seçenekleri hakkında daha fazla bilgi edinmek için Yapılandırma seçenekleri 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.

val baseOptions = baseOptionsBuilder.build()
val optionsBuilder =
    TextEmbedderOptions.builder().setBaseOptions(baseOptions)
val options = optionsBuilder.build()
textEmbedder = TextEmbedder.createFromOptions(context, options)

Örnek kod uygulaması, TextEmbedderHelper.kt dosyasındaki setupTextEmbedder() işlevindeki metin yerleştirme seçeneklerini ayarlar.

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
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 zaten yerel bir L2_NORMALIZATION TFLite Op bulunmuyorsa kullanın. Çoğu durumda bu zaten mevcuttur ve L2 normalleştirmesi, bu seçeneğe gerek olmadan TFLite çıkarımıyla yapılır. Boolean False
quantize Döndürülen yerleştirmenin skalar niceleme kullanılarak baytlara dönüştürülüp ölçülmeyeceği. Yerleştirmelerin açıkça birim norm olduğu varsayılır. Bu nedenle her boyut için [-1,0, 1,0] değerinde bir değer olması garanti edilir. Bu mümkün değilse l2_normalize seçeneğini kullanın. Boolean False

Verileri hazırlama

Metin Yerleştirme 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 embed() işlevi içinde gerçekleştirilir. Giriş metninin önceden işlenmesine gerek yoktur.

val inputText = "The input text to be embedded."

Görevi çalıştırma

Metin Yerleştirici, çıkarımları tetiklemek için embed işlevini kullanır. Metin yerleştirme için bu, giriş metni için gömme vektörlerinin döndürülmesi anlamına gelir.

Aşağıdaki kod, işlemenin görev modeliyle nasıl yürütüldüğünü gösterir.

textEmbedder?.let {
    val firstEmbed =
        it.embed(firstText).embeddingResult().embeddings().first()
    val secondEmbed =
        it.embed(secondText).embeddingResult().embeddings().first()
    ...
}

Örnek kodda embed işlevi TextEmbedderHelper.kt dosyasında çağrılır.

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

Çıkarım çalıştırıldığında, Metin Yerleştirme görevi, giriş metni için yerleştirmelerin listesini (kayan nokta veya skaler ölçülmüş) içeren bir TextEmbedderResult nesnesi döndürür.

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

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

TextEmbedder.cosineSimilarity işlevini kullanarak iki yerleştirmenin semantik benzerliğini karşılaştırabilirsiniz. Örnek için aşağıdaki kodu inceleyin.

val similarity = TextEmbedder.cosineSimilarity(firstEmbed, secondEmbed)

Örnek kodda TextEmbedder.cosineSimilarity() işlevi TextEmbedderHelper.kt dosyasında çağrılır.