借助内置 AI 技术,Chrome 可检测语言

发布时间:2024 年 9 月 24 日

在将文本从一种语言翻译成另一种语言之前,您必须先确定给定文本所使用的语言。以前,翻译需要将文本上传到云服务,在服务器上执行翻译,然后下载结果。

Language Detector API 会在设备端进行推理,以便您改善隐私保护状况。虽然可以发布执行此操作的特定库,但需要下载额外的资源。

可用性

用例示例

Language Detector API 主要适用于以下场景:

  • 确定输入文本的语言,以便进行翻译。
  • 确定输入文本的语言,以便加载适用于语言特定任务(例如毒性检测)的正确模型。
  • 确定输入文本的语言,以便正确标记文本,例如在在线社交网络网站中。
  • 确定输入文本的语言,以便相应地调整应用界面。例如,在比利时网站上,仅显示与法语用户相关的界面。

使用 Language Detector API

Language Detector API 是 Translator API 更大的家族的一部分。首先,运行特征检测以查看浏览器是否支持 Language Detector API。

if ('translation' in self && 'canDetect' in self.translation) {
  // The Language Detector API is available.
}  

模型下载

语言检测依赖于针对检测语言的特定任务进行微调的模型。虽然该 API 是在浏览器中构建的,但当网站首次尝试使用该 API 时,系统会按需下载模型。在 Chrome 中,与其他模型相比,此模型非常小。事实上,由于 Chrome 浏览器功能也使用此模型,因此它可能已经存在。

如需查看模型是否可供使用,请调用异步 translation.canDetect() 函数。有三种可能的响应:

  • 'no':当前浏览器支持 Language Detector API,但目前无法使用。例如,由于没有足够的可用磁盘空间来下载模型。
  • 'readily':当前浏览器支持 Language Detector API,并且可以立即使用。
  • 'after-download':当前浏览器支持 Language Detector API,但需要先下载模型。

如需触发下载并实例化语言检测器,请调用异步 translation.createDetector() 函数。如果对 canDetect() 的响应为 'after-download',最佳实践是监听下载进度,以便在下载需要时间时通知用户。

以下示例演示了如何初始化语言检测器。

const canDetect = await translation.canDetect();
let detector;
if (canDetect === 'no') {
  // The language detector isn't usable.
  return;
}
if (canDetect === 'readily') {
  // The language detector can immediately be used.
  detector = await translation.createDetector();
} else {
  // The language detector can be used after model download.
  detector = await translation.createDetector();
  detector.addEventListener('downloadprogress', (e) => {
 console.log(e.loaded, e.total);
  });
  await detector.ready;
}

运行语言检测器

Language Detector API 使用排名模型来确定给定文本中最有可能使用的是哪种语言。排名是一种机器学习,其目标是对项列表进行排序。在这种情况下,Language Detector API 按可能性从高到低对语言进行排序。

detect() 函数可以返回第一个结果(最可能的答案),也可以按置信度对排名候选进行迭代。这将作为 {detectedLanguage, confidence} 对象的列表返回。confidence 级别表示为介于 0.0(最低置信度)和 1.0(最高置信度)之间的值。

const someUserText \= 'Hallo und herzlich willkommen\!';
const results \= await detector.detect(someUserText);
for (const result of results) {
  // Show the full list of potential languages with their likelihood, ranked
  // from most likely to least likely. In practice, one would pick the top
  // language(s) that cross a high enough threshold.
  console.log(result.detectedLanguage, result.confidence);
}
// (Output truncated):
// de 0.9993835687637329
// en 0.00038279531872831285
// nl 0.00010798392031574622
// ...

演示

在我们的演示中预览 Language Detector API。在文本区域中输入不同语言的文本。

标准化工作

相应提案获得足够支持后,Language Detector API 已移至 W3C Web Incubator Community Group。该 API 是更大的 Translation API 提案的一部分。

Chrome 团队向 W3C 技术架构团队征求反馈,并请 MozillaWebKit 了解自己的标准。

欢迎分享反馈

如果您对 Chrome 的实现有任何反馈,请提交 Chromium bug。您可以在 Translation API GitHub 代码库中对现有问题发表评论或创建新问题,分享您对 Language Detector API 的 API 形状的反馈。