任务架构

Android ML Kit 短文本语言识别与翻译方向路由

仅处理单语言短选区的识别结果到翻译方向建议;不扩展为词典、形态学、混合语言 span 检测或 translation 模型生命周期文章。

审核状态: 内容已校验;中文稿供用户审核 · 2026-10-08 · Fact IDs: MLKIT-LANGUAGE-ID-2026-10, ARCH-01, BENCHMARK-01

直接回答

自动语言识别可为一段较短、单语言文本建议翻译源语言,但不能静默替代用户选择,也不能宣称解决混合语言文本。ML Kit Android Language ID 提供 identifyLanguage(),返回最可能的 BCP-47 语言标签;置信阈值未达到时返回 und。默认阈值是 0.5。identifyPossibleLanguages() 返回候选及其分数,针对整段输入应用另一个默认阈值 0.01;若没有候选达标,列表仍包含 und。这些 API cutoff 说明候选筛选行为,不构成应用领域校准证据、翻译置信度,也不能证明选定 translator 支持该语言。 短输入边界有明确文档。ML Kit 说明超过 200 字符的输入会截断为 200 字符用于识别,但没有暴露内部窗口的详细边界。若要可复现地路由,应选择并版本化应用自有、至多 200 字符的片段,对照实际 SDK 测试 Unicode 边界计数,再传入准确片段。完整原文、应用选定窗口和实际提交片段应分别保留。若直接提交更长文本而由 SDK 内部截断,应将 detector 实际窗口标为 API 限定/未知,不要声称观察到了内部窗口。依据有限片段的候选不能说成覆盖整份文档。空字符串、标点、数字、姓名、跨语言共用词和罗马化拼写可能缺少足够证据;此时合理结果可以是 und 或手动语言选择。 根据 UI 要做的决策选择方法。如果应用只需要一个源语言建议,identifyLanguage() 返回一个标签或 und。如果界面要展示多个备选供用户选择,identifyPossibleLanguages() 提供候选标签和置信值。后者仍假设整段输入只有一种语言;ML Kit 明确不在同一字符串中识别多种语言。不要把候选列表当成逐词 span,也不要拿首个结果重写混合语句。混合文字应进入单独复核流程,或让用户选择源语言。 识别出的语言标签本身不是翻译路由。应分别记录 detector 的 BCP-47 标签、用户选定源语言、目标语言、应用映射、translator 支持方向和翻译资源状态。识别器可能返回 translator 不支持、仅支持单方向,或尚未下载资源的标签。区域/脚本限定标签映射要有版本,不能用字符串前缀兜底。检测是异步的:实际应用结果时,在同一 owner 控制的串行或原子事件路径重新比较 request ID、输入修订号和手动覆盖修订号。若仅在 callback 入队前检查,排队期间的新选区仍可能造成竞态。映射缺失或含混时保留为建议,让用户选方向。 模型就绪又是另一种状态。ML Kit 提供 bundled 与 unbundled Android 库;unbundled 模型由 Google Play services 交付,首次启动时可能尚未就绪。指南说明,模型下载完成前发出的请求不会返回结果。要将这种可用性/任务失败与成功返回 und 分开。没有结果不能被转换成 und,也不能假设语言识别模型已就绪就代表 translator 的翻译模型或离线语言包也齐全。识别失败时保留原始片段,并允许用户手动选择方向,而不丢弃正在编辑的文本。 置信值要谨慎处理。ML Kit 暴露 confidence 和方法阈值,但 API cutoff 不构成针对应用领域、文本类型、长度或语种对的校准证据,分数也不是准确率保证。提高 setConfidenceThreshold 会改变返回哪些候选,不会建立一个对所有任务都更安全的通用阈值。根据错误后果和独立标注样例选择阈值,记录准确数值,并保留 und 与歧义状态。除非有覆盖目标输入人群的单独校准研究,否则不要展示正确率百分比。 使用按长度和文本形态分组的合成片段评估路由,不评翻译质量:清晰短句、姓名、数字、纯标点、仅对官方文档支持语言的罗马化例子,以及必须拒绝整体自动路由的混合语言控制样例。比较单标签模式与候选列表模式,测试阈值边界,并模拟 unbundled 模型尚未安装。记录 SDK artifact、Android API、交付方式、原文/选定窗口/提交片段及其字符长度、detector 输出、用户覆盖、translator 方向映射和语言资源状态。内容使用合成或获许可资料,不写入日志。本文只说明单语言源方向建议方法,不是基准测试、Cove 集成、词典工作流或混合语言 detector。

