Zadanie Wstawianie tekstu umożliwia tworzenie reprezentacji liczbowej danych tekstowych w celu uchwycenia ich znaczenia semantycznego. Z tych instrukcji dowiesz się, jak korzystać z funkcji dodawania 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 modułu Text Embedder zawiera podstawową implementację aplikacji na iOS, która integruje to zadanie. Przykład sprawdza podobieństwo semantyczne między 2 fragmentami tekstu i wymaga użycia 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 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 blok MediaPipeTasksText
w Podfile
za pomocą tego kodu:
target 'MyTextEmbedderApp' do
use_frameworks!
pod 'MediaPipeTasksText'
end
Jeśli Twoja aplikacja zawiera cele testów jednostkowych, dodatkowe informacje o konfigurowaniu Podfile
znajdziesz w przewodniku konfiguracji na iOS.
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
, by 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. Inicjalizator TextEmbedder(options:)
może przyjmować 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
W tym zadaniu dostępne są 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 umieścić tekst wejściowy i uzyskać jego wektory dystrybucyjne, możesz użyć metody embed(text:)
z biblioteki 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 wnioskowania na tekst. Aby uniknąć blokowania bieżącego wątku, przeprowadź przetwarzanie w wątku tła za pomocą frameworków iOS Dispatch lub NSOperation. Jeśli Twoja aplikacja została utworzona za pomocą języka Swift, możesz też używać Swift Concurrency 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ł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ć 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.