适用于 Android 的文本嵌入指南

借助 MediaPipe Text Embedder 任务,您可以创建文本数据的数字表示形式, 捕获其语义含义。以下说明介绍了如何使用 Android 应用的文本嵌入器。

如需详细了解功能、模型和配置选项 部分,请参阅概览

代码示例

MediaPipe Tasks 示例代码是文本嵌入器的简单实现 Android 版应用。该示例评估了两个字词之间的 并且要求使用实体 Android 设备或 Android 设备 模拟器。

您可以用该应用作为基础来开发自己的 Android 应用,也可以指代该应用 对现有应用进行了修改。文本嵌入器示例代码托管在 GitHub

下载代码

以下说明介绍了如何创建示例的本地副本 使用 git 命令行工具运行 git 代码库。

<ph type="x-smartling-placeholder">

如需下载示例代码,请执行以下操作:

  1. 使用以下命令克隆 git 代码库:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. (可选)配置您的 git 实例以使用稀疏检出,这样您 仅文本嵌入器示例应用的文件:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_embedder/android
    

创建示例代码的本地版本后,您可以导入项目 进入 Android Studio 并运行应用。有关说明,请参阅适用于 Android 设备

关键组件

以下文件包含此文本嵌入器示例的关键代码 应用:

设置

本部分介绍了设置开发环境和 专门用于文本嵌入器的代码项目。有关 设置开发环境以使用 MediaPipe 任务,包括 平台版本要求,请参阅适用于 Android 设备

<ph type="x-smartling-placeholder">

依赖项

文本嵌入器使用 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."

运行任务

文本嵌入器使用 embed 函数来触发推断。适用于文本 嵌入,这意味着返回输入文本的嵌入向量。

以下代码演示了如何使用任务模型执行处理。

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

在示例代码中,embed 函数在 TextEmbedderHelper.kt 文件。

处理和显示结果

运行推理时,文本嵌入器任务会返回 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 文件。