用户选中一句短文本,需要系统建议翻译方向

Android 写作流程拿到一段没有语言元数据的短选区,用户希望离线翻译。选区可能只是姓名或极短短语,而 translator 的源语言选项和翻译资源又是单独配置的。

决策

用 ML Kit 给单语言内容一个建议;und 或歧义继续让用户手选;之后再将 BCP-47 标签映射到 translator 实际支持且资源就绪的方向。

预期结果

界面可以建议源语言,但不会把 detector 分数当翻译质量,也不会把 Language ID 模型当翻译语言包。

需要收集的证据

只有将以下证据与同一模型文件和测试运行关联起来,结论才可复核:

  • MLKIT-LANGUAGE-ID-2026-10:ML Kit Language ID 的 API 23+、单语言输入、阈值、und、200 字符截断和模型交付边界。
  • ARCH-01:端侧定义说明推理位置,不证明 UI locale、语言识别和翻译方向等同。
  • BENCHMARK-01:缺少完整结果集时只描述方法,不宣称已测语言支持或检测质量。

任务质量需要有版本记录的语料和验收规则;流畅的单条样例不等于准确度结果。

实施流程

  1. 保留并版本化单语言选区. 把完整原文、选区边界、输入修订号和 request ID 一起保存。选择并版本化至多 200 字符的应用自有窗口,对照实际 SDK 测试 Unicode 边界计数,再传入准确片段;分别记录原文、选定窗口和已提交片段。
  2. 选择识别方法和阈值. 记录调用 identifyLanguage 还是 identifyPossibleLanguages、显式配置的阈值以及未设置时的默认值。测试 und;API cutoff 不构成领域校准证据,分数不是准确率保证或翻译质量。
  3. 处理短、未知和混合输入. und、姓名、数字、过短文本或混合语句应保留手动选择。不要从整串语言猜测生成逐 span 路由。
  4. 把标签映射到翻译能力. 通过明确且有版本的映射将 BCP-47 标签转成应用源语言选项。随后独立核查目标方向、translator 支持和必需资源;未知映射要继续标记未知。
  5. 分别确认模型就绪和恢复路径. 对 unbundled ML Kit,区分尚未下载而无结果、任务失败与成功返回 und。识别不可用时保留文本并提供手动方向选择。
  6. 运行长度和路由夹具. 测试 SDK 限制附近的输入与 Unicode 边界,以及标点、数字、姓名、罗马化拼写和混合语言控制样例。优先传明确受限的应用片段。若提交更长文本并由 SDK 内部截断,将精确 detector 窗口标为未知;分别记录提交片段和最终路由。

让每个阶段的状态都可观察。失败信息应指出阶段、模型、运行时和恢复动作,同时避免记录用户私密内容。

验收标准

  • 记录准确的 ML Kit 方法及阈值;不混淆 identifyLanguage 默认 0.5 和 identifyPossibleLanguages 默认 0.01。
  • 需精确追溯时,使用版本化且不超过 200 字符的应用自有输入窗口,并按实际 SDK 测试 Unicode 边界计数。直接提交更长字符串时,内部窗口标为 API 限定/未知;API cutoff 不构成领域校准证据,分数不作为准确率保证。
  • detector 只为单语言输入提供建议;und、混合文本、未知标签和不支持方向保留手动回退。结果应用时,须在同一 owner 串行/原子路径重新校验 request ID、输入修订和手动覆盖修订;仅在 callback 入队前检查不够。
  • bundled/unbundled 模型就绪和异步失败与成功 und、translator 语言资源就绪分开。
  • 不声称 Cove 集成了 ML Kit Language ID,也不声称识别所有脚本或翻译语言对。

