Android 文字嵌入指南

MediaPipe 文字嵌入工作可讓您建立文字資料的數值表示法, 擷取語意含義這些指示說明如何使用 Android 應用程式的文字嵌入程式。

進一步瞭解功能、模型和設定選項 請參閱總覽

程式碼範例

MediaPipe 工作範例程式碼是文字嵌入程式的簡易實作方式 App Engine 應用程式這個範例會評估 ,且需要使用實體 Android 裝置或 Android 裝置 模擬器。

您可以將應用程式做為起點,當做 Android 應用程式的起點,也可以參照應用程式 做出決定Text Embedder 範例程式碼 GitHub

下載程式碼

以下說明如何建立範例的本機副本 git 指令列工具編寫程式碼。

如要下載範例程式碼,請按照下列步驟操作:

  1. 使用下列指令複製 git 存放區:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. 您也可以設定 Git 執行個體來使用稀疏結帳功能, 僅限 Text Embedder 範例應用程式的檔案:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_embedder/android
    

建立範例程式碼的本機版本後,您可以匯入專案 然後執行應用程式如需操作說明,請參閱 Android

重要元件

下列檔案包含這個文字嵌入器範例的重要程式碼 應用程式:

設定

本節說明設定開發環境的重要步驟,以及 專門使用 Text Embedder 的程式碼專案。如需 設定開發環境以使用 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 參數中指定模型的路徑。在 模型的 setupTextEmbedder() 函式中定義了模型: TextEmbedderHelper.kt 檔案:

使用 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)

程式碼範例實作會將文字嵌入器選項設為 setupTextEmbedder() 函式,用於 TextEmbedderHelper.kt 檔案。

設定選項

這項工作有下列 Android 應用程式設定選項:

選項名稱 說明 值範圍 預設值
l2_normalize 是否使用 L2 正規化將傳回的特徵向量正規化。 只有在模型未包含原生參數的情況下,才能使用這個選項 L2_NORMALIZATION TFLite 運算。在大多數情況下,這是預設情況 因此 L2 正規化會透過 TFLite 推論完成,完全不需 這個選項。 Boolean False
quantize 是否應透過以下方式,將傳回的嵌入量化為位元組: 純量量化內嵌以隱含形式被假設為單位非 因此,所有維度一定會有 [-1.0, 1.0] 的值。使用 l2_normalize 選項是如此。 Boolean False

準備資料

文字嵌入程式處理文字 (String) 資料。這個工作會處理資料輸入 預先處理作業,包括符記化和張量預先處理。所有語言 預先處理會在 embed() 函式中處理。不需要使用 預先處理輸入文字的額外內容

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

執行工作

Text Embedder 會使用 embed 函式觸發推論。文字 也就是傳回輸入文字的嵌入向量

下列程式碼示範如何使用工作模型執行處理程序。

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

範例程式碼中,會呼叫 embed 函式, TextEmbedderHelper.kt 檔案。

處理及顯示結果

執行推論時,Text Embedder 工作會傳回 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)

範例程式碼中,會呼叫 TextEmbedder.cosineSimilarity() 函式, TextEmbedderHelper.kt 檔案。