Zadanie MediaPipe Text Embedder pozwala utworzyć liczbową reprezentację danych tekstowych w celu zebrania ich semantycznego znaczenia. W tych instrukcjach pokazujemy, jak korzystać z kreatora tekstu w aplikacjach na Androida.
Więcej informacji o możliwościach, modelach i opcjach konfiguracji tego zadania znajdziesz w sekcji Omówienie.
Przykładowy kod
Przykładowy kod MediaPipe Tasks to prosta implementacja aplikacji do umieszczania tekstu na Androidzie. W tym przykładzie oceniono podobieństwa semantyczne między 2 fragmentami tekstu i wymagamy fizycznego urządzenia z Androidem lub emulatora Androida.
Możesz użyć aplikacji jako punktu wyjścia dla własnej aplikacji na Androida lub skorzystać z niej podczas modyfikowania istniejącej aplikacji. Przykładowy kod do umieszczania tekstu jest hostowany na GitHub.
Pobieranie kodu
Z instrukcji poniżej dowiesz się, jak utworzyć lokalną kopię przykładowego kodu za pomocą narzędzia wiersza poleceń git.
Aby pobrać przykładowy kod:
- Sklonuj repozytorium git za pomocą tego polecenia:
git clone https://github.com/google-ai-edge/mediapipe-samples
- Opcjonalnie skonfiguruj instancję git tak, aby używała rozproszonego procesu płatności, aby mieć tylko pliki dla przykładowej aplikacji do umieszczania tekstu:
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 do Android Studio i uruchomić aplikację. Instrukcje znajdziesz w przewodniku konfiguracji na Androida.
Kluczowe elementy
Te pliki zawierają kluczowy kod tej przykładowej aplikacji do umieszczania tekstu:
- TextEmbedderHelper.kt: inicjuje narzędzie do umieszczania tekstu oraz obsługuje wybór modelu i przedstawicieli.
- MainActivity.kt: implementacja aplikacji i tworzenie komponentów interfejsu użytkownika.
Konfiguracja
W tej sekcji znajdziesz opis kluczowych kroków, które należy wykonać, aby skonfigurować środowisko programistyczne i projekty kodu związane z umieszczaniem tekstu. Ogólne informacje o konfigurowaniu środowiska programistycznego na potrzeby zadań MediaPipe, w tym o wymaganiach dotyczących wersji platformy, znajdziesz w przewodniku konfiguracji na Androida.
Zależności
Umieszczony tekst korzysta z bibliotek com.google.mediapipe:tasks-text
. Dodaj tę zależność do pliku build.gradle
swojego projektu na Androida.
Możesz zaimportować wymagane zależności za pomocą tego kodu:
dependencies {
implementation 'com.google.mediapipe:tasks-text:latest.release'
}
Model
Zadanie MediaPipe Text Embedder wymaga wytrenowanego modelu zgodnego z tym zadaniem. Więcej informacji o dostępnych wytrenowanych modelach do umieszczania tekstu znajdziesz w sekcji poświęconej modelom – omówieniem zadań.
Wybierz i pobierz model, a następnie zapisz go w katalogu projektu:
<dev-project-root>/src/main/assets
Podaj ścieżkę modelu w parametrze ModelAssetPath
. W przykładowym kodzie model jest zdefiniowany w funkcji setupTextEmbedder()
w pliku TextEmbedderHelper.kt:
Użyj funkcji BaseOptions.Builder.setModelAssetPath()
, aby określić ścieżkę używaną przez model. Tę metodę omówimy w przykładowym kodzie w następnej sekcji.
Tworzenie zadania
Aby utworzyć zadanie, możesz użyć jednej z funkcji createFrom...()
. Funkcja createFromOptions()
akceptuje opcje konfiguracji umożliwiające ustawienie opcji umieszczania. Możesz też zainicjować zadanie za pomocą funkcji fabrycznej createFromFile()
. Funkcja createFromFile()
akceptuje ścieżkę względną lub bezwzględną do wytrenowanego pliku 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ładowy kod implementuje opcje umieszczania tekstu w funkcji setupTextEmbedder()
w pliku TextEmbedderHelper.kt.
Opcje konfiguracji
To zadanie ma 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 natywnej operacji L2_NORMALIZATION TFLite. W większości przypadków tak się dzieje i w ten sposób można uzyskać normalizację L2 za pomocą wnioskowania TFLite bez potrzeby użycia tej opcji. | Boolean |
False |
quantize |
Określa, czy zwrócone umieszczenie ma zostać poddane kwantyzacji do liczby bajtów za pomocą kwantyzacji skalarnej. Osadzone elementy są domyślnie uznawane za normę jednostki, dlatego każdy wymiar na pewno ma wartość [-1,0, 1,0]. Jeśli tak nie jest, użyj opcji l2_normalize. | Boolean |
False |
Przygotuj dane
Umieszczony tekst obsługuje dane tekstowe (String
). To zadanie obsługuje wstępne przetwarzanie danych wejściowych, w tym tokenizację i wstępne przetwarzanie tensorów. Przetwarzanie wstępne jest realizowane w ramach funkcji embed()
. Nie ma potrzeby wcześniejszego wstępnego przetwarzania tekstu wejściowego.
val inputText = "The input text to be embedded."
Uruchamianie zadania
Umieszczony tekst używa funkcji embed
do aktywowania wnioskowania. W przypadku umieszczania tekstu oznacza to zwrócenie wektorów reprezentacji dla tekstu wejściowego.
Poniższy kod pokazuje, 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 pliku TextEmbedderHelper.kt.
Obsługa i wyświetlanie wyników
Po uruchomieniu wnioskowania zadanie umieszczania tekstu zwraca obiekt TextEmbedderResult
zawierający listę reprezentacji właściwościowych (zmiennoprzecinkowych lub kwantyzowanych skalarnie) dla tekstu wejściowego.
Poniżej znajdziesz przykład danych wyjściowych z 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 2 wektorów dystrybucyjnych za pomocą funkcji TextEmbedder.cosineSimilarity
. Przykład znajdziesz poniżej.
val similarity = TextEmbedder.cosineSimilarity(firstEmbed, secondEmbed)
W przykładowym kodzie funkcja TextEmbedder.cosineSimilarity()
jest wywoływana w pliku TextEmbedderHelper.kt.