Zadanie umieszczania tekstu pozwala utworzyć liczbową reprezentację danych tekstowych w celu uchwycenia ich semantycznego znaczenia. Z tych instrukcji dowiesz się, jak korzystać z wtyczki do wklejania tekstu w aplikacjach na iOS.
Aby zobaczyć, jak to zadanie działa w praktyce, obejrzyj to demo. Więcej informacji o możliwościach, modelach i opcjach konfiguracji tego zadania znajdziesz w sekcji Omówienie.
Przykładowy kod
Przykładowy kod funkcji Text Embedder udostępnia podstawową implementację aplikacji na iOS, która integruje to zadanie. W tym przykładzie oceniamy podobieństwo semantyczne dwóch fragmentów tekstu i wymagamy fizycznego urządzenia z iOS lub symulatora iOS.
Możesz użyć tej aplikacji jako punktu wyjścia do stworzenia własnej aplikacji na iOS lub wykorzystać ją podczas modyfikowania istniejącej aplikacji. Przykładowy kod Text Embedder znajdziesz na GitHub.
Pobieranie kodu
Z tych instrukcji 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, aby używać rzadkiego sprawdzania, dzięki czemu będziesz mieć tylko pliki przykładowej aplikacji Text Embedder:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/text_embedder/ios/
Po utworzeniu lokalnej wersji przykładowego kodu możesz zainstalować bibliotekę zadań MediaPipe, otworzyć projekt za pomocą Xcode i uruchomić aplikację. Instrukcje znajdziesz w Przewodniku konfiguracji dla systemu iOS.
Kluczowe komponenty
Te pliki zawierają kluczowy kod aplikacji przykładowej Text Embedder:
- TextEmbedderService.swift: inicjuje wtyczkę do wklejania tekstu i wykonuje wnioskowanie na danych wejściowych.
- ViewController.swift: realizuje interfejs użytkownika i formatuje wyniki.
Konfiguracja
W tej sekcji opisaliśmy kluczowe kroki konfigurowania środowiska programistycznego i projektów kodu, aby można było używać narzędzia do wklejania tekstu. Ogólne informacje o konfigurowaniu środowiska programistycznego do korzystania z zadań MediaPipe, w tym wymagania dotyczące wersji platformy, znajdziesz w przewodniku konfiguracji dla iOS.
Zależności
Text Embedder używa biblioteki MediaPipeTasksText
, którą należy zainstalować za pomocą CocoaPods. Biblioteka jest zgodna z aplikacją w języku Swift i Objective-C i nie wymaga dodatkowej konfiguracji językowej.
Instrukcje instalacji CocoaPods na macOS znajdziesz w przewodniku instalacji CocoaPods.
Instrukcje tworzenia Podfile
z podstawowymi komponentami potrzebnymi do działania aplikacji znajdziesz w artykule Korzystanie z CocoaPods.
Dodaj podelement MediaPipeTasksText
do elementu Podfile
za pomocą tego kodu:
target 'MyTextEmbedderApp' do
use_frameworks!
pod 'MediaPipeTasksText'
end
Jeśli Twoja aplikacja zawiera cele testu jednostkowego, zapoznaj się z przewodnikiem konfiguracji dla iOS, w którym znajdziesz dodatkowe informacje o konfigurowaniu Podfile
.
Model
Zadanie MediaPipe Text Embedder wymaga wytrenowanego modelu, który jest zgodny z tym zadaniem. Więcej informacji o dostępnych wytrenowanych modelach usługi Text Embedder znajdziesz w sekcji Modele w omówieniu zadania.
Wybierz i pobierz model, a następnie dodaj go do katalogu projektu za pomocą Xcode. Instrukcje dodawania plików do projektu Xcode znajdziesz w artykule Zarządzanie plikami i folderami w projekcie Xcode.
Użyj właściwości BaseOptions.modelAssetPath
, aby określić ścieżkę do modelu w pakiecie aplikacji. Przykład kodu znajdziesz w następnej sekcji.
Tworzenie zadania
Zadaniem osadzania tekstu możesz utworzyć, wywołując jedną z jego funkcji inicjującej. Inicjator TextEmbedder(options:)
akceptuje wartości opcji konfiguracji.
Jeśli nie potrzebujesz modułu Text Embedder zainicjowanego za pomocą opcji niestandardowej konfiguracji, możesz użyć funkcji inicjalizującej TextEmbedder(modelPath:)
, aby utworzyć moduł Text Embedder z opcjami domyślnymi. Więcej informacji o opcjach konfiguracji znajdziesz w artykule Omówienie konfiguracji.
Poniższy kod pokazuje, jak skompilować i skonfigurować to zadanie.
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];
Opcje konfiguracji
To zadanie zawiera te opcje konfiguracji aplikacji na iOS:
Nazwa opcji | Opis | Zakres wartości | Wartość domyślna |
---|---|---|---|
l2_normalize |
Określa, czy zwrócony wektor cech ma być znormalizowany za pomocą normy L2. Używaj tej opcji tylko wtedy, gdy model nie zawiera już natywnej operacji TFLite L2_NORMALIZATION. W większości przypadków tak jest już w ogóle, więc normalizacja L2 jest osiągana przez wnioskowanie TFLite bez potrzeby stosowania tej opcji. | Boolean |
False |
quantize |
Określa, czy zwrócony embedding powinien zostać skwantowany do bajtów za pomocą kwantyzacji skalarnej. Zakłada się, że wektory mają długość jednostkową, dlatego wartość dowolnego wymiaru musi mieścić się w zakresie [-1,0, 1,0]. Jeśli nie, użyj opcji l2_normalize. | Boolean |
False |
Uruchamianie zadania
Aby osadzić tekst wejściowe i uzyskać jego wektory dystrybucyjne, można użyć metody embed(text:)
z atrybutem TextEmbedder
.
Swift
let result = try textEmbedder.embed(text: text)
Objective-C
MPPTextEmbedderResult *result = [textEmbedder embedText:text
error:nil];
Uwaga: zadanie blokuje bieżący wątek, dopóki nie zakończy działania wnioskowania na tekście. Aby uniknąć blokowania bieżącego wątku, przeprowadź przetwarzanie w wątku tła za pomocą frameworków iOS Dispatch lub NSOperation. Jeśli aplikacja została utworzona w Swift, możesz też użyć makro Swifta dotyczącym współbieżności do wykonywania wątków w tle.
W przykładowym kodzie metoda embed(text:)
jest wywoływana w pliku TextEmbedderService.swift.
Obsługa i wyświetlanie wyników
Po przeprowadzeniu wnioskowania zadanie Text Embedder zwraca obiekt TextEmbedderResult
, który zawiera listę zanurzeń (zmiennych typu float lub skalarnych) 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ć podobieństwo semantyczne 2 embeddingów, korzystając z metody TextEmbedder.cosineSimilarity
.
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];
W przykładowym kodzie metoda TextEmbedder.cosineSimilarity
jest wywoływana w pliku TextEmbedderService.swift.