决策对照表

维度选择或证据解读方式
identifyLanguage()为整段片段建议一个 BCP-47 标签或 und。默认阈值 0.5;不是逐词 span detector,也不能证明 translator 支持该方向。
identifyPossibleLanguages()显示整段文本的候选语言供用户选择。默认阈值 0.01;API cutoff 不构成应用领域校准证据,分数不是准确率保证。
用户手动选择源语言允许用户选择或更正翻译源方向。适用于短、含混、混合或不在映射表内的片段,避免强制路由。
翻译资源状态语言选择后单独检查 translator 支持方向和资源就绪。语言识别模型就绪不等于翻译模型或离线语言包已就绪。

需要避免的失败模式

  • 把 identifyLanguage 与 identifyPossibleLanguages 的默认阈值 0.5/0.01 当成同一个设置。
  • 把 confidence 显示成校准概率、翻译质量分数,或把 und 解释成模型任务失败。
  • 将整个句子的语言猜测当作混合文本中的逐词/逐 span 检测。
  • 把 Language ID 模型就绪、translator 支持方向和翻译语言资源已下载视为同一状态。

还要避免静默回退、版本未固定、缺少取消处理,以及把不同配置的结果混在一起下结论。失败运行也应与成功记录一并保存。

最小复现记录

层级记录内容
设备厂商、型号、芯片、内存档位、操作系统版本
软件应用版本和 Git 提交号
模型系列、变体、版本、格式、文件长度、摘要、量化方式
运行时名称、版本、请求后端及实际后端证据
工作负载样例版本、输入摘要、提示词摘要、输出策略
结果完成、失败、取消、回退及保护隐私的诊断信息

发布检查表

  • ☐ 主要搜索问题已回答,且没有未经支持的数字。
  • ☐ 所有模型文件和运行时版本均已固定。
  • ☐ 代表性任务和失败处理策略均有说明。
  • ☐ 生命周期、取消、清理和回退均已测试。
  • ☐ 用户内容与网络边界均有说明。
  • ☐ 结论只适用于被记录的配置。
  • ☐ 新增测试结果时链接到原始方法或证据。

来源与相关证据

中文部署与排错专题见。奇连 AI 端侧专题。

常见问题

ML Kit 会识别一句混合语句中的多种语言 span 吗?

不会。Android 文档说明 API 假设整个输入为一种语言,不会在同一字符串中识别多语言。混合文本要走独立 span 逻辑或人工复核。

置信分数能证明我的应用识别准确率吗?

不能。API 文档记录置信值和方法阈值,但没有提供针对你的应用领域的校准证据或准确率保证。展示正确率百分比或自动执行高后果路由前,应使用独立标注样例评估,并单独验证目标人群。

输入超过 200 字符会怎样?

API 文档说更长输入会截断到 200 字符,但没有暴露内部窗口细节。要可复现地路由,应选择版本化且不超过 200 字符的应用自有片段,并用 SDK 测试 Unicode 边界行为。若直接提交更长文本,应把识别窗口标为未知。

异步结果如何避免覆盖用户刚做的新选择?

在实际应用结果时,于同一 owner 控制的串行/原子路径比较 request ID、输入修订和手动覆盖修订。只在 callback 入队前检查会与较新的选择产生竞态。

unbundled 模型没有结果就代表 und 吗?

不代表。ML Kit 说明模型下载完成前发出的请求不会返回结果。要把模型未就绪或任务失败与成功返回 und 分开记录。