MediaPipe 文字嵌入工具工作可讓您建立文字資料的數值表示法,以擷取其語意含義。以下操作說明將說明如何搭配 Android 應用程式使用文字嵌入工具。
如要進一步瞭解這項工作的功能、模型和設定選項,請參閱總覽。
程式碼範例
MediaPipe Tasks 範例程式碼是 Android 文字嵌入程式應用程式的簡易實作方式。這個範例會評估兩段文字之間的語意相似度,且需要實體 Android 裝置或 Android 模擬器。
您可以將該應用程式做為開發 Android 應用程式的起點,或在修改現有應用程式時參照該應用程式。文字嵌入程式範例程式碼由 GitHub 代管。
下載程式碼
以下操作說明說明如何使用 git 指令列工具建立範例程式碼的本機副本。
如要下載範例程式碼,請按照下列步驟操作:
- 使用下列指令複製 Git 存放區:
git clone https://github.com/google-ai-edge/mediapipe-samples
- 您可以選擇將 Git 執行個體設為使用稀疏檢查,因此只有 Text Embedder 範例應用程式的檔案:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/text_embedder/android
建立範例程式碼的本機版本後,您可以將專案匯入 Android Studio 並執行應用程式。如需操作說明,請參閱 Android 設定指南。
重要元件
下列檔案包含此文字嵌入程式範例應用程式的重要程式碼:
- TextEmbedderHelper.kt:初始化文字嵌入程式並處理模型並委派選取。
- MainActivity.kt:實作應用程式,並組合使用者介面元件。
設定
本節說明設定開發環境的重要步驟,以及專門用於使用文字嵌入工具的程式碼專案。如需瞭解如何使用 MediaPipe 工作設定開發環境的一般資訊,包括平台版本需求,請參閱 Android 設定指南。
依附元件
文字嵌入程式使用 com.google.mediapipe:tasks-text
程式庫。將此依附元件新增至 Android 應用程式開發專案的 build.gradle
檔案。您可以使用下列程式碼匯入必要的依附元件:
dependencies {
implementation 'com.google.mediapipe:tasks-text:latest.release'
}
型號
MediaPipe 文字嵌入程式工作需要與這項工作相容的已訓練模型。如要進一步瞭解文字嵌入工具的可用已訓練模型,請參閱工作總覽「模型」一節。
選取並下載模型,然後將其儲存在專案目錄中:
<dev-project-root>/src/main/assets
在 ModelAssetPath
參數中指定模型的路徑。在這個範例程式碼中,模型會在 TextEmbedderHelper.kt 檔案的 setupTextEmbedder()
函式中定義:
使用 BaseOptions.Builder.setModelAssetPath()
函式指定模型使用的路徑。在下一節的程式碼範例中稱為此方法。
建立工作
您可以使用其中一個 createFrom...()
函式建立工作。createFromOptions()
函式可接受設定選項,設定嵌入工具選項。您也可以使用 createFromFile()
工廠函式將工作初始化。createFromFile()
函式會接受已訓練模型檔案的相對或絕對路徑。如要進一步瞭解設定選項,請參閱「設定選項」一文。
下列程式碼示範如何建構及設定這項工作。
val baseOptions = baseOptionsBuilder.build()
val optionsBuilder =
TextEmbedderOptions.builder().setBaseOptions(baseOptions)
val options = optionsBuilder.build()
textEmbedder = TextEmbedder.createFromOptions(context, options)
範例程式碼實作會設定 TextEmbedderHelper.kt 檔案的 setupTextEmbedder()
函式中的文字嵌入器選項。
設定選項
這項工作的 Android 應用程式設定選項如下:
選項名稱 | 說明 | 值範圍 | 預設值 |
---|---|---|---|
l2_normalize |
是否使用 L2 正規化傳回的特徵向量。只有在模型不含原生 L2_NORMALIZATION TFLite Op 的情況下,才能使用這個選項。在大多數情況下,已經是此情況,L2 正規化是透過 TFLite 推論達成,不需要使用這個選項。 | Boolean |
False |
quantize |
是否應透過純量量化,將傳回的嵌入量化為位元組。以隱含方式假設嵌入為單位標準,因此任何維度保證在 [-1.0, 1.0] 中都有一個值。如果並非如此,請使用 l2_正規化選項。 | Boolean |
False |
準備資料
文字嵌入程式適用於文字 (String
) 資料。這項工作會處理資料輸入預先處理作業,包括代碼化和張量預先處理。所有預先處理作業都會在 embed()
函式中處理。不需要事先對輸入文字進行額外的預先處理。
val inputText = "The input text to be embedded."
執行工作
文字嵌入程式使用 embed
函式觸發推論。如果是嵌入文字,這代表傳回輸入文字的嵌入向量。
下列程式碼示範如何使用工作模型執行處理作業。
textEmbedder?.let {
val firstEmbed =
it.embed(firstText).embeddingResult().embeddings().first()
val secondEmbed =
it.embed(secondText).embeddingResult().embeddings().first()
...
}
在範例程式碼中,系統會在 TextEmbedderHelper.kt 檔案中呼叫 embed
函式。
處理並顯示結果
執行推論時,文字嵌入工具工作會傳回 TextEmbedderResult
物件,其中包含輸入文字的嵌入清單 (浮點或純量化)。
以下為這項工作的輸出資料範例:
TextEmbedderResult:
Embedding #0 (sole embedding head):
float_embedding: {0.2345f, 0.1234f, ..., 0.6789f}
head_index: 0
您可以使用 TextEmbedder.cosineSimilarity
函式比較兩個嵌入的語意相似度。請看以下程式碼示例。
val similarity = TextEmbedder.cosineSimilarity(firstEmbed, secondEmbed)
在範例程式碼中,系統會在 TextEmbedderHelper.kt 檔案中呼叫 TextEmbedder.cosineSimilarity()
函式。