Przewodnik umieszczania tekstu w Androidzie

Zadanie MediaPipe Text Embedder umożliwia utworzenie liczbowej reprezentacji danych tekstowych w uchwycić jego znaczenie semantyczne. Z tych instrukcji dowiesz się, jak korzystać z Umieszczanie tekstu w aplikacjach na Androida

Więcej informacji o funkcjach, modelach i opcjach konfiguracji zapoznaj się z Przeglądem.

Przykładowy kod

Przykładowy kod MediaPipe Tasks to prosta implementacja mechanizmu do umieszczania tekstu na Androida. W tym przykładzie oceniamy podobieństwo semantyczne między 2 aspektami. fragmentów tekstu i wymaga fizycznego urządzenia z Androidem lub systemu Android. za pomocą emulatora.

Możesz użyć tej aplikacji jako punktu wyjścia dla własnej aplikacji na Androida lub odnieść się do niej podczas modyfikowania istniejącej aplikacji. Przykładowy kod umieszczania tekstu na stronie jest hostowany GitHub

Pobieranie kodu

Poniżej znajdziesz instrukcje tworzenia lokalnej kopii przykładu. za pomocą narzędzia wiersza poleceń git.

Aby pobrać przykładowy kod:

  1. Sklonuj repozytorium git za pomocą tego polecenia:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. Opcjonalnie możesz skonfigurować instancję git tak, aby wykorzystywała rozproszony proces płatności, aby tylko pliki przykładowej aplikacji Text Embedder:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_embedder/android
    

Po utworzeniu lokalnej wersji przykładowego kodu możesz zaimportować projekt w Android Studio i uruchom aplikację. Odpowiednie instrukcje znajdziesz w Przewodniku po konfiguracji na urządzeniu z Androidem.

Kluczowe elementy

Poniższe pliki zawierają kluczowy kod tego przykładowego narzędzia do umieszczania tekstu aplikacja:

  • TextEmbedderHelper.kt: Inicjuje narzędzie do umieszczania tekstu i obsługuje model oraz przekazuje wybór.
  • MainActivity.kt: Implementuje aplikację i montuje komponenty interfejsu.

Konfiguracja

W tej sekcji opisujemy najważniejsze czynności związane z konfigurowaniem środowiska programistycznego oraz w projektach kodu, w których używa się Text Embedder. Ogólne informacje na temat: skonfigurować środowisko programistyczne do korzystania z zadań MediaPipe, w tym wymagań wersji platformy znajdziesz w przewodniku konfiguracji dla na urządzeniu z Androidem.

Zależności

Narzędzie do dodawania tekstu korzysta z bibliotek com.google.mediapipe:tasks-text. Dodaj to zależności od pliku build.gradle projektu programowania aplikacji na Androida. Wymagane zależności możesz zaimportować przy użyciu tego kodu:

dependencies {
    implementation 'com.google.mediapipe:tasks-text:latest.release'
}

Model

Zadanie MediaPipe Text Embedder wymaga wytrenowanego modelu zgodnego z tym zadanie. Więcej informacji na temat dostępnych wytrenowanych modeli dla funkcji Text Embedder znajdziesz w materiałach na temat zapoznaj się z omówieniem zadania sekcją Modele.

Wybierz i pobierz model, a następnie zapisz go w katalogu projektu:

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

Określ ścieżkę modelu w parametrze ModelAssetPath. W przykładowego kodu, model jest zdefiniowany w funkcji setupTextEmbedder() w TextEmbedderHelper.kt plik:

Użyj funkcji BaseOptions.Builder.setModelAssetPath(), aby podać ścieżkę używane przez model. Tę metodę przywołaliśmy w przykładzie kodu w następnym .

Tworzenie zadania

Do utworzenia zadania możesz użyć jednej z funkcji createFrom...(). Funkcja createFromOptions() akceptuje opcje konfiguracji, aby ustawić umieszczony element . Możesz też zainicjować zadanie, używając fabryki createFromFile() . Funkcja createFromFile() akceptuje ścieżkę względną lub bezwzględną do z plikiem wytrenowanego modelu. Więcej informacji o opcjach konfiguracji znajdziesz w artykule Opcje konfiguracji:

Poniższy kod pokazuje, jak skompilować i skonfigurować to zadanie.

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

Przykładowa implementacja kodu ustawia opcje umieszczania tekstu w sekcji setupTextEmbedder() w TextEmbedderHelper.kt .

Opcje konfiguracji

To zadanie zawiera te opcje konfiguracji aplikacji na Androida:

Nazwa opcji Opis Zakres wartości Wartość domyślna
l2_normalize Określa, czy znormalizować zwrócony wektor cech z normą L2. Użyj tej opcji tylko wtedy, gdy model nie zawiera jeszcze reklamy natywnej L2_NORMALIZATION TFLite Op. W większości przypadków tak jest i tak, Normalizacja L2 jest więc osiągana przez wnioskowanie TFLite i nie ma potrzeby dla tej opcji. Boolean False
quantize Określa, czy zwrócony wektor dystrybucyjny powinien być skwantyzowany na bajty za pomocą kwantyzacji skalarnej. Odtwarzacze domyślnie przyjmuje się, że są zgodne z normą jednostkową, w związku z tym każdy wymiar będzie miał wartość w zakresie [-1,0; 1,0]. Używaj wybierz opcję l2_normalize. Boolean False

Przygotuj dane

Narzędzie do dodawania tekstu działa z danymi tekstowymi (String). Zadanie obsługuje wprowadzanie danych w tym wstępnego przetwarzania danych, w tym tokenizacji i tensorów. Wszystkie wstępne przetwarzanie jest obsługiwane w ramach funkcji embed(). Nie ma potrzeby dodatkowego wstępnego przetwarzania tekstu wejściowego.

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

Uruchamianie zadania

Narzędzie do dodawania tekstu używa funkcji embed do aktywowania wnioskowania. Tekst oznacza to zwracanie wektorów dystrybucyjnych dla tekstu wejściowego.

Poniższy kod ilustruje, jak wykonywać przetwarzanie za pomocą modelu zadań.

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

W przykładowym kodzie funkcja embed jest wywoływana w parametrze TextEmbedderHelper.kt .

Obsługa i wyświetlanie wyników

Po uruchomieniu wnioskowania zadanie umieszczania tekstu zwraca błąd TextEmbedderResult obiekt zawierający listę reprezentacji właściwościowych (zmiennoprzecinkowych lub kwantyzowanych skalarnie) dla tekstu wejściowego.

Poniżej znajdziesz przykładowe dane wyjściowe tego zadania:

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

Możesz porównać semantyczne podobieństwo dwóch wektorów dystrybucyjnych za pomocą funkcji TextEmbedder.cosineSimilarity. Poniżej znajdziesz przykładowy kod.

val similarity = TextEmbedder.cosineSimilarity(firstEmbed, secondEmbed)

W przykładowym kodzie funkcja TextEmbedder.cosineSimilarity() jest wywoływana w parametrze TextEmbedderHelper.kt .